java 反射基础

2019-07-25  本文已影响0人  写代码的向日葵

1.java反射基础

2.java反射进阶


反射的两个显著的作用

反射机制需要使用到的类

实现反射,实际上是得到Class对象,使用java.lang.Class这个类。这是Java反射机制的起源,当一个类被加载后,Java虚拟机会自动产生一个Class对象。

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

(1).反射机制获取类,以简单获取Reflect类为例

Class  c1=Class.forName("com.zhangqing.Reflect")

(2).java中每个类都有Class属性

Class c2=Reflect.Class;

(3).通过getClass方法获取

Class c3=new Reflect().getClass();

这三种初始化方式的区别在于:

2.无参数创建对象

(1). forName 中的参数需要填入全路径名

Class c=Class.forName("com.zhangqing.Reflect");
Object o=c.newInstance();

New和newInstance()的区别

3.有参数创建对象

有参构造方法在调用参数时需要药天蝎的参数类型:

Constructor<?> csr=c.getConstructor(String.class,int.class);
Object o=csr.newInstance("zhangqing",26);

这里的getConstructor方法会返回一个Constructor对象,它反反映类此Class对象所表示的类指定的公共构造方法。

4.反射类中的属性需要使用Field对象

    Field field=cls.getDeclaredField("name");

使用setAccessible取消封装,特别是可以取消私有字段的访问限制。

    field.setAccessible(true);

O是属性所在的类对象(类的实例)

    field.set(0,"zhangqing");

5.修改属性中修饰符

    Field field=cls.getDeclaredField("name");
    String priv=Modifier.toString(file.getModifiers());

6.反射类中的方法

(1).获取类中的方法

   Method m=c.getDeclaredMethod("setName",String.class);

(2).通过反射调用方法

    m.invoke(c,"zhangqing");

进阶内容见下一篇java反射进阶

上一篇下一篇

猜你喜欢

热点阅读