Class类是Java一个很重要的特性,需要深入了解,对于具体的Class的理论,不多说了,直接看代码吧。
记得在《Java核心技术》里,对Class有较深入的分析,还通过程序,打印出了一个类包括类名、父类、接口、方法、成员变量等所有的值。
非常犀利的一个类,不然怎么敢叫Class呢?
import java.lang.reflect.*;
public class ClassTest implements interfaceA
{
private int num;
public void DointerfaceA()
{
System.out.println(""+num);
}
public ClassTest()
{
this(0);
}
public ClassTest(int n)
{
num = n;
}
public static void main(String[] args) throws Exception
{
//类正常的构造方式
ClassTest a = new ClassTest(1);
a.DointerfaceA();
//Class方式构造,这种方式只能使用默认构造函数,因此需要有没有参数的默认构造函数的支持
ClassTest b = (ClassTest)Class.forName("ClassTest").newInstance();
b.DointerfaceA();
//使用Class构造器的方式创建实例
Constructor con = Class.forName("ClassTest").getConstructor();
ClassTest c = (ClassTest)con.newInstance();
c.DointerfaceA();
con = Class.forName("ClassTest").getConstructor(int.class);//注意这个参数"int.class"是内部类型的使用方式!!!
ClassTest d = (ClassTest)con.newInstance(2);
d.DointerfaceA();
//取得类名和父类名
Class class1 = a.getClass();
System.out.println(class1.getName());
System.out.println(class1.getSuperclass().getName());
if(class1==ClassTest.class)
{
System.out.println("Equals");
}else{
System.out.println("Not equals");
}
//取得类的接口
Class[] inf = class1.getInterfaces();
for(Class x:inf)
{
System.out.println(x.getName());
}
//取得类的成员变量,??好像有问题的样子
Field[] field = class1.getFields();
for(Field f:field)
{
System.out.println(f.getName());
}
//取得类的方法名
Method[] method= class1.getMethods();
for(Method m:method)
{
System.out.println(m.getName());
}
System.out.println("Hello World!");
}
}