/*
以下sun提供的反射机制中的类:
java.lang.Class Class c=0x1234 代表类
java.lang.reflect.Constructor Constructor c=0x4354 代表构造对象
java.lang.reflect.Field Field f=0x5354 代表属性字段
java.lang.reflect.Methord Methord m=0x653 代表方法
java.lang.reflect.Modifier Modifier m=ox34324 代表修饰符
反射机制的作用:
1.反编译 .class-->.java
2.通过反射机制访问 java 对象的属性,方法,构造方法等等
*/
/*
获取Class 类型对象的三种方式:
*/
public class ReflectionTest01 {
public static void main(String[] args) throws ClassNotFoundException{
//1.第一种方式
Class c1=Class.forName("Employee");
//c1引用指向内存地址中的堆中的对象,
//该对象代表的是 Employee.class 文件(Employee这个类)
//2.第二种方法 java中每个类型都有class属性
Class c2=Employee.class;
//3.第三种方式 java语言中任何一个java对象都有 getClass 方法,是在Object类中的方法
//返回的是 对象 运行时类
Employee e=new Employee();
Class c3=e.getClass();//c3 是运行时类(e的运行时类是 Employee)
//因为Employee 这个类在jvm中只有一个,所以c1 c2 c3 指向同一个内存地址,堆中的唯一的一个对象
System.out.println(c1==c2);//true
System.out.println(c2==c3);//true
}
}
public class ReflectionTest02 {
public static void main(String[] args) throws ClassNotFoundException {
//将 A.class加载到jvm的过程中。static 语句会执行
Class.forName("A");
//不会执行静态语句块
Class c=A.class;
}
}
class A {
static {
System.out.println("A;;;;;;");
}
}
/*
获取Class 类型的对象之后,创建该"类" 的对象
newInstance();
*/
public class ReflectionTest03 {
public static void main(String[] args) throws ClassNotFoundException{
Class c=Class.forName("Employee");
Object o=c.newInstance();//调用的是 Employee的无参数构造方法。所以要想使用反射机制,一定要有无参数构造方法。
System.out.println(o);
}
}