newInstance()方法和new关键字的区别

 

* 它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。

* 那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。

* 我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,

* 就必须保证:1、这个类已经加载;2、这个类已经连接了。

* newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 

* 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,

* 提供给了一种降耦(降低耦合度)的手段。

* 最后用最简单的描述来区分new关键字和newInstance()方法的区别:

*    newInstance: 弱类型。低效率。只能调用无参构造。

*    new: 强类型。相对高效。能调用任何public构造。

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Field;

public class testInvoke {
	public void work(){
		System.out.println("-----------");
	} 
	public  testInvoke work(String a,Integer b){
		System.out.println(a + b);
		return this;
	}
	public void work(Integer b, int c ){
		System.out.println(b + c);
	}
	
	public static void main(String[] args) throws SecurityException, NoSuchMethodException, InstantiationException, 		IllegalAccessException, IllegalArgumentException, InvocationTargetException{
		Class<?> clazz = testInvoke.class;
		//Class<?> clazz = Class.forName("invoke.testInvoke");
		//testInvoke tinvoke = new testInvoke(); Class<?> clazz = tinvoke.getClass(); 
		System.out.println(clazz);
		//如果源类的方法没有参数,则要用new Class[]{}
		Method method1 = clazz.getMethod("work", new Class[]{});
		Method method2 = clazz.getMethod("work", new Class[]{String.class, Integer.class}); 
		Method method3 = clazz.getMethod("work", new Class[]{Integer.class, int.class});
		Object invokeTest = clazz.newInstance();
		/*
		 *  Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,<br/>
		 *  如果参数为基本类型数据,必须转换为相应的包装类型的对象。invoke()方法的返回值总是对象,<br/>
		 *  如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,再将其返回<br/>
		 */
		//invoke方法的第一个参数是源类的实例,第二个参数是实例的值
		Object result1 = method1.invoke(invokeTest, new Object[]{});
		Object result2 = method2.invoke(invokeTest, new Object[]{"aaaa",new Integer(10)});
		Object result3 = method3.invoke(invokeTest, new Object[]{3,new Integer(4)});
		System.out.println(result1);
		System.out.println(result2);
		System.out.println(result3);

		Method[] methods = clazz.getMethods();
		for(Method method : methods){
			System.out.println(method.getName());
		}
		
		Field[] fileds = clazz.getFields();
		for(Field filed: fileds){
			System.out.println(filed.getName());
		}
	}
}

 控制台信息:

class invoke.testInvoke

-----------

aaaa10

7

null

invoke.testInvoke@de6ced

null

work

