反射机制获取类有三种方法
1.Class<?> Classc = Class.forName("com.dt.reflect.User");
2.Class<?> Classc = User.class;
3. User Classc= new User();
User user =(User) Classc.newInstance(); //创建对象
user.setId(1);
user.setName("张三");
user.setAge(28);
System.out.println(user);
但是如果如果User 类有参构造函数的话就会报错
Exception in thread "main" java.lang.InstantiationException: com.dt.reflect.User
at java.lang.Class.newInstance(Class.java:427)
at com.dt.reflect.Test.main(Test.java:10)
Caused by: java.lang.NoSuchMethodException: com.dt.reflect.User.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
... 1 more
处理办法:import java.lang.reflect.Constructor ; // 导入反射机制包
Class<?> tt = null;
tt= Class.forName("com.dt.reflect.User");
Constructor<?> cons[] = null ;
cons = tt.getConstructors() ;
// User user = tt.newInstance(); 没有构造参数的实例化
User user =(User)cons[0].newInstance(1,"张三",30); //有构造函数参数的实例化
user.setId(1);
user.setName("张三");
user.setAge(28);
System.out.println(user);