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'}
posted @ 2020-12-09 20:37  东郊  阅读(966)  评论(0编辑  收藏  举报