只會new Object(),一面都過不了

  • 1.通常創建對象的方式一般是new
  • 2.另外學過反射的都知道反射也可以得到一個對象
  • 3.Clone克隆方式比較少見
  • 4.另外就是反序列化,我們接觸的也不多
  • 下面就來看下具體怎麼創建吧

    1.new

    這種就不過多解釋,直接上代碼,略過

    <code>public class Dog {
    public static void main(String[] args) {
    Dog dog = new Dog();
    }
    }/<code>

    2.反射

    反射,通俗來講,如果通過類來生成一個對象(就是說,我們先有模具,然後我們自己做一個東西)

    那麼new是什麼呢?new雖然也是生成一個對象,但是new事先是沒有模具的,我們只告訴jvm,我要創建這麼一個對象,jvm你去給我找模具,最後給我一個對象就行了

    下邊是代碼,可以類比上邊的new來理解

    <code>//第一步,我們先拿到模子
    Class> dogClass = Class.forName("Dog");

    //第二步,我們通過模子,自己來做一個對象
    Dog dog = (Dog) dogClass.newInstance();/<code>

    3.clone

    克隆的話,就是對象自己的方法,所以我們就要繼承Cloneable,來實現這麼個方法

    <code>public class Dog implements Cloneable {
    public static void main(String[] args) throws Exception {
    //第一步,就像克隆羊多利一樣,我們得現有多利這麼個對象
    Dog duoli = new Dog();
    //第二步,通過多利,我們克隆出來一個duoli2的對象
    Object duoli2 = duoli.clone();
    }
    }/<code>

    4.反序列化

    首先說一下序列化,序列化就是將內存中的對象->存到硬盤

    那麼反序列化就是,將硬盤中的對象->內存中

    所以可以看出來,反序列化就是一個將對象從硬盤中加載到內存的一個過程,可以說是一個活化過程

    嚴格來講,反序列化並不能算是創造了一個對象。

    <code>public class Dog implements Serializable {
    public static void main(String[] args) throws Exception {
    //1.這裡為了演示,先將對象序列化到dog.txt的文件裡
    Dog dog = new Dog();
    File file = new File("dog.txt");
    FileOutputStream fos = new FileOutputStream(file);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(dog);
    //2.將文件種的對象加載進內存中
    FileInputStream fis = new FileInputStream(file);
    ObjectInputStream ois = new ObjectInputStream(fis);
    Dog dog2 = (Dog) ois.readObject();
    }
    }/<code>

    總結創建對象的方式


    只會new Object(),一面都過不了

    四種哦,想想還記得嗎?


    1.new

    2.反射(newInstance())

    3.clone

    4.反序列化(readObject())


    分享到:


    相關文章: