Java反射

主要介绍以下几方面内容

  • 理解 Class 类

  • 理解 Java 的类加载机制

  • 学会使用 ClassLoader 进行类加载

  • 理解反射的机制

  • 掌握 Constructor、Method、Field 类的用法

1.理解Class类

  –对象照镜子后可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个类的有关信息。

  –Class 对象只能由系统建立对象

  –一个类在 JVM 中只会有一个Class实例

  –每个类的实例都会记得自己是由哪个 Class 实例所生成

1: Class是什么?

Class类的构造器由private修饰,且只有一个。类似单例形式。forName方法返回了Class类型。

Class是一个类:

public class ReflectionTest {
    @Test
    public void testClass() {
       Class clazz = null;
    }
}
​
​
//Class的定义
public final
    class Class<T> implements java.io.Serializable,
                              java.lang.reflect.GenericDeclaration,
                              java.lang.reflect.Type,
                              java.lang.reflect.AnnotatedElement {
​
.....
.....
.....
}//小写class表示是一个类类型,大写Class表示这个类的名称

2.获取Class对象的三种方式

  1.通过类名获取 类名.class

  2.通过对象获取 对象名.getClass()

  3.通过全类名获取 Class.forName(全类名)

 

3.Constructor

  String className = "com.atguigu.java.fanshe.Person";
        Class<Person> clazz = (Class<Person>) Class.forName(className);
        
        //1. 获取 Constructor 对象
        //   1.1 获取全部
        Constructor<Person> [] constructors = 
                (Constructor<Person>[]) Class.forName(className).getConstructors();
        
        for(Constructor<Person> constructor: constructors){
            System.out.println(constructor); 
        }
        
        //  1.2获取某一个,需要参数列表
        Constructor<Person> constructor = clazz.getConstructor(String.class, int.class);
        System.out.println(constructor); 
        
        //2. 调用构造器的 newInstance() 方法创建对象
        Object obj = constructor.newInstance("zhagn", 1);          

4.Method

由于一个类中 天生就有很多方法,所以获取方法一定是获取一个方法组。

Mehod类中的invoke方法就是相当于执行被引用的方法。

m.invoke(obj, args);//obj代表了被引用的对象,args就是被引用方法的参数

Method methods[] =  clazz.getMethods();
                        for(Method m : methods) {
                            if(m.getName().equals("show")) {
                                System.out.println(m);
                                m.invoke(obj, args);
                            }
                        }

静态代理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值