java 的反射机制
相关系列
前言
动态语言
在程序运行时,可以改变程序的结构或变量的类型。
典型的动态语言”Python、ruby、JavaScrip;
C,C++,Java 不是动态语言,但具有一定的动态性,可以称为”准动态语言”,具备类似动态语言的特性。
一、反射机制
程序在运行的过程中加载一些“只知道相关名字”的类,以下代码,在程序运行时加载 User 类。Class c=Class.forName(“com.bjsxt.reflect.User”);
Class.forName()可以让我们在运行时再决定加载什么样的类,字符串传入什么类,我就加载什么类,完全和源代码无关,这就是“动态性”。
二、反射机制的常见操作
- 动态加载类、动态获取类的信息(属性、方法、构造器)
- 动态构造对象
- 动态调用类和对象的任意方法
- 动态调用和处理属性
- 获取泛型信息
- 处理注解
java.lang.Class 类
java.lang.Class 类是反射(Reflection)的根源。
Class 类的对象如何获取?
- 运用 getClass()
- 运用.class 语法
- 运用 Class.forName()(最常被使用)
代码如下(Class对象获取):
创建实体类
public class User {
private int userid;
private String userName;
private String password;
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(int userid, String userName, String password) {
super();
this.userid = userid;
this.userName = userName;
this.password = password;
}
public User() {
super();
}
}
测试类
import com.bjsxt.pojo.User;
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
System.out.println(int.class);
System.out.println(void.class);
int[] arrA = new int[10];
int[] arrB = new int[30];
// 维数相同类型相同的数组共享同一个Class对象
System.out.println(arrA.getClass()==arrB.getClass());
/*同一个类N多个对象,共享同一个Class对象*/
User user = new User();
User user2 = new User();
System.out.println(user.getClass()==user2.getClass());
/** 获取Class对象的三种方式*/
// 通过对象的getClass()方法获取;
Class class1 = user.getClass();
// 通过字节码文件获得
Class class2 = User.class;
// 通过Class类的静态方法获取(最常用的方法)
Class class3 = Class.forName("com.bjsxt.pojo.User");
System.out.println((class1==class2)+"\t"+(class2==class3));
}
}
输出结果
つづく
接下来会不断更新关于反射的小内容,最后将会以一个小项目多为结尾敬请期待;
感觉收看,如果帮到您,点个赞,关个注,评个论呗,葵花在这里感激不尽!!!