/*
以下是sun提供的反射机制中的类
java.lang.Class;
java.lang.reflect.Constructor;
java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;
反射机制的作用:
1.反编译:.class-->.java
2.通过反射机制访问java对象的属性,方法,构造方法等。
*/
/*
获取Class类型对象的三种方式
*/
public class fuck1{
public static void main(String[] args){
//第一种方式
Class c1=Class.forName("employee");//c1引用保存内存地址指向堆中的对象,这个对象代表的是employee整个类
//第二种方式
//java每个类中都有class属性
Class c2=employee.class;
//第三种方式
//java语言中任何一个java对象都有getClass方法
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
//c4,c5,c6都代表Date这个类
Class c4=Date.class;//c4代表Date这个类
Class c5=Class.forName("java.util.Date");//必须写类全名
Date d=new Date();
Class c5=d.getClass();
}
}
class employee{
//Field
private String name;
//constructor
public employee(){}
public employee(String name){
this.name=name;
}
//方法
public void work(){
System.out.println(name+"在工作");
}
以下是sun提供的反射机制中的类
java.lang.Class;
java.lang.reflect.Constructor;
java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;
反射机制的作用:
1.反编译:.class-->.java
2.通过反射机制访问java对象的属性,方法,构造方法等。
*/
/*
获取Class类型对象的三种方式
*/
public class fuck1{
public static void main(String[] args){
//第一种方式
Class c1=Class.forName("employee");//c1引用保存内存地址指向堆中的对象,这个对象代表的是employee整个类
//第二种方式
//java每个类中都有class属性
Class c2=employee.class;
//第三种方式
//java语言中任何一个java对象都有getClass方法
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
//c4,c5,c6都代表Date这个类
Class c4=Date.class;//c4代表Date这个类
Class c5=Class.forName("java.util.Date");//必须写类全名
Date d=new Date();
Class c5=d.getClass();
}
}
class employee{
//Field
private String name;
//constructor
public employee(){}
public employee(String name){
this.name=name;
}
//方法
public void work(){
System.out.println(name+"在工作");
}
}
/*
获取Class类型的对象之后,可以创建该类的对象
*/
import java.util.*;
import java.text.*;
public class fuck2{
public static void main(String[] args)throws Exception{
//将A.class文件装载到JVM中的过程
Class.forName("A");
//不会执行静态语句块
//Class c=A.class
Class c=Class.forName("A");
//创建此Class对象所表示的类的一个新实例
Object o=c.newInstance();//调用了employ的无参数构造方法来创建对象
System.out.println(o);
Class c1=Class.forName("java.util.Date");
Object o1=c1.newInstance();
if(o1 instanceof Date){
Date t=(Date) o1;
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(t));
}
}
}
class A{
//静态语句块,在类加载时执行,并且只执行一次
static{
System.out.println("A...");
}
}