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) 的使用
# 加载
# 转换为
# 创建一个
# 第一个
# 如有
# 两种
# 把它
# 我们可以
# 给了
# 希望能
# 第二个
# 考虑到
# 谢谢大家
# 显而易见
# 最简单
# 两步
# 接了
# 再将
# 则要
# 为什么会有
相关文章:
大学网站设计制作软件有哪些,如何将网站制作成自己app?
建站之星安装模板失败:服务器环境不兼容?
常州自助建站费用包含哪些项目?
如何选择建站程序?包含哪些必备功能与类型?
小型网站建站如何选择虚拟主机?
如何续费美橙建站之星域名及服务?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
网站制作知乎推荐,想做自己的网站用什么工具比较好?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
建站主机选虚拟主机还是云服务器更好?
建站之星安装失败:服务器环境不兼容?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
宁波免费建站如何选择可靠模板与平台?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
北京网站制作的公司有哪些,北京白云观官方网站?
如何在宝塔面板中修改默认建站目录?
北京专业网站制作设计师招聘,北京白云观官方网站?
如何高效完成自助建站业务培训?
网站制作公司排行榜,抖音怎样做个人官方网站
网站制作公司,橙子建站是合法的吗?
如何快速搭建高效WAP手机网站?
如何配置支付宝与微信支付功能?
如何快速上传自定义模板至建站之星?
北京的网站制作公司有哪些,哪个视频网站最好?
,制作一个手机app网站要多少钱?
网站设计制作企业有哪些,抖音官网主页怎么设置?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
如何在企业微信快速生成手机电脑官网?
装修招标网站设计制作流程,装修招标流程?
如何用PHP快速搭建高效网站?分步指南
建站之星logo尺寸如何设置最合适?
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何通过万网虚拟主机快速搭建网站?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
制作网站怎么制作,*游戏网站怎么搭建?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何在橙子建站中快速调整背景颜色?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何用PHP工具快速搭建高效网站?
,怎么用自己头像做动态表情包?
兔展官网 在线制作,怎样制作微信请帖?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何选择适配移动端的WAP自助建站平台?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
建站之星微信建站一键生成小程序+多端营销系统
免费网站制作appp,免费制作app哪个平台好?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
韩国服务器如何优化跨境访问实现高效连接?
*请认真填写需求信息,我们会在24小时内与您取得联系。