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 】
相关推荐:
如何挑选最适合建站的高性能VPS主机?
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
如何在万网开始建站?分步指南解析
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何在阿里云虚拟服务器快速搭建网站?
香港服务器租用费用高吗?如何避免常见误区?
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
Laravel如何使用Livewire构建动态组件?(入门代码)
Laravel如何实现模型的全局作用域?(Global Scope示例)
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何在企业微信快速生成手机电脑官网?
Python正则表达式进阶教程_复杂匹配与分组替换解析
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
如何在 Pandas 中基于一列条件计算另一列的分组均值
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
轻松掌握MySQL函数中的last_insert_id()
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
android nfc常用标签读取总结
Laravel怎么清理缓存_Laravel optimize clear命令详解
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
JavaScript实现Fly Bird小游戏
如何用狗爹虚拟主机快速搭建网站?
iOS中将个别页面强制横屏其他页面竖屏
高端网站建设与定制开发一站式解决方案 中企动力
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
java获取注册ip实例
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
javascript中的try catch异常捕获机制用法分析
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
Laravel如何实现文件上传和存储?(本地与S3配置)
新三国志曹操传主线渭水交兵攻略
个人网站制作流程图片大全,个人网站如何注销?
如何在万网ECS上快速搭建专属网站?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
济南网站建设制作公司,室内设计网站一般都有哪些功能?
如何用低价快速搭建高质量网站?
简历在线制作网站免费版,如何创建个人简历?

