1、反射机制有什么用?
通过java语言中的反射机制可以操作字节码文件。程序更灵活
优点类似于黑客。(可以读和修改字节码文件。)
通过反射机制可以操作代码片段(class文件)
2、反射机制的相关类在哪个包下?
java.lang.reflect.*;
3、反射机制相关的重要的类有哪些?
java.lang.Class:代表整个字节码,代表一个类型,代表整个类。
java.lang.reflect.Method:代表字节码中的方法字节码。代表类中的方法。
java.lang.reflect.Constructor:代表字节码中的构造方法字节码。代表类中的构造方法
java.lang.reflect.Field:代表字节码中的属性字节码。代表类中的成员变量(静态变量+成员变量)
java.lang.Class:
public class User{
// Field
int no;
// Constructor
public User() {
public User (int no) {
this.no = no;
}
// Method
public void setNo(int no) {
this.no = no;
获取字节码的三种方式
import java.util.Date;
/*
操作一个类的字节码,首先要获取到这个类的字节码,怎么获取java.lang.Class实例?
三种方式
1、Class c = Class.forname("完整类名带包名");
2、Class c = 对象.getClass();
*/
public class ReflectTest01 {
public static void main(String[] args) {
/*
Class. forName()
1、静态方法
2、方法的参数是一个字符串。
3、字符串需要的是一个完整类名。
4、完整类名必须带有包名。java. lang包也不能省略。
*/
Class c1 = null;
Class c2 = null;
try {
c1 = Class.forName("java.lang.String");
c2 = Class.forName("java.util.Date");
Class c3 = Class.forName("java.lang.Integer");
Class c4 = Class.forName("java.lang.System");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//Java中任何一个对象都有一个方法:getClass()
String s = "abc";
Class x =s.getClass();// x代表String.class字节码文件, x代表String类型。
System.out.println(c1 == x);// true (==判断的是对象的内存地址。)
Date time = new Date();
Class y = time.getClass();//指向方法区中的同一个字节码文件
System.out.println(c2 == y);//true
// 第三种方式:Java语言任何一种类型,包括基本数据类型都有.class属性
Class z = String.class; // z代表String类型
Class k = Date.class; // k代表Date类型
Class f = int.class; // f代表int类型
Class e = double.class; // e代表double类型
System. out.println(x == z); // true
}
}