new 对象和Class的getInstance()方法的差别?
创建对象时的差别
1、new 对象包含2步,
1)载入类;
2)而且实例化。
2、Class的对象.getInstance(),只不过实例化。
也就是说。在运行 Class的对象.getInstance() 之前一定要先载入相应的类。
//演示样例代码
/**
* new 对象和Class的对象.getInstance()的差别?<p>
* 答:<br>
* 1、new 对象包含2步。<br>
* 1)载入类。<br>
* 2)而且实例化。<p>
*
* 2、Class的对象.getInstance(),只不过实例化。<br>
* 也就是说。在运行 Class的对象.getInstance() 之前一定要先载入相应的类。<br>
* @author gzh
*
*/
public class Main1 { /**
* @param args
*/
public static void main(String[] args) {
// Word word = new Word();
// ClassLoader classLoader = word.getClass().getClassLoader();
ClassLoader classLoader = Word.class.getClassLoader();
System.out.println(classLoader); //注:Word.class是由sun.misc.Launcher$AppClassLoader@1372a1a载入器载入的 try {
Class<?> c = classLoader.loadClass(args[0]); //1、必需要先载入该类; Object o1 = c.newInstance(); //2、然后,才干够使用.newInstance()方法来新建实例对象。
Object o2 = c.newInstance();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
详细应用上的差别
如果定义了一个接口Door,開始的时候是用木门的。定义为一个类WoodenDoor,在程序里就要这样写 Door door = new WoodenDoor() 。
如果后来生活条件提高。换为自己主动门了。定义一个类AutoDoor,这时程序就要改写为 Door door = new AutoDoor() 。
尽管仅仅是改个标识符,如果这种语句特别多,修改还是挺大的。于是出现了工厂模式,全部Door的实例都由DoorFactory提供。这时换一种门的时候。仅仅须要把工厂的生产模式改一下,还是要改一点代码。
而假设使用newInstance(),则能够在不改变代码的情况下。换为第二种Door。
详细方法是把Door的详细实现类的类名放到配置文件里,通过newInstance()生成实例。这样,改变第二种Door的时候。仅仅改配置文件就能够了。演示样例代码例如以下:
String className = 从配置文件读取Door的详细实现类的类名;
Door door = (Door) Class.forName(className).newInstance();
new 对象和Class的getInstance()方法的差别?的更多相关文章
- 使用getInstance()方法的原因及作用
使用getInstance()方法的原因及作用 先举例说明: 下面是一个例子,为什么要把这个类实例化?有什么好处? //实例化 public static DBConnect instance; pu ...
- JSon 对象转字符的一些方法
引用System.Web.Entity.dll public static string ToJSON(this object obj) { JavaScriptSerializer serializ ...
- XE3随笔6:SuperObject 的 JSON 对象中还可以包含 "方法"
SuperObject 的 JSON 对象中还可以包含 "方法", 这太有意思了; 其方法的格式是: procedure Method(const This, Params: IS ...
- Jquery中使用setInterval和setTimeout会提示缺少对象的错误,解决方法如下:
直接在ready中调用其他方法,会提示缺少对象的错误,解决方法如下: 方法1. 应用jQuery的扩展可以解决这个问题. $(document).ready(function(){ $.extend( ...
- SQL Server中查询用户的对象权限和角色的方法
--SQL Server中查询用户的对象权限和角色的方法 -- 查询用户的object权限 exec sp_helprotect NULL, 'sa' -- 查询用户拥有的role exec sp_h ...
- C++11用于计算函数对象返回类型的统一方法
[C++11用于计算函数对象返回类型的统一方法] 模板 std::result_of 被TR1 引进且被 C++11 所采纳,可允许我们决定和使用一个仿函数其回返值的类别.底下,CalculusVer ...
- Android反射出一个类中的其他类对象并调用其对应方法
MainActivity如下: package cn.testreflect; import java.lang.reflect.Field; import java.lang.reflect.Met ...
- python的str,unicode对象的encode和decode方法
python的str,unicode对象的encode和decode方法 python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byt ...
- 通过supper()有参构造器,完成子类对象调用父类属性的方法,并完成赋值
package com.Summer_0426.cn; /** * @author Summer * 通过supper()有参构造器,完成子类对象调用父类属性的方法,并完成赋值 * */ public ...
随机推荐
- 使用展开操符作替代 .apply() (prefer-spread)
在ES2015以前,你必须使用Function.prototype.apply()来调用可变函数. var args = [1, 2, 3, 4]; Math.max.apply(Math, args ...
- C/C++ Swap without using extra variable
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50255379 对于可以线性运算的变量, ...
- linux gnome kde点滴
2014.12.08 下面切换的方法对于fedora 17没有效果,对于fedora 17, 要使用system-switch-displaymanager,出现 点击相应的选项,然后就进入相应的启动 ...
- OSGI项目中获取文件路径
假设想依据给定的文件名创建一个File实例,你可能会这么写: File file = new File(当前类.class.getResource("config").toURI( ...
- oracle实现自增id
--oracle实现自增id --创建一张T_StudentInfo表 create table T_StudentInfo ( "id" integer not null pri ...
- xBIM 基础10 WeXplorer 浏览器检查
系列目录 [已更新最新开发文章,点击查看详细] 在上一篇 <xBIM基础 09 WeXplorer 基本应用> 已经提到,查看器不会在所有浏览器的所有设备上运行.为了操作效率和简单 ...
- POJ 2190 模拟
按照题意模拟就好- 注意"X"只能出现在最后一位... // by SiriusRen #include <cstdio> using namespace std; c ...
- Java7里try-with-resources分析--转
原文地址:http://blog.csdn.net/hengyunabc/article/details/18459463 这个所谓的try-with-resources,是个语法糖.实际上就是自动调 ...
- sql server 去掉某字段左边的0
比如:将以下Code字段 Code 000 001 002 ... 009 010 依次去掉左边的0,000替换为0,001替换为1,010替换为10,以此类推 Code 0 1 2 ... 9 10 ...
- 分库分表中间件Sharding-JDBC
数据库分库分表从互联网时代开启至今,一直是热门话题.在NoSQL横行的今天,关系型数据库凭借其稳定.查询灵活.兼容等特性,仍被大多数公司作为首选数据库.因此,合理采用分库分表技术应对海量数据和高并发对 ...