Java反射 —— class类的使用

package com.imooc.reflect;

public class ClassDemo1 {
	public static void main(String[] args) {
		//Foo的实例对象如何表示
		Foo foo1 = new Foo();//foo1就表示出来了.

		//Foo这个类也是一个实例对象,Class类的实例对象,如何表示呢
		//任何一个类都是Class的实例对象,这个实例对象有三种表示方式
		
		//第一种表示方式--->实际在告诉咱们任何一个类都有一个隐含的静态成员变量class
		Class c1 = Foo.class;
		
		//第二中表达方式--->已经知道该类的对象经过getClass方法
		Class c2 = foo1.getClass();
		
		/* 
		 * 万事万物皆对象,类也是对象,是Class类的实例对象,这个对象咱们称为该类的类类型
		 * c1, c2 表示了Foo类的类类型(class type)
		 */
		
		//无论c1 or c2都表明了Foo类的类类型,一个类只多是Class类的一个实例对象
		System.out.println(c1 == c2);
		
		//第三种表达方式
		Class c3 = null;
		try {
			c3 = Class.forName("com.imooc.reflect.Foo");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(c2 == c3);
		
		//咱们彻底能够经过类的类类型建立该类的对象实例---->经过c1 or c2 or c3建立Foo的实例对象
		try {
			Foo foo = (Foo)c1.newInstance();//须要有无参数的构造方法
			foo.print();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
		
	}
}

class Foo{
	void print(){
		System.out.println("foo");
	}
}
相关文章
相关标签/搜索