利用反射来 实例化对象,调用功能方法,设置属性
package cn.usts.edu.setClassMethod06;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class SetClass {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
Class<?> c1 = Class.forName("cn.usts.edu.setClassMethod06.User");
User user = (User) c1.newInstance();
System.out.println(user);
Constructor<?> declaredConstructor = c1.getDeclaredConstructor(int.class,String.class);
User user1 = (User) declaredConstructor.newInstance(15, "小明");
System.out.println("反射构造器构造"+user1);
Method method03 = c1.getDeclaredMethod("method03", String.class);
method03.setAccessible(true);
method03.invoke(user1,"利用反射调用方法");
Field name = c1.getDeclaredField("name");
Field age = c1.getDeclaredField("age");
age.setAccessible(true);
name.setAccessible(true);
name.set(user1,"反射直接修改属性的值");
age.set(user1,18);
System.out.println(user1.getAge());
System.out.println(user1.getName());
}
}
class User {
public int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User() {
}
public User(int age, String name) {
this.age = age;
this.name = name;
}
public void method01(){
System.out.println("method01");
}
public void method01(int age){
System.out.println("method02"+this.age+age);
}
private void method03(String name){
System.out.println(name+"method03"+this.name);
}
@Override
public String toString() {
return "User{" +
"age=" + age +
", name=" + name +
'}';
}
}