转载:http://softkid.iteye.com/blog/292935
Java有一下三种方法可以创建对象实例。
1.new
通常都是使用java的关键字new来创建对象实例。
若有一个Something类,则可以通过下面的语句创建Something类的对象实例并指定到变量obj。
- Something somethingNew = new Something();
通过new创建对象实例必须把类名写在原代码里面。
2.clone
若程序写成如下,则可以根据当前对象(this)建立一个新实例对象(没有调用构造函数).
- public class Something implements Cloneable{
- private Something obj;
- public Something cloneSomething()
- {
- try {
- obj = (Something)this.clone();
-
- } catch (CloneNotSupportedException e) {
- e.printStackTrace();
- }
- return obj;
-
- }
- }
如果需要复制上面的那个obj指向的对象实例时,调用somethingNew.cloneSomething()方法就ok了。
但是为什么不直接使用somethingNew.clone()呢?
JDK中Object# clone()方法的原型是:
protected native Object clone() throws CloneNotSupportedException;
方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。
所以,必需重写Object的clone方法后才能使用。
- public Object clone()throws CloneNotSupportedException
- {
- Something obj;
- obj= (Something)super.clone();
- return obj;
- }
值得注意的是 :如果需要使用clone方法,必需实现java.lang.Cloneable接口,否则会抛出java.lang.CloneNotSupportedException。
另外clone方法所做的的操作是直接复制字段的内容,换句话说,这个操作并不管该字段对应的对象实例内容。
像这样字段对字段的拷贝(field to field copy)就成为"浅拷贝",clone方法所做的正是"浅拷贝".
3.newInstance
利用java.lang.Class类的newInstance方法,则可根据Class对象的实例,建立该Class所表示的类的对象实例。
创建Something类的对象实例可以使用下面的语句(这样需要一个已经存在的对象实例)。
- somethingNew.getClass().newInstance().
或者使用下面的语句(只需要存在相应的.class文件即可)
- Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance();
如果包下不存在相应.class文件,则会抛出ClassNotFoundException。
注意 :newInstance创建对象实例的时候会调用无参的构造函数,所以必需确保类中有无参数的构造函数,否则将会
抛出java.lang.InstantiationException异常。无法进行实例化。
分享到:
相关推荐
* 执行启动类的main函数 -> 创建对象的继承树从高到底的类层次中的静态块(如果已经被执行过,则不会重复执行) -> * 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * ...
大家都知道抽象类无法实例化,就无法创建对象。所以下面这篇文章主要给大家介绍了关于Java实例化一个抽象类对象的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧...
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
自己设计的一个程序,展现有继承结构的子类对象的初始化过程(包含构造方法、初始化值、父类构造方法、父类的初始化值的环节)
主要介绍了Java创建内部类对象实例详解的相关资料,需要的朋友可以参考下
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
自己编写的java调用实例,通过配置文件进行组件的装配,通过反射进行对象的创建,通过接口进行对象的调用。组件依赖的对象和对象的行为通过配置文件配置
6 如何使用类创建对象 10 7 引用与实例 11 8 实例属性与实例方法 11 9 实例属性与实例方法的使用 12 10 实例属性属于实例本身,与其他实例没有关系 13 11 javaBean编码规范 14 12 练习: 15 13 什么构造方法 16 14 ...
关于java方法重写的Mypet实例,希望能够为新手学习用
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
丁永卫、谢志伟、高振栋主编的《Java程序设计实例与操作》以12个项目全面展示了Java语言的风采,其内容包括Java语言特色和Java开发环境介绍,Java的数据类型、常量、变量、运算符和表达式、控制结构等编程基础知识,...
JAVA设计模式,定义:提供创建对象的接口. 为何使用? 工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。
下面小编就为大家带来一篇Java反射之类的实例对象的三种表示方式总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
// 创建DrawingCanvas对象canvas canvas.addCommand(exitCommand); // 为canvas加上退出命令 canvas.addCommand(backCommand); // 为canvas加上返回命令 canvas.setCommandListener(this); // 为canvas设置...
代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...
JAVA类,只要知道了类名(全名)可以创建其实例对象,通用的方法是直接使用该类提供的构造方法,如 NewObject o = new NewObject(); NewObject o = new NewObject("test"); NewObject o = new NewObject...