转载https://blog.youkuaiyun.com/csolo/article/details/53841241
1)用类的new ()创建
2)用clone方法创建, 需要类实现 Cloneable 接口
3)用 Class.forName方法获取类,在调用类的newinstance()方法(反射手段)
4)将一个对象实例化后,进行序列化,再反序列化,也可以获得一个对象(远程通信的场景下使用)。调用java.io.ObjectInputStream对象的 readObject()方法。
5)通过工厂方法返回对象,如:String str = String.valueOf(23);
下面的例子,有两个类,一个是要操作的对象类,一个是对这个类的使用,代码如下:
User.java
- <span style="font-family:'Microsoft YaHei';font-size:14px;">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+";";
- }
- }
- </span>
UserTest.java
- <span style="font-family:'Microsoft YaHei';font-size:14px;">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();
- }
- }
- }
- </span>
++++++++++通过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中实现对象实例化的五种方法,包括使用new关键字、clone方法、Class.forName反射、序列化与反序列化及工厂方法,并提供代码示例。
3277

被折叠的 条评论
为什么被折叠?



