您的位置:首页 > 编程语言 > Java开发

java对象实例化的几种方法

2016-12-23 16:23 344 查看
java对象实例化有多少种方法?一般我们常用的有这么几种

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: