java 中newInstance()方法和new关键字的区别
发布时间 - 2026-01-11 03:04:23 点击率:次java 中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
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# newInstance()方法和new关键字
# java中newInstance()方法和new关键字的对比
# Java和C++通过new创建的对象有何区别?
# 详解java创建一个女朋友类(对象啥的new一个就是)==建造者模式
# 一键重写
# Java Class.forName()用法和newInstance()方法原理解析
# 深入理解Java new String()方法
# 解决Java中new BigDecimal()的坑
# 注意Java中 new BigDecimal(double val) 的使用
# 加载
# 转换为
# 创建一个
# 第一个
# 如有
# 两种
# 把它
# 我们可以
# 给了
# 希望能
# 第二个
# 考虑到
# 谢谢大家
# 显而易见
# 最简单
# 两步
# 接了
# 再将
# 则要
# 为什么会有
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
phpredis提高消息队列的实时性方法(推荐)
EditPlus中的正则表达式实战(6)
香港服务器建站指南:免备案优势与SEO优化技巧全解析
黑客如何通过漏洞一步步攻陷网站服务器?
北京的网站制作公司有哪些,哪个视频网站最好?
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
如何在服务器上配置二级域名建站?
如何快速登录WAP自助建站平台?
想要更高端的建设网站,这些原则一定要坚持!
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
如何在云主机上快速搭建网站?
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
Android仿QQ列表左滑删除操作
Laravel用户密码怎么加密_Laravel Hash门面使用教程
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
什么是javascript作用域_全局和局部作用域有什么区别?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
香港服务器租用费用高吗?如何避免常见误区?
BootStrap整体框架之基础布局组件
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
如何在阿里云购买域名并搭建网站?
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
如何在IIS7中新建站点?详细步骤解析
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
Mybatis 中的insertOrUpdate操作
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Android自定义控件实现温度旋转按钮效果
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
javascript中的try catch异常捕获机制用法分析
Android实现代码画虚线边框背景效果
如何获取PHP WAP自助建站系统源码?
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
jQuery validate插件功能与用法详解
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
详解jQuery中基本的动画方法
高端企业智能建站程序:SEO优化与响应式模板定制开发
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
网站制作免费,什么网站能看正片电影?
详解Android图表 MPAndroidChart折线图
如何用搬瓦工VPS快速搭建个人网站?
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
b2c电商网站制作流程,b2c水平综合的电商平台?
Laravel PHP版本要求一览_Laravel各版本环境要求对照

