java—反射之Class对象的三种获取方式,通过反射创建类的实例化对象 - Go语言中文社区

java—反射之Class对象的三种获取方式,通过反射创建类的实例化对象


(一)对反射的认识

  • 反射:对对象的反向处理,通过对象获取对象的来源信息(即可以知道这个对象是通过什么类型实例化出来的)。
  • 通过对象获取创建对象的类型信息。
  • 对类型(类)的一个抽象,就是JDK中的Class类;
    Class也是一个类,用来描述其他类的信息。

(二)Class对象的三种获取方式

Class类的对象无法实例化,其构造方法是私有的。

序号 方式
1 通过对象的getClass()方法获取Class对象。
2 通过类名.class 获取Class对象。
3 通过Class.forname(“全限定类名”)。

Class的三种实例化对象的具体使用:

package www.fanfan;

import java.util.Date;
public class TestReflect {
    public static void main(String[] args) {
        
        //1. 通过对象.getClass()方法获取Class对象
         //通过date对象获取到创建date对象的类的对象
        //Class 类下的对象
        //java.util.Date->Class 对象,描述Date这个类
        Date date = new Date();
        Class classd = date.getClass();
        System.out.println(classd);
       
       //2. 通过类名.class获取Class对象
        Class classd1 = Date.class;
        System.out.println(classd1);

        //3. 通过Class.forname(“全限定类名”)
        //类的名称:全限定名称
        //需要捕获异常
        try {
            Class classd2 = Class.forName("java.util.Date");
            System.out.println(classd2);
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }
     }
 }

在这里插入图片描述

注意:
Class创建的针对某一种类型的描述的对象 都相等。因为对于同一个类型,虽然其Class对象的获取方法可能不同,但是它们描述的信息都是一样的,因此指向同一块空间。

 System.out.println(classd == classd1);//true

(三)通过反射创建类的实例化对象

  • 通过Class对象的方法newInstance获取实例化对象(通过反射来创建对象)前提:类型中必须有默认的构造方法。
//通过Class对象创建实例化对象
        try {
            Object object = classd.newInstance();
            //向下转型,有风险,使用instanceof
            if (object instanceof Date){
                Date date1 = (Date)object;
                System.out.println(date1);
            }
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xmfjmcwf/article/details/97903303
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