在Java的世界当中,几乎所有的东西多可以看做为一个对象。(除静态变量,静态变量一般是属于类的和普通的数据类型,普通的数据类型也可以被包装为一个类)。
所以在Java当中api所提供的类或者是用户自己编写的类都可以看做是一个实例化的对象,即所有的类都是java.lang.Class类的实例化对象。换另一种说法:有一个类其名字叫做class该类的实例化对象是所有实例化对象所属的类。
class类是类类型(class类的实例化对象),即class类是任何类的类型或任何类的类型都是class类型.类是对象该对象是class的对象.
package 反射机制;
public class Test {
public void pritnt()
{
System.out.println("我是test类当中的方法");
}
}
package 反射机制;
import java.lang.reflect.*;
import 反射机制.Test;
public class ClassDemo01 {
public static void main(String[] args) throws Exception{
//一般情况下建立Foo类的方法
Test t=new Test();//创建一个实例化对象类
//class类的实例化对象只能由虚拟机来进行创建用户无法实例化一个class对象
//建立class类实例化对象的方法
Class c1=Test.class;//任何一个类当中都有一个隐含的静态成员变量class,通过.class来建立Class类的实例化对象
//以知该类的实例化对象时来的到该实例化对象的类,将其作为Class类的实例化对象
Class c2=t.getClass();//通过调用getClass方法来得到实例化对象t所在的类,并将其所的到的类作为Class类的实例化对象
//此处所创建的c1,c2实例化对象都是指Test类,一个类只可能是Class类的一个实例化对象
System.out.println("class类的c1实例化对象是否等于class类的c2实例化对象?");
System.out.println(c1==c2);
Class c3=null;
//第三种建立class类实例化对象的方法
try
{
c3=Class.forName("反射机制.Test");
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
System.out.println("class类的c2实例化对象是否等于class类的c3实例化对象?");
System.out.println(c2==c3);
//从以上结果可以得知通过三种不同的方式来的到的class类的实例化对象是相同的,都为实例化对象Test类,说明了一个类智能有一个实例化的class对象
//通过class类的实例化对象(类类型)来创建相应的类当中的实例化对象
try
{
Test test=(Test)c1.newInstance();//通过类类型来创建一个类的实例化对象
test.pritnt();
}
catch(InstantiationException e)
{//instantiation(实例化)
e.printStackTrace();
}
}
}
程序运行结果: