反射实例化对象 | 带你学《Java语言高级特性》之八十二

简介: 通过实际开发中的案例进行程序的说明,来进一步理解反射的核心意义。

上一篇:Class类对象的三种实例化模式 | 带你学《Java语言高级特性》之八十一
【本节目标】
通过实际开发中的案例进行程序的说明,来进一步理解反射的核心意义。

经过一系列分析之后可以发现虽然获得了Class类的实例化对象,但是依然觉得这个对象获取的意义不是很大,所以为了进一步理解反射的核心意义,下面将通过几个案例进行程序的说明(都是实际开发中一定会使用到的)。

反射实例化对象

获取Class对象后最大意义实际上并不是在于只是一个对象的实例化操作形式,更重要的是Class类中提供了一个对象的反射实例化方法(代替了关键字new):

在JDK1.9以前的实例化:

@Deprecated(since="9")
public T newInstance() throws InstantiationException, IllegalAccessException

在JDK1.9之后的实例化:

clazz.getDeclaredConstructor().newInstance()

范例:通过newInstance()方法实例化Person类对象

package cn.mldn.vo;
public class Person {
    //任何情况下如果要实例化类对象,一定要调用类中的构造方法
    public Person(){     //无参构造方法
        System.out.println("*********** Person类构造方法 ************");
    }
    @Override
    public String toString() {
        return "我是一个人,一个脱离了低级趣味的好人!";
    }
}
package cn.mldn.demo;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        Class<?> cls=Class.forName("cn.mldn.vo.Person");
        Object obj= cls.newInstance();  //实例化对象,JDK1.9后被废除了
        System.out.println(obj);  //输出对象调用toString()方法
        /**
         * *********** Person类构造方法 ************
         * 我是一个人,一个脱离了低级趣味的好人!
         */
    }
}

现在通过反射实现的对象实例化处理,依然要调用类中的无参构造方法,其本质等价于“类 对象 = new 类()”,相当于隐含了关键字new,而直接使用字符串进行了替代。

范例:使用getDeclaredConstructor().newInstance()进行对象实例化

package cn.mldn.demo;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        Class<?> cls=Class.forName("cn.mldn.vo.Person");
        Object obj= cls.getDeclaredConstructor().newInstance();  //实例化对象,JDK1.9废除了
        System.out.println(obj);
        /**
         * *********** Person类构造方法 ************
         * 我是一个人,一个脱离了低级趣味的好人!
         */
    }
}

从JDK1.9后,newInstance()被替代了,因为默认的Class类中的newInstance()方法只能调用无参构造,所以很多开发者会认为其描述的不准确,于是将其变换了形式(构造方法会讲解)。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:反射与工厂设计模式 | 带你学《Java语言高级特性》之八十三
更多Java面向对象编程文章查看此处

相关文章
|
6月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
821 157
|
8月前
|
JSON Java API
【干货满满】分享京东API接口到手价,用Java语言实现
本示例使用 Java 调用京东开放平台商品价格及优惠信息 API,通过商品详情和促销接口获取到手价(含优惠券、满减等),包含签名生成、HTTP 请求及响应解析逻辑,适用于比价工具、电商系统集成等场景。
|
6月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
416 18
|
6月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
246 4
|
7月前
|
存储 Java Apache
Java语言操作INI配置文件策略
以上步骤展示了基本策略,在实际项目中可能需要根据具体需求进行调整优化。例如,在多线程环境中操作同一份配置时需要考虑线程安全问题;大型项目可能还需考虑性能问题等等。
293 15
|
8月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
9月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
404 14
|
8月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
606 0
|
8月前
|
JSON Java API
【干货满满】分享拼多多API接口到手价,用Java语言实现
本方案基于 Java 实现调用拼多多开放平台商品详情 API,通过联盟接口获取商品到手价(含拼团折扣与优惠券),包含签名生成、HTTP 请求及响应解析逻辑,适用于电商比价、导购系统集成。
|
8月前
|
JSON Java API
【干货满满】分享淘宝API接口到手价,用Java语言实现
本文介绍了如何使用 Java 调用淘宝开放平台 API 获取商品到手价,涵盖依赖配置、签名生成、HTTP 请求与响应解析等核心实现步骤。