您的位置:首页 > 编程语言 > Java开发

Java反射机制总结学习--Class类

2017-03-06 11:07 363 查看
以前一直知道Java反射机制,也会用,但是并没有很好地去总结梳理。所以在这里记录一下,更熟悉一下。


万物皆对象

class A{
void print(){
System.out.println("A");
}
}

public class ClassDemo1 {
public static void main(String[] args) {
//A的实例对象
A a1 = new A();
}


上面 ,我们知道a1是A类的对象,那么,A类本身是不是对象呢,当然也是对象,因为万物皆对象。那它是哪个类的对象呢?答案是Java.lang.Class类的对象。有一个class是Class类。

既然A类本身也是也是对象,那么它怎么实例对象怎么表示呢?有以下三种:

//第一种,任何一个类都有一个隐含的静态成员变量
Class c1 = A.class;
//第二种 ,已经知道该类的对象,通过getClass方法获取
Class c2 = a1.getClass();
//c1,c2表示了A类的类 类型  class type;
//c1 c2都代表了A类的类类型,
System.out.println(c1 == c2);//true
//第三种
Class c3 = null;
try {
c3 = Class.forName("com.wj.demo.A");
System.out.println(c1 == c3);//true
} catch (ClassNotFoundException e) {
e.printStackTrace();
}


上面的c1,c2,c3都是A类的类类型,我们可以通过类的类类型创建该类的实例:

//可以通过类的类类型创建该类的实例
try {
A a = (A) c1.newInstance();//需要有无参数的构造方法
a.print();//可以正常调用
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}


而且,需要注意的是Class类的构造方法如下:

/*
* Constructor. Only the Java Virtual Mach
ac1f
ine creates Class
* objects.
*/
private Class() {}


所以,我们不可能调用Class的构造方法。

以上就是关于Class类的基本介绍与使用。所有代码:

public class ClassDemo1 {

public static void main(String[] args) {
//A的实例对象
A a1 = new A();
//A也是实例对象,是Class类的实例对象
//任何一个类都是Class类的实例对象,都可以有三种表示方式
//第一种,任何一个类都有一个隐含的静态成员变量
Class c1 = A.class;
//第二种 ,已经知道该类的对象,通过getClass方法获取
Class c2 = a1.getClass();

//c1,c2表示了A类的类 类型  class type;

//c1 c2都代表了A类的类类型,
System.out.println(c1 == c2);

//第三种
Class c3 = null;
try {
c3 = Class.forName("com.wj.demo.A");
System.out.println(c1 == c3);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

//可以通过类的类类型创建该类的实例
try {
A a = (A) c1.newInstance();//需要有无参数的构造方法
a.print();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}

Class b1 = B.class;
System.out.println(c1 == b1);

}

/**
* 1、类是对象,是java.lang.Class类的实例对象,Class也是一个class
*
*/
}
class A{

void print(){
System.out.println("A");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: