`

Java创建对象实例的三种方法

阅读更多

转载:http://softkid.iteye.com/blog/292935

Java有一下三种方法可以创建对象实例。

1.new

通常都是使用java的关键字new来创建对象实例。

若有一个Something类,则可以通过下面的语句创建Something类的对象实例并指定到变量obj。

Java代码  收藏代码
  1. Something somethingNew = new Something();  

 通过new创建对象实例必须把类名写在原代码里面。

 

2.clone

若程序写成如下,则可以根据当前对象(this)建立一个新实例对象(没有调用构造函数).

Java代码  收藏代码
  1. public class Something implements Cloneable{  
  2.     private Something obj;  
  3.     public Something cloneSomething()  
  4.     {  
  5.         try {  
  6.             obj = (Something)this.clone();  
  7. //          obj = (Something)clone();  
  8.         } catch (CloneNotSupportedException e) {  
  9.             e.printStackTrace();  
  10.         }  
  11.         return obj;  
  12.           
  13.     }  
  14. }  

 如果需要复制上面的那个obj指向的对象实例时,调用somethingNew.cloneSomething()方法就ok了。

但是为什么不直接使用somethingNew.clone()呢?

JDK中Object# clone()方法的原型是: 
protected native Object clone() throws CloneNotSupportedException;

方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。

所以,必需重写Object的clone方法后才能使用。

Java代码  收藏代码
  1. public Object clone()throws CloneNotSupportedException  
  2. {  
  3.     Something obj;  
  4.     obj= (Something)super.clone();  
  5.     return obj;  
  6. }  

 值得注意的是 :如果需要使用clone方法,必需实现java.lang.Cloneable接口,否则会抛出java.lang.CloneNotSupportedException。

另外clone方法所做的的操作是直接复制字段的内容,换句话说,这个操作并不管该字段对应的对象实例内容。

像这样字段对字段的拷贝(field to field copy)就成为"浅拷贝",clone方法所做的正是"浅拷贝".

 

3.newInstance

利用java.lang.Class类的newInstance方法,则可根据Class对象的实例,建立该Class所表示的类的对象实例。

创建Something类的对象实例可以使用下面的语句(这样需要一个已经存在的对象实例)。

Java代码  收藏代码
  1. somethingNew.getClass().newInstance().   

或者使用下面的语句(只需要存在相应的.class文件即可)

Java代码  收藏代码
  1. Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance();  

 如果包下不存在相应.class文件,则会抛出ClassNotFoundException。

注意 :newInstance创建对象实例的时候会调用无参的构造函数,所以必需确保类中有无参数的构造函数,否则将会

抛出java.lang.InstantiationException异常。无法进行实例化。

分享到:
评论

相关推荐

    java 基础 类对象创建实例化过程 实例解析

    * 执行启动类的main函数 -> 创建对象的继承树从高到底的类层次中的静态块(如果已经被执行过,则不会重复执行) -> * 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * ...

    Java实例化一个抽象类对象的方法教程

    大家都知道抽象类无法实例化,就无法创建对象。所以下面这篇文章主要给大家介绍了关于Java实例化一个抽象类对象的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧...

    JAVA上百实例源码以及开源项目源代码

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    java源码包---java 源码 大量 实例

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    java继承类实例

    自己设计的一个程序,展现有继承结构的子类对象的初始化过程(包含构造方法、初始化值、父类构造方法、父类的初始化值的环节)

    Java创建内部类对象实例详解

    主要介绍了Java创建内部类对象实例详解的相关资料,需要的朋友可以参考下

    JAVA上百实例源码以及开源项目源代码 java开源包2

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    Java动态调用实例

    自己编写的java调用实例,通过配置文件进行组件的装配,通过反射进行对象的创建,通过接口进行对象的调用。组件依赖的对象和对象的行为通过配置文件配置

    JAVA面向对象详细资料

    6 如何使用类创建对象 10 7 引用与实例 11 8 实例属性与实例方法 11 9 实例属性与实例方法的使用 12 10 实例属性属于实例本身,与其他实例没有关系 13 11 javaBean编码规范 14 12 练习: 15 13 什么构造方法 16 14 ...

    Java方法重载的实例

    关于java方法重写的Mypet实例,希望能够为新手学习用

    JAVA上百实例源码以及开源项目

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    Java程序设计实例与操作光盘

    丁永卫、谢志伟、高振栋主编的《Java程序设计实例与操作》以12个项目全面展示了Java语言的风采,其内容包括Java语言特色和Java开发环境介绍,Java的数据类型、常量、变量、运算符和表达式、控制结构等编程基础知识,...

    JAVA设计模式定义:提供创建对象的接口

    JAVA设计模式,定义:提供创建对象的接口. 为何使用? 工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。

    Java反射之类的实例对象的三种表示方式总结

    下面小编就为大家带来一篇Java反射之类的实例对象的三种表示方式总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java高级编程100实例.rar

    // 创建DrawingCanvas对象canvas canvas.addCommand(exitCommand); // 为canvas加上退出命令 canvas.addCommand(backCommand); // 为canvas加上返回命令 canvas.setCommandListener(this); // 为canvas设置...

    Java反射应用实例

    代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...

    Java对象实例化

    JAVA类,只要知道了类名(全名)可以创建其实例对象,通用的方法是直接使用该类提供的构造方法,如  NewObject o = new NewObject();  NewObject o = new NewObject("test");  NewObject o = new NewObject...

Global site tag (gtag.js) - Google Analytics