首页 > 编程 > Java > 正文

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

2019-11-06 06:50:44
字体:
来源:转载
供稿:网友
以前一直知道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 Machine 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"); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表