跳至主要內容

Java创建对象的方式

holic-x...大约 1 分钟碎片化碎片化

Java创建对象的方式

Java创建对象的方式总结

(1)new一个对象

(2)克隆一个对象(Object.clone())

(3)反射机制(通过指定类动态加载一个对象、或者借助构造器动态加载对象)

(4)序列化和反序列化(实现Seriaizable接口)

案例说明

public class User{
	private String name;
  private int age;
}

1.new方式

// 最传统的做法,通过new方式创建一个对象
User user = new User();

2.克隆一个对象(实现Cloneable接口)

public class Employee implements Cloneable{

    private String empName;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}


// 方式2:克隆一个对象(Object.clone())
    @SneakyThrows
    void test2() {
        Employee emp1 = new Employee();
        Employee emp2 = (Employee) emp1.clone();
        System.out.println(emp1 + "-----" + emp2);
    }

3.反射机制

(1)指定类动态加载:XXX.class.newInstance();Class.forName("类全路径").newInstance();

(2)指定构造器加载:XXX.class.getConstructor().newInstance();

		// 3.1反射机制(通过类派发一个对象)
    @SneakyThrows
    void test3() {
        User user = User.class.newInstance();
        System.out.println(user);
    }

    // 3.2反射机制(动态加载一个对象)
    @SneakyThrows
    void test4() {
        User user = (User) Class.forName("com.noob.demo.createObj.User").newInstance();
        System.out.println(user);
    }

    // 3.3反射机制(通过类的构造函数构造一个对象)
    @SneakyThrows
    void test5() {
        User user = User.class.getConstructor().newInstance();
        System.out.println(user);
    }

4.反序列化

(1)对应对象实现Seriaizable接口(标志性接口,用于标志类可被序列化)

(2)通过输入输出流进行序列化处理

public class Admin implements Serializable {

    private String name;

    private static final long serialVersionUID = 1L;

}


		// 4.反序列化一个对象
    @SneakyThrows
    void test6() {
        Admin admin = new Admin();
        admin.setName("俺是一个管理员");
        // 序列化一个管理员(将Java对象转化为字符串序列)
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("com.noob.demo.Admin"));
        objectOutputStream.writeObject(admin);
        objectOutputStream.close();

        // 反序列化(将对应的对象流转化为Java对象)
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("com.noob.demo.Admin"));
        Admin adminObj = (Admin) objectInputStream.readObject();
        objectInputStream.close();

        System.out.println(adminObj.getName());
    }
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3