反射-Class

package classes;

public class ClassDemo1 {
    public static void main(String[] args){
        Foo foo1 = new Foo();//foo1 是一个实例对象
        //同时 Foo 也是Class的一个实例对象,任何一个类都事Class的一个实例对象
        //Class对象的构造方法是私有的构造方法, 只能由虚拟机创建
        //Class 有三种创建方式

        //第一中创建方式
        Class c1 = Foo.class;

        //第二种床创建方式
        Class c2 = foo1.getClass();

        /*官网说明c1, c2 表示了Foo类的类类型(class type) ,正说明了类也是对象*/

        System.out.println(c1 == c2); //true
        //c1 和c2 都是类类型一个类只可能是Class的一个实例对象

        //第三种方式,通过类的全称获得Class 的对象

        try {
            Class c3 = Class.forName("classes.Foo");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        // 可以通过类的类型创建类的实例

        try {
            Foo foo = (Foo)c1.newInstance();
            System.out.println(foo);
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

class Foo{}

 

posted @ 2017-10-23 10:46  诺-诺  阅读(118)  评论(0编辑  收藏  举报