new 与 newInstance的比较
来源:互联网 发布:java base64解码成图片 编辑:程序博客网 时间:2024/05/20 04:14
java 有2种新建对象的方法
1, ClassName objectName = new ClassName();
2, Class cls = Class.forName("ClassName");
ClassName objectName = (ClassName)cls.newInstance();
普遍肯定都是第一种用得多吧,那么第二种又有什么用呢。
Monday最近在做服务器的时候遇到这种问题。
客户端向服务器发送消息,通常都带有一定协议,具体是要按照项目本身而定。
例如
消息体的头4个byte(一个int) 表示这个消息体的总大小
第5个byte 存放消息的类型
从第6个byte开始,存储消息的实体
直接从将原始接收到的消息用于业务逻辑是不太可行的,可以通过一定的解码转换成对象,之后可以更好的操作业务。
根据第5个byte的值,将第6个byte之后的转换成对象。
所以这么粗略一想,代码应该会有下面2种情况
Message msg = null;switch(receive[5])case 0:msg = new Message01();//do somethingcase 1:msg = new Message02();//do something...
或者
Class messageName = getMessaeType(msg[])Message msg = (Message)messageName.newInstance();
Monday是个比较抠细节的人,究竟哪种比较快呢。
写了个简单的测试代码(其实就是循环个N遍,看谁的快。)
static class NewThread extends Thread{@Overridepublic void run() {super.run();long star = System.currentTimeMillis();for(int i = 0; i < COUNT; i++){NewInstanceTest a = new NewInstanceTest();}System.out.println("NewThread : " + (System.currentTimeMillis() - star));}}static class InstanceThread extends Thread{@Overridepublic void run() {super.run();Class cls = null;long star = System.currentTimeMillis();try {cls = Class.forName("com.monday.switchandfunctiontest.NewInstanceTest");for(int i = 0; i < COUNT; i ++){NewInstanceTest test = (NewInstanceTest) cls.newInstance();}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}System.out.println("InstanceThread : " + (System.currentTimeMillis() - star));}}
最后输出
NewThread : 15813 《== 这个是用new的方法
InstanceThread : 314860 《== 这个是用newInstance的方法
相差了近20倍的效率。
0 0
- new 与 newInstance的比较
- java中newInstance()与new 比较
- newInstance 与New的区别
- new 与newInstance的区别
- new与newInstance()的区别
- newInstance()与new的区别
- Class.newInstance()与new、Constructor.newInstance()的区别
- Class.newInstance()与new、Constructor.newInstance()的区别
- Class.newInstance()与new、Constructor.newInstance()的区别
- newInstance()与new()
- New与newInstance关系
- new Class() 与 Class.newInstance()
- Class.forName().newInstance()与new
- java 中,new() 与newinstance()的区别~
- new对象与Class.forName("xxx").newInstance()的区别
- java中new和newInstance的区别与联系
- new、Class.forName、class.newInstance性能比较
- new 和 newInstance 的区别
- Java Web开发环境塔建 及简单测试Java Web程序
- 101个MySQL的调节和优化的Tips
- iOS XMPPFramework 环境配置
- Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境)
- 应用组件
- new 与 newInstance的比较
- 跨服开战
- 揭秘国内飞机wifi的真相一二
- java发送邮件及邮件附件代码实例v1.01
- Understanding JOINs in MySQL and Other Relational Databases 理解JOIN在MySQL和其他数据库中的运用
- 新长城 JavaScript总结
- php数组性能小测
- 前端与后台之间的数据传递(1)
- 删除虚拟机中的程序