Java 中创建对象的5种方式

java有5种创建对象的方式,下面我用这个Employee类创建对象:

 package com.example.string.Object;

 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.lang.reflect.Constructor;

  public class ObjectCreation {

/**
 * @param args
 * @throws ClassNotFoundException 
 * @throws IllegalAccessException 
 * @throws InstantiationException 
 */
public static void main(String[] args) throws Exception {
    Employee  emp1 = new Employee();
    emp1.setName("Naresh");
    System.out.println(emp1 + ", hashcode :" + emp1.hashCode());


    Employee emp2 = (Employee) Class.forName("com.example.string.Object.Employee").newInstance();
    emp2.setName("Rishi");
    System.out.println(emp2 + ", hashcode :" + emp2.hashCode());

    Constructor<Employee> constructor = Employee.class.getConstructor();
    Employee emp3 = constructor.newInstance();
    emp3.setName("Yogesh");
    System.out.println(emp3 + ", hashcode :" + emp3.hashCode());

    Employee emp4 = (Employee) emp3.clone();
    emp4.setName("Atul");
    System.out.println(emp4 + ", hashcode :" + emp4.hashCode());

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("data.obj"));
    oos.writeObject(emp4);
    oos.close();
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data.obj"));
    Employee emp5 = (Employee) ois.readObject();
    ois.close();
    emp5.setName("Akash");
    System.out.println(emp5 + ", hashcode :" + emp5.hashCode());

    }
               }

2: 创建Employee类:

package com.example.string.Object;

import java.io.Serializable;

public class Employee implements Serializable, Cloneable{


private static final long serialVersionUID = 1L;
private String name;
public Employee(){
    System.out.println("Employee Constructor Called...");
}  

 public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Employee other = (Employee) obj;
    if (name == null) {
        if (other.name != null)
            return false;
    } else if (!name.equals(other.name))
        return false;
    return true;
}

@Override
public String toString() {
    return "Employee [name=" + name + "]";
}

@Override
protected Object clone() {
    Object obj = null;
    try {
        obj = super.clone();
    } catch (CloneNotSupportedException e) {
        e.printStackTrace();
    }
    return obj;
}   
      }

程序会输出:

Employee Constructor Called...
Employee [name=Naresh], hashcode :-1968815046
Employee Constructor Called...
Employee [name=Rishi], hashcode :78970652
Employee Constructor Called...
Employee [name=Yogesh], hashcode :-1641292792
Employee [name=Atul], hashcode :2051657
Employee [name=Akash], hashcode :63313419
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值