Java 反射机制 之 调用方法
Java 反射机制 之 调用方法
一、newInstance()
注意:newInstance() 底层调用的事该类的无参构造方法,所以没有无参构造方法就会出现实例化异常!
public static void main(String[] args) throws Exception {
// 一般方法
UserService userService = new UserService();
System.out.println("直接创建对象: "+userService.login("root", "123456"));// true
// 通过反射机制调用方法 四步骤
// 1、获取类
Class<?> aClass = Class.forName("com.hjx.反射.反射调用方法.UserService");
// 2、通过调用无参构造方法 创建对象
// newInstance()只能调用无参,不然会报实例化异常 InstantiationException
Object o = aClass.newInstance();
// 3、获取方法 因为方法有可能重载,所以要指定参数类型和个数,位置
Method method = aClass.getDeclaredMethod("login",String.class,String.class);
// 如果获取的方法是私有,则需要取消检查。不然会报非法访问异常 IllegalAccessException
// method.setAccessible(true);
// 4、调用方法
Object o1 = method.invoke(o, "root", "123456");
System.out.println("通过反射机制调用方法: " +o1);// true
}
二、Constructor
获取指定的
Constructor
对象,再用Constructor
对象调用newInstance()
实例化。
这个方法可以指定构造方法,即可用有参构造来实例化
代码参考:
public static void main(String[] args) throws Exception {
// 有参构造创建对象
// 1、获取类
Class<?> aClass = Class.forName("com.hjx.反射.Person");
// 2、获取指定有参的构造方法
Constructor<?> constructor = aClass.getDeclaredConstructor(
String.class, int.class, String.class, String.class);
// 3、通过上面 构造方法 创建对象
Object o = constructor.newInstance("张胜男", 18, "bejign", "wu");
System.out.println(o);
// 无参构造创建对象
Object o1 = aClass.newInstance();
System.out.println(o1);
}
输出结果:
Person{name='张胜男', age=18, address='bejign', remark='wu'}
Person{name='null', age=0, address='null', remark='null'}