java反射操作類方法與屬性
阿新 • • 發佈:2018-11-19
package com.fanshe.test; public class User { private int age; private String email; private String username; public User() { } public User(int age, String email, String username) { this.age = age; this.email = email; this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } package com.fanshe.test; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class TsetF { public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { Class<User> clazz = (Class<User>) Class.forName("com.fanshe.test.User"); Field username = clazz.getDeclaredField("username"); System.out.println(username.getName()); /** * 無參構造方法宣告一個例項 */ User user = clazz.newInstance(); Method method = clazz.getDeclaredMethod("setUsername", String.class); method.invoke(user, "alex"); System.out.println(user.getUsername()); /** * 有參構造方法宣告例項 * 第一步:找到構造方法,第二個利用構造方法來例項物件 */ Constructor<User> constructor = clazz.getDeclaredConstructor(int.class,String.class,String.class); User u2 = constructor.newInstance(10,"[email protected]","MarCus"); System.out.println(u2.getUsername()); // 宣告第三個例項 User u3 = clazz.newInstance(); Field field = clazz.getDeclaredField("age"); field.setAccessible(true); field.set(u3,100); //資料型別要保持一致 System.out.println(u3.getAge()); } }