java反射--Class类

面向对象的世界里,万事万物皆对象。

1)类是谁的对象呢?

类是对象,类是java.lang.Class类的实例对象。

2)这个对象如何表示呢?

package com.reflect;

public class ClassDemo1 {

    public static void main(String[] args) {

        //Foo的对象如何表示
        Foo foo1=new Foo();//f001就表示出来了
        //Foo这个类,也是一共实例对象,Class类的实例对象,如何表示呢?
        //任何一共类都是Class类的实例对象,这个实例对象有三种表示方式
        
        //第一种表示方式--》实际告诉我们,任何一共类都有一个隐含的静态成员变量class
        Class c1=Foo.class;
        
        //第二种表达方式   已知该类的对象,通过getClass方法
        Class  c2=foo1.getClass();
        
        //官网c1,c2表示了Foo类的类类型(class type)
        //万事万物皆对象,
        //类也是对象,是Class类的实例对象,
        //这个对象我们称为类的类类型
        
        //不管c1 还是 c2 都代表了Foo类的类类型,一共类只可能是Class类的一共实例对象
        System.out.println(c1==c2);
        
        //第三种表达方式
        Class c3=null;
        try {
            c3=Class.forName("com.reflect.Foo");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println(c2==c3);
        
        //我们完全可以通过类的类类型创建该类的实例对象-->,通过c1或c2或c3创建Foo的实例
        try {
            Foo foo2=(Foo)c1.newInstance();    //需要有无参数的构造方法
            foo2.print();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        
    }

}
class Foo{
    
    void print()
    {
        
    }
}

 

posted @ 2018-01-08 12:59  美好的明天  阅读(305)  评论(0编辑  收藏  举报