Java开发之框架基础技术——反射

1.1 Java反射概念

概念:反射(Reflection)机制是Java语言特性之一,是Java被视为动态(获准动态)语言的一个关键特性。

作用:之前我们所运行的程序都是在编译之前就已经链接了所有所需的类,而Java反射机制则允许程序在运行时在加载、探知,使用那些在编译时完全未知的类

        1.1.1 什么是反射

                1、概念:在计算机领域,反射是指一种能力,能够自描述自控制,即在运行状态中,动态获取类信息及信息动态调用实例方法的能力

                2、三个动态特性:

                        ①运行时创建动态特性

                        ②运行期间调用方法

                        ③运行时更改属性

                3、Java程序执行过程:

                        Person.java → 编译器 → Person.class → Java虚拟机 → 运行程序

        1.1.2 Java反射常用API

                常用类:

                        ①java.lang.Class<T>类:反射的核心类,反射所有的操作都是围绕该类来生
                        成的。通过Class类可以获取类的属性、方法等内容信息

                        ②java.lang.reflect.Constructor<T>类:表示类的构造方法

                        ③java.lang.reflect.Field类:表示类的属性,可以获取和设置类中属性的值

                        ④java.lang。Method类:表示类的方法,可以用来获取类中的方法的信息或

                        者执行方法

1.2 反射的应用

使用的基本步骤

        (1)导入java.lang.reflect包中的相关类

        (2)获得需要操作的类的Class实例

        (3)调用Class实例的方法获取Filed、Method等实例

        (4)使用反射API操作实例成员

        1.2.1 获取类的信息

                1、获取Class实例

                        ①调用类或接口实例的getClass()方法

                        ②调用类或接口的class属性

                        ③使用Class.forName()方法

                2、从Class实例获取信息

                        ①获取对应类型的基本信息

表 1-1获取对应类型基本信息的方法

方法

说明
String getName() 以字符串形式返回该类型的名称
String getSimpleName()
 
以字符串形式返回该类型的简称
Package getPackage()
 
获取该类型所在的包
Class getSuperclass()
 
返回该类型的超类的Class实例
Class[ ] getInterfaces()
 
返回该类型所实现的全部接口的Class实例
int getModifiers() 返回该类型的所有修饰符,由public、 protected、private、final、staic、abstract 等对应的int常量组成,返回的整数应使用Modifier工具类来解码,才可以判断修饰符的构成
Class[ ] getDeclaredClasses()
 
返回该类型中包含的全部内部类的Class实例
Class getDeclaringClass()

返回该类型所在的外部类的Class实例

通过反射获取类的类型信息代码:

package test;

import reflect.entity.Person;

import java.lang.reflect.Modifier;


public class PersonTest2 {
    public static void main(String[] args) {
        Class clz = Person.class;
        String fullName = clz.getName();
        String simpleName = clz.getSimpleName();
        System.out.println("以下是 " + fullName + " 类的基本信息");
        System.out.println("--------------------------");

        // 获取Person类所在包
        Package pkg = clz.getPackage();
        System.out.println(simpleName + " 定义在:" + pkg.getName() + " 包中");
        Syst
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值