- 错误示例
public class Demo03 {
public static void main(String[] args) {
/*
反射方式1: newInstance() 调用构造函数
1.动态性 :类名和方法名可以用字符串表示,可以修改
*/
// Class.forName : 加载A.Class文件--实际上调用了A.class中的构造函数
// newInstance() : 创建一个对象
// getMethod() : 参数(hello方法),获取hello方法的句柄
A_Class objA = new A_Class();
try{
Object obj = Class.forName("A_Class").newInstance();// 动态性
Method meth = Class.forName("A_Class").getMethod("hello");
meth.invoke(obj);// invoke:调用:[ɪnˈvəʊk]
A_Class objNew = (A_Class) Class.forName("A_Class").newInstance();
objNew.hello();
}catch(Exception e){
System.out.println(e);
}
}
}
java.lang.ClassNotFoundException: A_Class
解析:找不到 A_Class这个类异常
这个错误的原因:
这个方法需要这个类的完全限定名 而不是类名
- 正确示例
public class Demo03 {
public static void main(String[] args) {
try{
Object obj = Class.forName("com.etime0314.A_Class").newInstance();// 动态性
Method meth = Class.forName("com.etime0314.A_Class").getMethod("hello");
meth.invoke(obj);// invoke:调用:[ɪnˈvəʊk]
A_Class objNew = (A_Class) Class.forName("com.etime0314.A_Class").newInstance();
objNew.hello();
}catch(Exception e){
System.out.println(e);
}
}
}