java对象实例化的几种方法
2016-12-23 16:23
344 查看
java对象实例化有多少种方法?一般我们常用的有这么几种
1)用类的new ()创建
2)用clone方法创建, 需要类实现 Cloneable 接口
3)用 Class.forName方法获取类,在调用类的newinstance()方法
4)将一个对象实例化后,进行序列化,再反序列化,也可以获得一个对象(远程通信的场景下使用)
下面的例子,有两个类,一个是要操作的对象类,一个是对这个类的使用,代码如下:
User.java
UserTest.java
++++++++++通过Class New()方式实例化+++++++++++++
Name:Kong zi, Phone:13800010001, Company:Greatwalk;
++++++++++通过 clone()方式实例化+++++++++++++
Name:zhuang zi, Phone:13800010001, Company:Greatwalk;
++++++++++通过Class.forName 反射方式 实例化+++++++++++++
Name:default, Phone:18600010002, Company:default;
++++++++++通过序列化和反序列化进行 实例化+++++++++++++
反序列化user:Name:Kong zi, Phone:13800010001, Company:Greatwalk;
1)用类的new ()创建
2)用clone方法创建, 需要类实现 Cloneable 接口
3)用 Class.forName方法获取类,在调用类的newinstance()方法
4)将一个对象实例化后,进行序列化,再反序列化,也可以获得一个对象(远程通信的场景下使用)
下面的例子,有两个类,一个是要操作的对象类,一个是对这个类的使用,代码如下:
User.java
package com.study.javainstance; import java.io.Serializable; public class User implements Cloneable,Serializable { //实现Serializable,才有这个 private static final long serialVersionUID = -1L; //用户名 String Name=""; //用户联系方式 String Phone=""; //用户公司 String Company=""; /* * default 方法,没有这个方法,class.forname 会报错 */ public User( ) { this.Name = "default"; this.Phone = "default"; this.Company = "default"; } public User( String name,String phone, String company ) { this.Name = name; this.Phone = phone; this.Company = company; } public String getName() { return Name; } public void setName(String name) { Name = name; } public String getPhone() { return Phone; } public void setPhone(String phone) { Phone = phone; } public String getCompany() { return Company; } public void setCompany(String company) { Company = company; } @Override public Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return super.clone(); } public String toString(){ return "Name:"+this.Name+", Phone:"+this.Phone+", Company:"+this.Company+";"; } }
UserTest.java
package com.study.javainstance; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class UserTest { public static void main(String[] args) { // java 实例化1,通过new方法 System.out.println("++++++++++通过Class New()方式实例化+++++++++++++"); User user1 = new User("Kong zi", "13800010001", "Greatwalk"); System.out.println(user1.toString()); System.out.println(); // java 实例化2,通过clone方式 System.out.println("++++++++++通过 clone()方式实例化+++++++++++++"); try { User user2 = (User) user1.clone(); user2.setName("zhuang zi"); System.out.println(user2.toString()); System.out.println(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } System.out.println("++++++++++通过Class.forName 反射方式 实例化+++++++++++++"); // java 实例化3,通过反射方式,先获取class,再获取实例 { Class<?> c1 = null; //类泛型 try { c1 = Class.forName("com.study.javainstance.User"); } catch (ClassNotFoundException e) { e.printStackTrace(); } User p1 = null; try { p1 = (User) c1.newInstance(); p1.setPhone("18600010002"); System.out.println(p1.toString()); System.out.println(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //通过序列化进行对象的序列化和反序列化 System.out.println("++++++++++通过序列化和反序列化进行 实例化+++++++++++++"); try{ ObjectOutputStream out = new ObjectOutputStream (new FileOutputStream("E:/objectUser.txt")); //序列化对象 out.writeObject(user1); //"Kong zi", "13800010001", "Greatwalk" out.close(); //反序列化对象 ObjectInputStream in = new ObjectInputStream(new FileInputStream("E:/objectUser.txt")); User user4 = (User) in.readObject(); System.out.println("反序列化user:" + user4); in.close(); } catch(ClassNotFoundException e ){ e.printStackTrace(); } catch(FileNotFoundException e ){ e.printStackTrace(); } catch(IOException e ){ e.printStackTrace(); } } }上面的例子,执行的结果如下:
++++++++++通过Class New()方式实例化+++++++++++++
Name:Kong zi, Phone:13800010001, Company:Greatwalk;
++++++++++通过 clone()方式实例化+++++++++++++
Name:zhuang zi, Phone:13800010001, Company:Greatwalk;
++++++++++通过Class.forName 反射方式 实例化+++++++++++++
Name:default, Phone:18600010002, Company:default;
++++++++++通过序列化和反序列化进行 实例化+++++++++++++
反序列化user:Name:Kong zi, Phone:13800010001, Company:Greatwalk;
相关文章推荐
- java对象转为java String的几种常用方法剖析
- Java对象转为String的几种常用方法 (转)
- 波哥学JAVA,定义类 声明属性 创建对象 实例化对象 对象调用属性或者方法
- 将java对象转为java String的几种常用方法剖析
- Java中,如何调用“其他类的方法中生成的实例化的对象”的属性?
- java实例化对象的方法
- JAVA对象转为Java String的几种常用方法
- java中创建对象的几种方法
- java中需要关注的3大方面内容/Java中创建对象的几种方法:
- java对象转为java String的几种常用方法剖析
- 将Java对象转为String的几种常用方法剖析
- 创建JAVA实例化对象的方法总结
- JAVA中创建一个对象有哪几种方法,有什么区别?
- java 使用class进行对象实例化的三个方法
- JAVA对象转为Java String的几种常用方法
- JAVA对象转为Java String的几种常用方法
- java对象转为java String的几种常用方法剖析
- java中获取Class对象的几种方法
- java获取Class对象的几种方法
- java 用new语句创建(实例化)对象的三种方法的性能对比