Class類(lèi)是描述整個(gè)類(lèi)的概念,所以也是整個(gè)反射的操作源頭,那么在使用Class類(lèi)的時(shí)候需要關(guān)注的依然是這個(gè)類(lèi)的對(duì)象,而這個(gè)類(lèi)的對(duì)象的產(chǎn)生模式一共有三種。
任何的實(shí)例化對(duì)象可以通過(guò)Object類(lèi)中的getClass()方法取得Class類(lèi)對(duì)象:
package com.gwolf;
import java.util.Date;
public class TestDemo {
public static void main(String[] args) {
Class cls = new Date().getClass();
}
}
第二種實(shí)例化對(duì)象是,'類(lèi).class':直接根據(jù)某一個(gè)具體的類(lèi)來(lái)取得Class類(lèi)的實(shí)例化對(duì)象:
package com.gwolf;
import java.util.Date;
public class TestDemo {
public static void main(String[] args) {
Class cls = Date.class; //不需要實(shí)例化Date類(lèi)對(duì)象了。
}
}
第三種實(shí)例化的方式:使用Class類(lèi)提供的方法,Class.forName(String className)。
package com.gwolf;
public class TestDemo {
public static void main(String[] args) throws Exception {
Class cls = Class.forName('java.util.Date');
}
}
在以上給出的三個(gè)方法里面我們會(huì)返現(xiàn)一個(gè)神奇的地方:除了第一種形式會(huì)產(chǎn)生Date類(lèi)的實(shí)例化對(duì)象之外,其他的兩種都不會(huì)產(chǎn)生Date類(lèi)的實(shí)例化對(duì)象。于是取得了Class類(lèi)對(duì)象有一個(gè)最直接的好處:可以直接通過(guò)反射實(shí)例化對(duì)象,在Class類(lèi)里面定義有如下一個(gè)方法:
public T newInstance()
throws InstantiationException, IllegalAccessException
利用反射實(shí)例化對(duì)象:
package com.gwolf;
public class TestDemo {
public static void main(String[] args) throws Exception {
Class cls = Class.forName('java.util.Date');
Object obj = cls.newInstance(); //實(shí)例化對(duì)象,等價(jià):new Date()
}
}
那么現(xiàn)在發(fā)現(xiàn)除了關(guān)鍵字new之外,對(duì)于對(duì)象的實(shí)例化模式有了第二種做法,通過(guò)反射進(jìn)行。
聯(lián)系客服