java创建对象的几种常用方法

王朝学院·作者佚名  2016-05-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

java创建对象的几种常用方法java几种常见的创建对象的方法:

1、使用new关键字创建对象

2、利用java的反射机制,通过java.lang.Class或者java.lang.reflect.Constructor创建对象

3、实现Cloneable接口,然后重写Object.clone()方法创建对象

4、实现序列化serialiable接口,通过反序列化,ObjectInputStream的readObject()方法创建对象

5、String str="abc" 直接由jvm创建 或者使用 字符串操作符"+" String str1 = "a"+"bc"由jvm创建

创建对象类TestBean.java

package test.createObj;import java.io.Serializable;public class TestBean implements Cloneable,Serializable{ /** * */ PRivate static final long serialVersionUID = -6896355094290356656L; private String id; private String name; public TestBean(String id, String name) { this.id = id; this.name = name; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setId(String id) { this.id = id; } public String getId() { return id; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } @Override public String toString() { return super.toString()+" "+id+" "+name; }}

创建测试类CreateObjTest.java

package test.createObj;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.lang.reflect.Constructor;public class CreateObjTest { /** * @param args */ @SuppressWarnings("rawtypes") public static void main(String[] args) { //一、new关键词新建一个对象 TestBean testbean1 = new TestBean("1","张三哈哈"); //二、反射机制 TestBean testbean2 = null; try { Class<?> clazz = Class.forName("test.createObj.TestBean"); //当类中含有参数的构造函数 而没有无参构造函数时 会报java.lang.InstantiationException异常 //则类里需要添加无参构造函数// testbean2 = (TestBean) clazz.newInstance(); //或者用反射获取类的有参构造函数 通过有参构造函数实例化对象 Class[] paramTypes = {String.class,String.class}; Constructor constor = clazz.getConstructor(paramTypes); testbean2 = (TestBean) constor.newInstance("2","李四"); } catch (Exception e) { e.printStackTrace(); } //三、克隆 但类必须要实现Cloneable接口 并且要在类里重写clone方法 //jdl1.6中文api是这样说的: //如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。 //按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。 //请参阅 Object.clone(),以获得有关重写此方法的详细信息。 //注意,此接口不 包含 clone 方法。因此,因为某个对象实现了此接口就克隆它是不可能的。即使 clone 方法是反射性调用的,也无法保证它将获得成功。 TestBean testbean3 = null; try { testbean3 = (TestBean) testbean1.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } //四、反序列化 但类要实现序列化接口 ObjectOutputStream objOutStream = null; ObjectInputStream objInStream = null; TestBean testbean4 = null; try { File file = new File("C:\\testbean.txt"); if(!file.exists()){ file.createNewFile(); }// objOutStream = new ObjectOutputStream(new FileOutputStream(file));// objOutStream.writeObject(testbean1); objInStream = new ObjectInputStream(new FileInputStream(file)); testbean4 = (TestBean) objInStream.readObject(); } catch (Exception e) { e.printStackTrace(); }finally{ if(objOutStream!=null){ try { objOutStream.close(); } catch (IOException e) { e.printStackTrace(); } } if(objInStream!=null){ try { objInStream.close(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println("testbean1:"+testbean1); System.out.println("testbean2:"+testbean2); System.out.println("testbean3:"+testbean3); System.out.println("testbean4:"+testbean4); }}

运行结果:

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航