第一種方法:
public static void main(String[] args) {
String str = "Hello";
Class<?> cls = str.getClass(); //必須有一個(gè)實(shí)例化的對(duì)象
System.out.println(cls);
第二種:
public static void main(String[] args) {
Class<?> cls = java.lang.String.class;
System.out.println(cls);
這種方法不需要一定要一個(gè)實(shí)例化的對(duì)象,直接通過(guò)類名就能得到。但是這種方法必須有一個(gè)明確的結(jié)構(gòu),就是那個(gè)類必須要存在哩都。java.lang.String.class 如果這里寫錯(cuò)了,程序就必然會(huì)報(bào)錯(cuò)婉徘。編譯不能通過(guò)漠嵌。但是有的時(shí)候的情況是,我們要給之后的可能新有的類預(yù)留出空間盖呼,這樣這么做就不行了献雅。
第三種方法:
public static void main(String[] args) throws Exception{
Class<?> cls = Class.forName("java.lang.String");
System.out.println(cls);
這個(gè)方法的好處就是即使java.lang.String不存在,在編譯的時(shí)候也不會(huì)報(bào)錯(cuò)塌计,只有在運(yùn)行的時(shí)候才會(huì)報(bào)錯(cuò)挺身。
但是我們的目的不是取得類對(duì)象,取得類對(duì)象之后锌仅,我們得到類的實(shí)例化對(duì)象的方法就不用new了章钾,這時(shí)候就可以用Class里面的方法newInstance()。
這個(gè)方法可能會(huì)拋出兩個(gè)異常:
InstantiationException: 沒(méi)有無(wú)參構(gòu)造热芹,或者類名錯(cuò)誤
IllegalAccessException:構(gòu)造方法私有化