第一種方法:
public static void main(String[] args) {
String str = "Hello";
Class<?> cls = str.getClass(); //必須有一個實例化的對象
System.out.println(cls);
第二種:
public static void main(String[] args) {
Class<?> cls = java.lang.String.class;
System.out.println(cls);
這種方法不需要一定要一個實例化的對象,直接通過類名就能得到。但是這種方法必須有一個明確的結構,就是那個類必須要存在。java.lang.String.class 如果這里寫錯了,程序就必然會報錯。編譯不能通過。但是有的時候的情況是,我們要給之后的可能新有的類預留出空間,這樣這么做就不行了。
第三種方法:
public static void main(String[] args) throws Exception{
Class<?> cls = Class.forName("java.lang.String");
System.out.println(cls);
這個方法的好處就是即使java.lang.String不存在,在編譯的時候也不會報錯,只有在運行的時候才會報錯。
但是我們的目的不是取得類對象,取得類對象之后,我們得到類的實例化對象的方法就不用new了,這時候就可以用Class里面的方法newInstance()。
這個方法可能會拋出兩個異常:
InstantiationException: 沒有無參構造,或者類名錯誤
IllegalAccessException:構造方法私有化