Java反射机制详解

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

1、关于Class

1、Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Method,描述字段的Filed,描述构造器的Constructor等属性
2、对象照镜子后(反射)可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。
3、对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。
    一个 Class 对象包含了特定某个类的有关信息。
4、Class 对象只能由系统建立对象
5、一个类在 JVM 中只会有一个Class实例

/**
* 反射机制获取类有三种方法
*/
@Test
public void testGetClass() throws ClassNotFoundException {
Class clazz = null;

    //1 直接通过类名.Class的方式得到
    clazz = Person.class;
    System.out.println("通过类名: " + clazz);

    //2 通过对象的getClass()方法获取,这个使用的少(一般是传的是Object,不知道是什么类型的时候才用)
    Object obj = new Person();
    clazz = obj.getClass();
    System.out.println("通过getClass(): " + clazz);

    //3 通过全类名获取,用的比较多,但可能抛出ClassNotFoundException异常
    clazz = Class.forName("com.java.reflection.Person");
    System.out.println("通过全类名获取: " + clazz);

3、利用newInstance创建对象:调用的类必须有无参的构造器

/**
 * Class类的newInstance()方法,创建类的一个对象。
 */
@Test
public void testNewInstance()
        throws ClassNotFoundException, IllegalAccessException, InstantiationException {

    Class clazz = Class.forName("com.java.reflection.Person");

    //使用Class类的newInstance()方法创建类的一个对象
    //实际调用的类的那个 无参数的构造器(这就是为什么写的类的时候,要写一个无参数的构造器,就是给反射用的)
    //一般的,一个类若声明了带参数的构造器,也要声明一个无参数的构造器
    Object obj = clazz.newInstance();
    System.out.println(obj);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值