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");
	}
}
相關文章
相關標籤/搜索