Java反射机制——通过反射机制实例化对象(详解)

Java 反射实例化对象的方法 在 Java 中,反射是一种强大的机制,它允许我们在运行时检查类、方法、字段等,并且可以在运行时动态创建对象。反射提供了一组 API,可以通过类的名称、方法名、字段名等来获取类的信息并操作它们。需要注意的是,反射虽然强大,但是它的使用也需要谨慎。因此,在能够使用其他方式解决问题的情况下,最好避免使用反射。方法返回的构造函数可能是私有的,因此我们需要使用。或者直接使用类名获取到我们要实例化的类的。要实例化一个对象,可以使用反射机制中的。方法通过构造函数对象来实例化对象。的对象,并打印了它的信息。 阅读详情

一、通过反射机制实例化对象

使用反射机制实例化对象比较灵活。

  • Java代码只需写一遍,在不改变Java源代码的基础之上,可以做到不同对象的实例化。

  • 非常灵活(符合OCP开闭原则:对扩展开放,对修改关闭。)

/*获取到Class,能干什么呢?
*      通过Class的newInstance方法来实例化对象。
*       注意:newInstance方法内部实际上调用无参数构造方法,必须保证无参构造方法存在才可以。*/
public class test03{
    public static void main(String args[]){
        //不使用反射机制,创建对象,
        //User user = new User();
        //下面这段代码使用反射机制的方式创建对象
        try {
            //通过反射机制,获取Class,通过class来实例化对象:
            Class c= Class.forName("User");//c代表user类型
            //newInstance();这个方法会调用User这个类的无参构造方法,来完成对象的创建。
            //重点:newInstance();调用的是无参构造方法,必须保证无参构造方法存在才可以。
            Object obj = c.newInstance();
            System.out.println(obj);/*-->这是一个无参构造方法
                                        User@3764951d*/
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
​
    }
}
class User{
    public User(){
        System.out.println("这是一个无参构造方法");
    }
}

二、通过读属性文件实例化对象

import java.io.FileReader;
import java.util.Properties;
public class test03{
    public static void main(String args[])throws  Exception{
        //不使用反射机制,创建对象,这种方式代码就写死了,只能创建一个User类型的对象
        //User user = new User();
        //下面这段代码使用反射机制的方式创建对象,比较灵活;
        //代码不需要改动,可以修改配置文件,来创建出不同的实例化对象:
        //通过IO流读取classinfo.properties文件
        FileReader reader = new FileReader("swing/classinfo.properties");
        //创建属性类对象Map
        Properties pro= new Properties();//key  value都是String
        //加载
        pro.load(reader);
        //关闭流
        reader.close();
        //通过key获取value
        String className = pro.getProperty("className");
        //System.out.println(className);//java.lang.Object
        //通过反射机制,获取Class,通过class来实例化对象:
            Class c= Class.forName(className);
            Object obj = c.newInstance();
            System.out.println(obj);//-->java.lang.Object@66d3c617
    }
}
class User{
    public User(){
        System.out.println("这是一个无参构造方法");
    }
}

属性配置文件:classinfo.properties 

//属性配置文件
className=java.lang.Object

三、如果只要静态代码块执行,使用Class.forName(”完整类名“);

/*Class.forName()发生了什么?
*   重点:如果只希望静态代码块执行,其他的代码一律不执行,则可以使用:
*           Class.forName(“完整类名”);
* 这个方法的执行会导致类加载--->类加载时 ,静态代码块就执行了.
* 提示:后面的JDBC技术的时候我们就会用到。。*/
public class test03{
    public static void main(String args[]){
        try {
            //Class.forName()这个方法的执行会导致:类加载
            Class c = Class.forName("User");    //静态代码块执行了
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}
class User{
    //静态代码块在**类加载时**执行,并且只执行一次,
    static {
        System.out.println("静态代码块执行了");
    }
}

重点:如果只希望静态代码块执行,其他的代码一律不执行,则可以使用:

  •  Class.forName(“完整类名”);
  • * 这个方法的执行会导致类加载--->类加载时 ,静态代码块就执行了.

 四、资源绑定器

java.util包下提供了一个资源绑定器,用于获取属性配置文件中的内容。
使用该方式时,属性配置文件必须放在类路径下;
资源绑定器,只能绑定xxx.properties文件 。

  • public static final ResourceBundle getBundle(String baseName)

资源绑定器的代码实现:

package src;
import java.util.ResourceBundle;
​
/*java.util 包下提供了一个资源绑定器,便于获取属性配置文件中的内容。
* 使用以下方法,属性配置文件xxx.properties必须放到"类路径"下。 */
public class test{
    public static void main(String args[]){
        //资源绑定器,只能绑定属性配置文件xxx.properties格式的。
        //在写路径的时候,路径后面的扩展名不能写
        ResourceBundle bundle = ResourceBundle.getBundle("test/classinfo2");
        String className = bundle.getString("className");
        System.out.println(className);//java.lang.Object
    }
}

配置文件:

//属性配置文件
className=java.lang.Object

 如果你觉得博主的文章的不错或者对你有帮助,可以点一个免费的关注支持一下博主,你的鼓励将是我创作的最大动力!! 

DSP28377内存不够用?手把手教你合并RAM/FLASH块,解决CCS20链接器报错 本文详细介绍了在CCS20开发环境中解决DSP28377内存不足问题的方法,通过合并RAM/FLASH块优化CMD文件配置,有效解决链接器报错。文章包含内存布局对比、改写步骤、FreeRTOS集成注意事项及调试技巧,帮助开发者提升内存利用率与项目性能。 阅读详情

相关推荐

保姆级教程:用Java和HslCommunication库搞定三菱PLC数据读写(附完整代码)

本文提供了一份详细的Java与三菱PLC通信教程,通过HslCommunication库实现高效数据读写。内容涵盖环境配置、通信模式选择、数据类型操作、异常处理及性能优化,并附有完整代码示例,帮助开发者快速掌握工业自动化中的PLC数据交互技术。

weixin_28731223的博客 227

JS学习记录2

Global对象 eval json Math对象 Number对象 Object对象

十三月的博客 548

13-单片机模块化程序: 单片机AT指令配置模块程序模板(非阻塞版)

资料源码:https://gitee.com/yang456/OpenProgrammingModuleForMCU.git 点击加入群聊【单片机,物联网,上位机】: 说明1:知识从未如此性感。 烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系! 说明2:学的是思想,而非程序!此代码思路适用于所有的单片机。 说明3:学会以后,下面的代码可能会跟你一辈子! 说明4:这一系列文章是为大幅度裁剪本人博客文章!使博客文章更有条理。便于推其它教程! 拷贝这两个文件到自己的工程 ..

杨奉武的博客 1280

Java------反射机制之通过反射实例化对象

通过Class的newInstance()方法来实例化对象 注意:newInstance()内部实际上调用了无参数构造方法,必须保证无参数构造的存在

yaoshutong的博客 1251

喷雾破碎模型解析:从理论到CFD应用实践

本文深入解析喷雾破碎模型的理论基础与CFD应用实践,重点介绍KHRT、TAB和ETAB等主流模型的核心原理与工程调参技巧。通过OpenFOAM实例演示和参数优化建议,帮助工程师精准预测液滴破碎行为,提升燃烧效率与排放控制性能,适用于汽车发动机、燃气轮机等工业场景。

weixin_29281915的博客 498

NetSuite软件二次开发:NetSuite二次开发最佳实践与案例分析

SuiteScript是NetSuite提供的一种用于二次开发的脚本语言,它基于JavaScript,但添加了特定的API和框架,以支持NetSuite平台的业务逻辑开发。SuiteScript有两种版本:SuiteScript 1.0和SuiteScript 2.0,后者提供了更现代的面向对象编程模型,增强了代码的可读性和可维护性。NetSuite允许用户自定义字段以满足特定的业务需求。这些字段可以添加到现有的记录类型中,也可以用于自定义记录。自定义字段可以是文本、数字、日期、下拉列表等多种类型。

kkchenjj的博客 1465

用反射设计通用的实例化对象方案

用反射设计通用的实例化对象方案

小何的博客 1235

Java小白入门200例81之Java接口

作者简介 作者名:编程界明世隐 简介:优快云博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞! 引言 很多Java初学者问我,新手明明很用心、很努力学习的Java知识,转头又忘记了,很让人犯愁,小白如何能够快速成长、成为大牛呢? 其实要成为大神的技巧只有一个:“多学多练”,于是明哥就整理了比较典型的练习实例,通过练习能够快速提升编码技巧和熟练度,让你在成为大

编程界明世隐的博客 1358

如何通过反射创建实例化对象

使用指定的初始化参数来创建和初始化构造函数的声明类的新实例。通过Class对象调用方法获取构造方法对象。2获取Constructor对象。Constructor调用。1.获取Class对象。以person类为例。

qiangqiang_ya的博客 281

FPGA原型验证(八):SoC设计适配与实现策略

时钟门控在SoC设计中很常见,应该小心处理门控时钟,以成功地在FPGA上原型化SoC设计。现代FPGA综合工具在正确约束的情况下,可以自动处理大多数门控时钟。通过遵循本章中的指导方针,即使具有复杂时钟门控的SoC设计也可以得到处理,并成功地在FPGA上进行原型化。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 477

数字图像处理 基于OpenCV的景深融合算法

还有的思路是对图像序列中的每一张图像分别进行拉普拉斯金字塔拆分,提取出每一张图像的高频信息和低频信息,得到所述图像序列对应的高频信息集合和低频信息集合。然后根据所述高频信息集合得到合成后的高频信息,对所述低频信息集合进行导向滤波处理得到合成后的低频信息,根据所述合成后的高频信息和低频信息做拉普拉斯金字塔重构,得到一张超景深图像。这里声明了几个变量,ImMer是最终合成的图像,coll是中间处理的变量,Coll_Ori是保存原图像数据的变量,dstWidth目标图像宽度(一般都是与原始图像大小一致)。

学以致用 知行合一 3900

java反射实例化_Java通过反射机制实例化一个类的对象

首页>基础教程>反射>反射技术Java通过反射机制实例化一个类的对象Java通过反射机制实例化一个类的对象,步骤所用方法如下:1. forName() 返回给定串名相应的Class对象。2. newInstance() 创建类的新实例。3. getConstructors() 返回当前Class对象表示的类的所有公有构造子对象数组。4. getName() ...

weixin_34894242的博客 682

5.1 rocr-runtime libhsakmt event 机制全景—从 Doorbell 到 Signal

本文介绍了ROCm/KFD中的Event机制架构,主要解决GPU异步计算中的反馈问题。Event机制分为三层:硬件层触发事件,内核层管理事件通知,用户态接收处理。事件类型分为三大类:同步类事件(如SIGNAL、QUEUE_EVENT)用于任务完成通知,异常类事件(如MEMORY、HW_EXCEPTION)报告错误,拓扑类事件(如NODECHANGE)处理设备变更。该机制通过共享内存和中断实现高效通信,避免CPU轮询开销。后续文章将深入内核实现、Thunk层封装和多队列完成检测实战。

图形/计算GPU的驱动与虚拟化技术分享园地 1299

java 类反射实例化_Java反射机制demo(二)—通过Class实例化任意类的对象

Java反射机制demo(二)—通过Class实例化任意类的对象上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例。任意一个类,UserInfo,package com.aaron.reflect;public class UserInfo{private int userId;private String name;priva...

weixin_30449673的博客 464

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java反射机制实例化对象

//通过反射机制,获取Class ,通过Class来实例化对象 Class C = Class.forName("com.java.bean.User"); object obj = c.newInstance();//调用无参数构造方法,实例化 优点:通过读取配置文件,可以实现一套代码创建不同对象,复合开闭原则 User user=new User(); ...

ResumeProject的博客 358

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java使用反射机制实例化对象类

我们正常初始化如User user=new User(),这样的方式为正射,那么有时候无法使用正常的方式进行初始化,就可以用反射的方式。 反射由于对系统的资源占用较大,所以在能不使用就不使用。 例子: 首先创建一个对象类User @Data @AllArgsConstructor @NoArgsConstructor public class User implements Serializable { private int id; private int age;

weixin_57176230的博客 1056

java反射机制—— 利用反射机制实例化对象

 一、Java有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。(度娘文库是这么说的) 二、这篇文章主要介绍一下通过

u010987379的专栏 5101

java反射机制(一)—— 利用反射机制实例化对象

Java有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

KrocLin android学习笔记 7380

重温java知识(三十五、反射机制之三:反射机制与对象实例化)

反射机制可以帮助程序摆脱对关键字“new”的依赖,通过反射获取实例化对象。 1、反射实例化对象的例子: package com.mydemo; public class ReflectionMechanismDemo { public static void main(String[] args) throws Exception { // 获取Class类实例化对象 Class<?> clazz = Class.forName("com.mydem

yuzhiboyouzhu的博客 151

java demo类_Java反射机制demo(二)—通过Class实例化任意类的对象

Java反射机制demo(二)—通过Class实例化任意类的对象上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例。任意一个类,UserInfo,1 packagecom.aaron.reflect;23 public classUserInfo{4 private intuserId;5 privateStri...

weixin_28843015的博客 364

java反射机制实例化对象

java反射实例

cocoaxian的博客 552

Java 反射机制(反射实例化对象)

范例1:利用反射实例化对象class Book { public Book() { System.out.println("*********Book类无参构造方法***********"); } @Override public String toString() { return "这是一本书"; } } public class Demo { public stati...

Java软贱攻城狮 3474

Java反射机制demo(二)—通过Class实例化任意类的对象

Java反射机制demo(二)—通过Class实例化任意类的对象 上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例。 任意一个类,UserInfo, 1 package com.aaron.reflect; 2 3 public class UserInfo{ 4 private int u...

weixin_30858241的博客 150

使用Java反射机制实例化对象

Java反射机制(Refletion)提供了一种在运行时检查或“自省”类的能力,并能够操作内部属性,如构造函数、方法和字段等。通过反射,你可以在不知道具体类型的情况下创建对象实例、调用方法或访问字段。

weixin_63172268的博客 563

Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33971977的博客 135
上一篇: Java反射机制(详解)——获取class的三种方式
下一篇: Java反射机制——调用方法、获取父类和父接口
-今非昔比°
博客等级 码龄5年 213粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-今非昔比°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值