Class类

/*
以下是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...");


}


猜你喜欢

转载自blog.csdn.net/rolic_/article/details/80757173
今日推荐