裏面就是通過這個類的默認構造函數構建了一個對象,如果沒有默認構造函數就拋出InstantiationException, 如果沒有訪問默認構造函數的權限就拋出IllegalAccessException
public interface duang {
public String getClazzName();
}
public class classA implements duang{
@Override
public String getClazzName() {
return "A類"+this.getClass().getName();
}
}
public class classD {
public static void main(String[] args)
{
// System.out.println(classA.getClazzName());
try {
Class clazz = Class.forName("classA");
duang duang = (duang) clazz.newInstance();
System.out.println(duang.getClazzName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
//通過反射獲取該類的實例化對象,並由接口來調用該類的方法
這樣實現的好處就是如果也有一個classB類實現了這個接口的方法。
public class classB implements duang{
@Override
public String getClazzName() {
return "B類"+this.getClass().getName();
}
}
直接把
Class clazz = Class.forName("classA");
換成Class clazz = Class.forName("classB");
反射的各種應用:參考這個鏈接