Java学习笔记(二)—— 反射

Java-reflect专题
– Class类的使用方式
– 在面向对象中万物皆对象
– 除去基本数据类型 和 静态 ,但是基本数据类型有包装类,静态的东西属于类,类似于静态的常量
– 基本数据类型不是对象
– 静态的东西属于类,不是对象
– 类属于也属于对象,类对象,类属于Java.lang.Class类的实例对象
– there is a class named Class
– 现在有一个类的名字就是Class,在Java中每一个存在的类就是这个类的实例
– 方法的反射
– 成员变量的反射
– 构造函数的反射
– Java类加载机制

package reflect;

public class ClassDemo {

    public static void main(String[] args) {
        // Foo 的对象怎么表示
        Foo foo = new Foo();
        // 但是Foo() 这个类也是一个实例对象,这个类是java.lang.Class这个类的实例对象
        // 如何表示表示Class类的实例对象 不能够通过new得到Class类的实例对象
        // 通过java.lang.Class的源码可以看到这个类是不能够使用构造方法来创建实例对象的
        // 因为源码里面的构造器是私有的,只有JVM才能够使用创建这个类的实例对象

        /**
         * 任何一个类都是Class的实例对象,这个实例对象有三种表现方式
         * 
         */
        // 第一种方式--> 实际上在告诉我们任何一个类都有一个隐含的静态变量class
        Class<?> class1 = Foo.class;

        // 第二种方式 --> 已经知道该类的对象通过调用getClass()
        Class<?> class2 = foo.getClass();

        /**
         * 官方说法: class1 class2表示了Foo类的类类型(class Type) 类类型 class1 class2 万事万物皆对象 累也是对象
         * 是Class类的实例对象 这个对象我们称之为该类的类类型
         */
        // 不管class1 还是 class2 都代表了Foo类的类类型,一个类只可能够是Class类的一个实例对象
        System.out.println(class1 == class2); // true

        // 第三种方式 -->
        Class<?> class3 = null;
        try {
            // 这里Class.forName参数为当前类的全称,Foo在包reflect包当中就写reflect.Foo
            // 注意这里反射的是类Foo 不是 ClassDemo
            class3 = Class.forName("reflect.Foo");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        // 因为一个类只可能是Class类的一个实例对象
        System.out.println(class2 == class3);

        // 我们完全可以通过该类的类类型创建爱该类的对象
        // 通过class1 class2 class3创建类Foo的对象,使用类类型的newInstance() 方法
        // 这个class1 是谁的类类型 创建出来的就是谁的对象,在这里class1 是Foo类的类类型,创建出来的就是Foo类的对对象
        try {
            class1.newInstance();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 


    }
}

class Foo {

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值