User.java测试类代码:
package com.test;
public class User {
private int id;//id号
private String name; //用户名
private String password;//密码
private User user;
public User() {
super();
}
public User(int id, String name, String password) {
super();
this.id = id;
this.name = name;
this.password = password;
}
//构造器和相应的set,get方法
public boolean checkName(String name){
return false;
}
public User getName(String name){
user=new User(1,name,"123");
return user;
}
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + ", user=" + user + "]";
}
}
UserTest.java反射测试实例代码:
package com.exercise.corejava.e12;
//反射
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class UserTest {
public static void main(String[] args){
try {
/*
反射三种方法:
1.类名.class
Class<User> c1=User.class;
2.对象.getClass()
User ls=new User();
Class<? extends User> c2=ls.getClass();
*/
//3.Class.forName("全限定名");
Class<?> c11 = Class.forName("com.test.User");
//调用无参构造器
Object ins=c11.newInstance();
System.out.println("--------------获取属性------------------------");
//获取某个私有属性,
Field field = c11.getDeclaredField("name");
//设置私有属性可见性
field.setAccessible(true);
field.set(ins, "zhangsan");
System.out.println(field);
//获取所有的属性
Field[] fields = c11.getDeclaredFields();
for(Field f:fields){
//获取修饰符
int modifiers = f.getModifiers();
//属性类型
Class<?> type = f.getType();
//属性名
String name = f.getName();
System.out.println("修饰符:"+modifiers+"; 属性类型: "+type+"; 属性名:"+name);
}
System.out.println("----------------获取方法----------------------");
//获取所有方法
Method[] methods = c11.getDeclaredMethods();
for (Method m : methods) {
//获取修饰符
int modifiers = m.getModifiers();
//返回值类型
Class<?> returnType = m.getReturnType();
//方法名
String name = m.getName();
//参数类型
Class<?>[] parameterTypes = m.getParameterTypes();
System.out.println("修饰符:"+modifiers+"; 返回值类型:"+returnType+"; 方法名:"+name+"(参数:"+parameterTypes+");参数个数:"+parameterTypes.length);
}
Method getname = c11.getDeclaredMethod("getName",String.class);
Object invoke = getname.invoke(ins, "Lucy");
System.out.println(invoke);
System.out.println("-----------------获取构造器---------------------");
//获取构造器
Constructor<?>[] constructors = c11.getConstructors();
for (Constructor<?> c : constructors) {
//获取修饰符
int modifiers = c.getModifiers();
//构造器名
String name = c.getName();
//参数列表
Class<?>[] parameterTypes = c.getParameterTypes();
System.out.println("修饰符:"+modifiers+"; 构造器名:"+name+"(参数:"+parameterTypes+");参数个数:"+parameterTypes.length);
}
Constructor<?> constructor = c11.getDeclaredConstructor(int.class,String.class,String.class);
Object newuser = constructor.newInstance(3,"wangwu","123465");
System.out.println(newuser);
} catch (Exception e) {
e.printStackTrace();
}
}
}