实体类
import java.util.List;
class Item {
private String itemId;
private String itemName;
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
@Override
public String toString() {
return "Item [itemId=" + itemId + ", itemName=" + itemName + "]";
}
}
public class User {
private String id;
private String name;
private List<Item> items;
public User() {
System.out.println("User无参 ");
}
public User(String id,String name){
System.out.println("User有参 id:"+id+",name:"+name);
this.id=id;
this.name=name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", items=" + items + "]";
}
}
第一个小例子
//2.使用Java的反射机制创建对象 Class.forName("累的完整路径")
Class<?> forName = Class.forName("com.itmayiedu.User");
//使用默认无参构造函数对象forName.newInstance(); 使用java的反射机制创建对象
User classUser = (User) forName.newInstance();
classUser.setId("22");
System.out.println(classUser);
//创建带有参的构造函数
Constructor<?> constructor = forName.getConstructor(String.class,String.class);
User classUser1 = (User) constructor.newInstance("12","abc");
System.out.println(classUser1.toString());
第二个小例子
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class FanShe1 {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException,
SecurityException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
//1.使用Java的反射机制 获取类的所有属性 方法 并且 为私有属性赋值
Class<?> forName = Class.forName("com.itmayiedu.User");
//2.获取到当前类的所有属性
Field[] declaredFields = forName.getDeclaredFields();
for (Field field : declaredFields) {
System.out.println(field.getName());
}
System.out.println("---------------------");
//3.获取当前类的说有方法
Method[] declaredMethods = forName.getDeclaredMethods();
for (Method method : declaredMethods) {
System.out.println(method.getName());
}
System.out.println("---------------------");
//4.使用Java的反射机制给私有属性赋值
Object newInstance = forName.newInstance();
Field fieldId = forName.getDeclaredField("id");
//运行反射操作私有属性
fieldId.setAccessible(true);
fieldId.set(newInstance, "20");
Field fieldName = forName.getDeclaredField("name");
fieldName.setAccessible(true);
fieldName.set(newInstance, "jjn");
User user=(User)newInstance;
System.out.println(user.toString());
}
}