Java 反射機制 之 呼叫方法
阿新 • • 發佈:2020-12-09
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'}