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

本文深入介绍了Java反射机制的基础概念及应用。重点讲述了如何利用Class类获取类信息,并通过三种方式实例化Class对象,同时演示了如何通过Class实例创建类的实例。
以前一直知道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");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值