• Java 中创建对象的 5 种方式!


    Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码

    Employee类:

      

    class Employee implements Cloneable, Serializable {   
       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   
       public Object clone() {   
           Object obj = null;   
           try {   
               obj = super.clone();   
           } catch (CloneNotSupportedException e) {   
               e.printStackTrace();   
           }   
           return obj;   
       }   
    }

    下面的Java程序中,我们将用5种方式创建Employee对象。

    public class ObjectCreation {   
       public static void main(String... args) throws Exception {   
           // 1.使用new关键字
           Employee emp1 = new Employee();   
           emp1.setName("Naresh");   
           System.out.println(emp1 + ", hashcode : " + emp1.hashCode());   
           // 2.  使用Class类的newInstance方法
           Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee")   
                                  .newInstance();   
           // 或者这样
           // Employee emp2 = Employee.class.newInstance();   
           emp2.setName("Rishi");   
           System.out.println(emp2 + ", hashcode : " + emp2.hashCode());   
           // 3.使用Constructor类的newInstance方法  
           Constructor<Employee> constructor = Employee.class.getConstructor();   
           Employee emp3 = constructor.newInstance();   
           emp3.setName("Yogesh");   
           System.out.println(emp3 + ", hashcode : " + emp3.hashCode());   
           // 4.使用clone方法
           Employee emp4 = (Employee) emp3.clone();   
           emp4.setName("Atul");   
           System.out.println(emp4 + ", hashcode : " + emp4.hashCode());   
           // 5.使用反序列化  
           // Serialization   
           ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.obj"));   
           out.writeObject(emp4);   
           out.close();   
           //Deserialization   
           ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));   
           Employee emp5 = (Employee) in.readObject();   
           in.close();   
           emp5.setName("Akash");   
            //居然用对象流写入一个对象,再读出一个对象
           System.out.println(emp5 + ", hashcode : " + emp5.hashCode());   
       }   
    }
  • 相关阅读:
    FZU 1005 Fast Food(dp)
    POJ 3186 Treats for the Cows(区间DP)
    2016郑州轻工业学院校赛 B 蛤玮的财宝
    c++大数模板
    2015轻院校赛 H五子棋
    poj 1015 Jury Compromise
    modbus协议说明(转)
    STM32 flash 内存分布介绍
    STM32 程序所占用空间计算 && FLASH存储的起始地址计算
    C float与char数组 互转
  • 原文地址:https://www.cnblogs.com/heqiyoujing/p/10765925.html
Copyright © 2020-2023  润新知