1. 反射机制介绍
1.1 反射机制是 Java 的动态性之一
动态语言:在程序运行时,可以改变程序的结构或变量的 类型。
典型的动态语言有:Python、ruby、JavaScrip
C,C++,Java 不是动态语言,但具有一定的动态性,可以 称为”准动态语言”,具备类似动态语言的特性。
传一块代码来动态的执行,动态的处理,Java 也能做,可 以利用反射来实现类似的功能。
Java的动态性让编程变得更加的灵活,功能就更加的强大。
1.2 反射机制
程序在运行的过程中加载一些“只知道相关名字”的类, 以下代码,在程序运行时加载 User 类。
Class c=Class.forName("com.bjsxt.reflect.User");
一个类被加载后,JVM 会创建一个对应类的 Class 对象, 类的整个结构信息会被放到 Class 对象中。
这个 Class 对象就像镜子一样,通过这面镜子,可以得到对应的类的全部信息。
1.3 反射机制的常见作用
1) 动态的加载类、动态的获取类的信息(属性,方法,构造 器)
2) 动态构造对象
3) 动态调用类和对象的任意方法、构造器
4) 动态调用和处理属性
5) 获取泛型信息
6) 处理注解
1.4 获取 Class 对象的方式
1) 通过字节码文件
2) 对象的 getClass()方法
3) Class 类的静态方法 forName("全限定类名")
注意:
1. 原始JAVA类型(8种数据类型)和关键字void表示为类对象
2. 维数相同和类型相同的数组共享一个Class对象
----------------------------------- --------------------------------
实体类:
package com.sxt.entity;
public class User {
private String userName;
private int userId;
private int passWord;
protected char userSex;
int userAge;
public User(String userName, int userId, int passWord, char userSex, int userAge) {
this.userName = userName;
this.userId = userId;
this.passWord = passWord;
this.userSex = userSex;
this.userAge = userAge;
}
public User() {
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getPassWord() {
return passWord;
}
public void setPassWord(int passWord) {
this.passWord = passWord;
}
public char getUserSex() {
return userSex;
}
public void setUserSex(char userSex) {
this.userSex = userSex;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
}
----------------------------------- --------------------------------
package com.sxt.reflect;
import com.sxt.entity.User;
public class TestReflect {
public static void main(String[] args) throws ClassNotFoundException {
System.out.println(int.class);
System.out.println(void.class);
System.out.println(String.class);
//维数相同和类型相同的数组共享一个Class对象
int [] arrA = new int[10];
int [] arrB = new int[30];
System.out.println(arrA.getClass()==arrB.getClass());
User u1 = new User();
User u2 = new Use