[Ljava.lang.Class;@c17164

work

[Ljava.lang.Class;@1fb8ee3

work

[Ljava.lang.Class;@61de33

main

[Ljava.lang.Class;@14318bb

wait

[Ljava.lang.Class;@ca0b6

wait

[Ljava.lang.Class;@10b30a7

wait

[Ljava.lang.Class;@1a758cb

equals

[Ljava.lang.Class;@1b67f74

toString

[Ljava.lang.Class;@69b332

hashCode

[Ljava.lang.Class;@173a10f

getClass

[Ljava.lang.Class;@530daa

notify

[Ljava.lang.Class;@a62fc3

notifyAll

[Ljava.lang.Class;@89ae9e

超声波清洗机拆解实录:从电路板到换能器,一文看懂内部构造(附高清图) 本文详细拆解了超声波清洗机的内部构造,从电路板设计到换能器工作原理,揭示了其核心技术。通过高清图片和详细分析,展示了功率放大电路、高频变压器及压电换能器等关键部件,为电子爱好者和维修技术人员提供了实用的故障诊断和元件二次利用指南。 阅读详情

相关推荐

oracle合并行---解决listagg 拼接字段返回过长 (Ora-01489 result of String concatenation is too long)

oracle合并行---解决listagg 拼接字段返回过长 (Ora-01489 result of String concatenation is too long)

清影的博客 6283

【Java反射-56.2】Java 中的 newInstance() 方法使用及原理分析

是 Java 反射机制中的一个重要方法,用于动态创建对象实例。尽管它已被标记为过时,但其替代方案提供了更强大和灵活的功能。理解的使用方法和原理,有助于更好地掌握 Java 反射机制,并在实际开发中灵活应用。在动态对象创建、工厂模式和框架开发等场景中,及其替代方案仍然具有重要的价值。然而,在使用时需要注意性能、安全性和异常处理等问题,以确保代码的健壮性和可维护性。

weixin_39033358的博客 1649

Delta机器人:运动学正反解分析

Delta机器人:运动学正反解分析 一、Delta机构简介 Delta机构是并联机构中的一种典型机构,起原始结构如图1所示。Delta机构由R.Clavel 博士在 1985年发明,是现在并联机器人中使用最多的一种,具备了并联机构所特有的优点,负载能力强、效率高、末端执行器精度高、运动惯性小,可以高速稳定运动等。因此在机器人领域获得了越来越广泛的应用。以实现高速、精准、高效的运动。           &n

花洛兮灬 3万+

反射中newInstance和invoke反射中的使用

newinstance的功能就是创建一个对象 通过获取构造方法函数Consstructor Constructor<?> con= c.getConstructor(int.class,int.class); 来获取一个con的对象,然后根据con是什么类型的要是是无参的就创建一个无参的对象,要是有参的就创建一个有参的对象,形式如下 Object obj1=con.newInstance(1,2); 就可以创建一个对象 而Invoke()就是一个和调用的方法有关的方法 先要获取

weixin_53990138的博客 594

【自动驾驶学习笔记——Prescan和Simulink 学习笔记和问题记录(1)】

主要记录一些Prescan/Simulink 联合仿真出现的问题。

ly1336545868的博客 1465

STM32F407+LAN8720A+LwIP实战:FreeModbus TCP从机功能开发指南

本文详细介绍了基于STM32F407和LAN8720A硬件平台,结合LwIP协议栈实现FreeModbus TCP从机功能的开发指南。内容涵盖硬件连接、LwIP移植、FreeModbus TCP从机实现、任务调度及调试技巧,为工业控制领域的以太网通信开发提供实用参考。

weixin_29190651的博客 546

反射中的newInstance和invoke方法

Test类: public class Test { //无参构造方法 public Test(){ System.out.println("调用了公有、无参构造方法执行了。。。"); } public void aaa(String a){ System.out.println("这是"+a+"的方法"); } public void aaa(){ System.out.println("这是aa.

m0_56343209的博客 852

17、Nimble 包开发与并行编程指南

本文介绍了Nimble包的开发与版本管理流程,涵盖语义化版本控制规范及发布步骤;深入探讨了Nim中的并行编程基础,包括并发与并行的区别、threads模块与threadpool模块的使用方法及其差异;分析了线程执行的不确定性、线程池的优势,并提供了线程同步和资源管理的实践示例,帮助开发者高效构建稳定、高性能的Nim应用程序。

wine的专栏 56

newInstance() 方法

通过 Class 类的 newInstance() 方法创建对象,该方法要求该 Class 对应类有无参构造方法。执行 newInstance()方法实际上就是使用对应类的无参构造方法来创建该类的实例,其代码的作用等价于Super sup = new Super()。 Class c = Class.forName("Super"); //通过Class类的newInstance()方法创建对象 Super sup = (Super)c

LiLiYuan.的博客 2万+

C++(Qt)软件调试---gdb调试入门用法(12)

学习GDB可以帮助程序员更好地调试程序,找到程序中的错误和问题,提高程序的质量和稳定性。 在开发大型软件时,程序中可能存在许多错误和问题,这些问题可能会导致程序崩溃或者出现不可预期的行为。 使用GDB可以帮助程序员更快地找到这些问题,并且提供一些调试工具来帮助程序员更好地理解程序的行为。

mahuifa的博客 5552

基于STM32的智能快递柜设计(全部资料)

本文设计了一种基于STM32F407ZGT6的智能快递柜系统,通过模块化硬件设计和软件算法优化,实现了24小时无人值守、温湿度智能调控、远程监控等功能。系统集成OLED显示、GSM通信、舵机控制、超声波检测等模块,存取响应时间≤3秒,识别准确率达99.2%,较传统模式效率提升60%。测试表明系统运行稳定,用户满意度达92%,具有成本低、安全性高、可扩展性强等特点,为智慧物流末端配送提供了创新解决方案。未来可引入AI算法、太阳能供电等功能进一步优化系统性能。

3254968421的博客 588

[报错信息] : java.lang.NoSuchMethodException: java.lang.Integer.init() - Java反射创建对象出现

一、报错信息 Exception in thread "main" java.lang.InstantiationException: java.lang.Integer at java.lang.Class.newInstance(Class.java:427) at top.clearlight.coretech.reflect.ReflectTest.main(ReflectTest.j...

Clearlight's Blog 1万+

2026 企查查/天眼查:IP频率限制 + 验证码策略,企业工商数据采集实战

企业工商数据采集技术解析与解决方案 本文深度剖析了2026年企查查和天眼查平台的反爬机制与技术对抗方案。主要内容包括: 反爬机制分析: 采用JA4+ TLS指纹识别、极验v6验证码等多层防护 IP限制策略严格区分未登录/普通/VIP账号 精准识别并封禁数据中心IP 核心解决方案: 构建高可用住宅代理池,动态轮换真实用户IP 基于YOLOv8的验证码缺口识别技术(准确率99%) 分布式架构设计,支持千万级数据采集 多账号池管理与行为模拟技术 技术亮点: 动态住宅IP池实现1%以下封禁率 Playwright浏

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1327

new关键字和newInstance()方法的区别

在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。 Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找

shecui_java的专栏 709

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java中newinstance_java 中newInstance()方法和new关键字的区别

java 中newInstance()方法和new关键字的区别* 它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。* 那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。* 我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,* 就必须保证:1、这个类已经加载;2、这个类已经连接...

weixin_42503446的博客 372

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java new关键字和newInstance()方法的区别

1、类的加载方式不同 在执行Class.forName("a.class.Name")时,JVM会在classapth中去找对应的类并加载,这时JVM会执行该类的静态代码段。在使用newInstance()方法的时候,必须保证这个类已经加载并且已经连接了,而这可以通过Class的静态方法forName()来完成的。使用关键字new创建一个类的时候,这个类可以没有被加载,一般也不需要该类在clas...

编程者说的博客专栏 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java中new关键字和newInstance()方法的区别

1 new是一个关键字,可以说是一个指令; newInstance()是一个方法,Class对象的一个方法。 2 new主要作用是在内存中生成一个实例,而这个类可以没有提前加载到内从中; newInstance()主要作用是在内存中生成一个实例,而这个方法在使用前必须得保证:①这个类被加载到内存中,②这个类已经被连接,而完成以上两个过程的是Class.forName()方法。 3 new关键字的使用一般比较呆板的写入到程序中; newInstance()方法一般用于框架中,工厂模式中等等。 4 new关键字

weixin_43948683的博客 354

Java newInstance()方法和new关键字区别

在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。    Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模

zhaome的专栏 643

java可以在参数里new_java中new关键字和newInstance()方法有什么区别?

1.new可以调用带参数的构造函数,newInstance不可以。2.new 是 java 的关键字,用来构造一个类的实例。而 newInstance 是 Class 的一个方法,不过两个写法的效果一样。3.newInstance: 弱类型。低效率。只能调用无参构造。new: 强类型。相对高效。能调用任何public构造。4.new是关键字,用来生产对象,可以调用类的公开任何构造方法而newIns...

weixin_34466671的博客 545

Java 中newInstance()方法和new关键字的区别

我们使用关键字new创建一个类的对象的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证这个类已经加载并且已经连接了。 降低耦合度: newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 ...

weixin_43958974的博客 449
上一篇: java反射
下一篇: JavaerTravel行车路线图
yangactive
博客等级 码龄15年 15粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值