反射是框架的灵魂
1. 反射:将java类的各种成分映射成一个个的java对象
获取内存对象,某一个new出来的引用class对象应该有一个类来描述这些类
新生代,老年代,永久代。
2.创建Test类
public class Test { public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { /* * 了解反射 */ //三种方式可以获取class对象 //1、通过class类的静态方法 :forName(推荐使用) Class clazz = Class.forName("com.cdu.dj.entity.User"); //2、创建对象,然后获取class对象 //User user = new User(); //Class clazz1 = user.getClass(); //3、通过名.class获取class对象 Class clazz2 = User.class; //4、通过clazz.getName()可以获取包名 System.out.println(clazz.getPackage()); //5、通过clazz.getSimpleName()获取到类名(不含包名) System.out.println(clazz.getSimpleName()); //6、获取父类的包名 Class superclass = clazz.getSuperclass(); System.out.println(clazz.getName());//获取class User对象 System.out.println(superclass.getName());//获取class User父类对象 /* * 使用反射 */ System.out.println("-----"); //1. 获取某个类的全部方法 User user = new User(1,"罗纳尔多","11234","男"); Method [] methods = clazz.getDeclaredMethods(); for (int i = 0; i < methods.length; i++) { //使用setAccessible()方法取消java权限控制检查 methods[i].setAccessible(true); //获取方法的返回值类型 Class returnType = methods[i].getReturnType(); //获取方法的参数列表 Class [] para = methods[i].getParameterTypes(); System.out.print(methods[i].getName()+"方法,"); System.out.println("返回值类型 :"+returnType.getName()); for (int j = 0; j < para.length; j++) { System.out.println("参数为 :"+para[j]); } if("setName".equals(methods[i].getName())){ System.out.println("-----"); methods[i].invoke(user, "迷你罗"); //如果方法是静态方法,那么user位置写成null //静态方法不依赖任何对象 //使用下面的静态方法时将判断setName改变getName //Object object = methods[i].invoke(user,null); } } System.out.println(user); } }
2.User类
public class User extends Human{ private int id; private String name; private String password; private String sex; public int getId() { return id; } public void setId(int id) { this.id = id; } 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 String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public User(int id, String name, String password, String sex) { super(); this.id = id; this.name = name; this.password = password; this.sex = sex; } public User( String name, String password, String sex,int id) { super(); this.id = id; this.name = name; this.password = password; this.sex = sex; } public User(int id, String name) { super(); this.id = id; this.name = name; } public User() { } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", password=" + password + ", sex=" + sex + "]"; } }
3.创建Human类
public class Human { }