java反射机制
1、实体类
package com.xsl.entity;
public class UserEntity {
public String name;
protected String address;
String tel;
private String password;
public UserEntity() {
}
@Override
public String toString() {
return "UserEntity{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", tel='" + tel + '\'' +
", password='" + password + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public UserEntity(String name, String address, String tel, String password) {
this.name = name;
this.address = address;
this.tel = tel;
this.password = password;
}
public void printf(){
System.out.println(name+address);
}
private void printf1(){
System.out.println(name+address);
}
private UserEntity(String name){
this.name = name;
}
}
2、获取Class对象的方式
@Test
public void testReflect1() throws Exception {
Class aClass = Class.forName("com.xsl.entity.UserEntity");
UserEntity userEntity = new UserEntity();
Class aClass1 = userEntity.getClass();
Class aClass2 = new UserEntity().getClass();
}
3、获取所有public修饰的字段、构造器、方法
@Test
public void testReflect2() throws Exception {
Class aClass = Class.forName("com.xsl.entity.UserEntity");
System.out.println("================字段==================");
Field[] fields = aClass.getFields();
for (Field field: fields) {
System.out.println("getFields遍历"+field);
}
System.out.println("===================构造器===============");
Constructor[] constructors = aClass.getConstructors();
for (Constructor c : constructors) {
System.out.println(c);
}
System.out.println("==================方法================");
Method[] methods = aClass.getMethods();
for (Method method :methods) {
System.out.println(method);
}
}
4、指定public修饰的字段、构造器、方法的获取与使用
@Test
public void testReflect3() throws Exception {
UserEntity userEntity = new UserEntity();
userEntity.setName("肖生亮");
Class aClass = Class.forName("com.xsl.entity.UserEntity");
System.out.println("================字段==================");
Field name = aClass.getField("name");
Object o = name.get(userEntity);
System.out.println(o);
name.set(userEntity,"肖生亮1");
System.out.println(name.get(userEntity));
System.out.println("=================构造器=================");
Constructor<UserEntity> constructor = aClass.getConstructor();
UserEntity userEntity1 = constructor.newInstance();
System.out.println(userEntity1);
Constructor<UserEntity> constructor1 = aClass.getConstructor(String.class, String.class, String.class, String.class);
UserEntity userEntity2 = constructor1.newInstance("张海", "东软慧聚", "1231241", "zh123");
System.out.println(userEntity2);
System.out.println("=================方法=================");
Method printf = aClass.getMethod("printf");
printf.invoke(userEntity2);
}
5、获取所有的字段、构造器、方法
@Test
public void testReflect4() throws Exception {
Class aClass = Class.forName("com.xsl.entity.UserEntity");
System.out.println("================字段==================");
Field[] fields = aClass.getDeclaredFields();
for (Field field: fields) {
System.out.println("getFields遍历"+field);
}
System.out.println("===================构造器===============");
Constructor[] constructors = aClass.getDeclaredConstructors();
for (Constructor c : constructors) {
System.out.println(c);
}
System.out.println("==================方法================");
Method[] methods = aClass.getDeclaredMethods();
for (Method method :methods) {
System.out.println(method);
}
}
6、指定所有的字段、构造器、方法的获取与使用
@Test
public void testReflect5() throws Exception {
Class aClass = Class.forName("com.xsl.entity.UserEntity");
Constructor<UserEntity> constructor = aClass.getConstructor();
UserEntity userEntity = constructor.newInstance();
System.out.println("================字段==================");
Field password = aClass.getDeclaredField("password");
password.setAccessible(true);
password.set(userEntity,"zh123");
System.out.println(userEntity);
Object o = password.get(userEntity);
System.out.println(o);
System.out.println("================构造器==================");
Constructor<UserEntity> declaredConstructor = aClass.getDeclaredConstructor(String.class);
declaredConstructor.setAccessible(true);
UserEntity userEntity1 = declaredConstructor.newInstance("xsl");
System.out.println(userEntity1);
System.out.println("================方法==================");
Method printf1 = aClass.getDeclaredMethod("printf1");
printf1.setAccessible(true);
printf1.invoke(new UserEntity("xsl","东软慧聚","123456","xsl123"));
}