JavaRush /Blog Java /Random-MS /Coffee break #180. Pembolehubah dalam Java: apakah ia dan...

Coffee break #180. Pembolehubah dalam Java: apakah ia dan bagaimana ia digunakan. 5 Perkara Yang Anda Perlu Tahu Mengenai Pensirilan dan Penyahserikatan di Jawa

Diterbitkan dalam kumpulan

Pembolehubah dalam Java: Apakah itu dan bagaimana ia digunakan

Sumber: Hackernoon Terdapat empat jenis pembolehubah yang berbeza di Jawa, bergantung pada tempat ia diisytiharkan dalam program. Hari ini anda akan mempelajari contoh dan perbezaan setiap jenis. Coffee break #180.  Pembolehubah dalam Java: apakah ia dan bagaimana ia digunakan.  5 Perkara Yang Anda Perlu Tahu Mengenai Pensirilan dan Penyahserikatan di Jawa - 11. Pembolehubah instance atau medan Instance ialah pembolehubah yang diisytiharkan di dalam kelas tanpa kata kunci statik , tetapi di luar kaedah, pembina atau blok kod. Pembolehubah sedemikian boleh diisytiharkan di mana-mana dalam kelas. Anda boleh mengisytiharkannya dengan atau tanpa pengubah suai akses, seperti public , private , protected atau lalai (bukan kata kunci).
public class MyClass {

  //instance field 1
  private String instanceField1;

  public MyClass(){} //Constructor

  //instance field 2
  public int anotherInstanceField2;

  public void setInstanceField(String parameterVariable) {...} //instance method

  //instance field 3
  boolean instanceField3;

  public static void main(String[] args) {
    System.out.println("field 1 value: " + instanceField1); // = null
    System.out.println("field 2 value: " + anotherInstanceField2); // = 0
    System.out.println("field 3 value: " + instanceField3); // = 0
  }
}
Jika medan contoh tidak diberikan nilai pada masa pengisytiharan, ia diberikan nilai lalai sifar jika ia adalah jenis primitif, seperti ( int , boolean , long , float ), atau batal jika ia bukan jenis primitif, seperti ( String , Integer , AnyClass ). Ia dipanggil medan atau pembolehubah contoh kerana ia tergolong dalam contoh mana-mana objek yang dicipta daripada kelas di mana ia diisytiharkan.
public Main {

  public static void main(String[] args) {
    MyClass obj1 = new MyClass();
    MyClass obj2 = new MyClass();

    //Now we can access every 'public' field declared in the MyClass class
    // from the newly created object 'obj'

    obj1.anotherInstanceField2 = 11;
    obj2.anotherInstanceField2 = 33;

    System.out.println(obj1.anotherInstanceField2); // prints '11'
    System.out.println(obj2.anotherInstanceField2); // prints '33'
  }
}
Oleh itu, setiap medan contoh adalah unik untuk objeknya, seperti yang dilihat dalam coretan di atas. Di dalamnya, obj1 dan obj2 mempunyai nilai unik yang diberikan kepada medan contoh masing-masing. 2. Medan kelas atau medan statik ialah medan yang diisytiharkan dengan kata kunci statik . Mereka diisytiharkan di dalam kelas, tetapi di luar kaedah, pembina, atau blok kod. Ia juga boleh diisytiharkan di mana-mana kedudukan dalam kelas, dengan atau tanpa pengubah akses, seperti public , private , protected , atau lalai (bukan kata kunci).
public class MyClass {

  //static field
  public static String staticField;

  public MyClass(){} //Constructor

}

class Main {

  public static void main(String[] args) {

    MyClass obj = new MyClass();

    obj.staticField //will throw Not defined Error

    //Now we cannot access the static field declared in MyClass class from the
     // newly created object 'obj' because static fields are not attached to any
    // object. They belong solely to the class they are declared and can only be
    // accessed from their class.

    MyClass.staticField = "I am a static field";
    System.out.println(MyClass.staticField); // prints 'I am a static field'
  }
}
Medan statik hanya boleh diakses melalui kelasnya dan bukan daripada sebarang objek seperti yang ditunjukkan dalam coretan kod di atas. 3. Parameter atau pembolehubah Argumen ialah pembolehubah yang diisytiharkan di dalam konstruk kaedah antara pendakap kerinting pembukaan dan penutup tandatangan kaedah. Ia digunakan untuk menghantar nilai atau objek kepada kaedah.
public class MyClass {

  //instance field
  public String instanceField;

  public MyClass(){} //Constructor

  //instance method with a parameter variable
   public void setInstanceField(String parameterVariable) {
      instanceField = parameterVariable;
   }
}

class Main {

  public static void main(String[] args) {

    MyClass obj = new MyClass();

    obj.setInstanceField("From a parameter variable");

    System.out.println(obj.instanceField); // prints 'From a parameter variable'
  }
}
4. Pembolehubah setempat ialah pembolehubah yang diisytiharkan di dalam kaedah atau mana-mana blok kod, contohnya, di dalam blok pernyataan if , for loop , while loop , blok pernyataan suis dan sebagainya.
public Main {

  public static void main(String[] args) {
    MyClass obj1 = new MyClass(); // 'obj1' is local reference variable

    int id = 1; // 'name' is a local variable here.

    if (id > 1) {
        String tempName = "Austin"; // 'tempName' is a local reference variable
     }
  }
}
Dalam kod ini anda boleh melihat penggunaan rujukan dengan beberapa pembolehubah, manakala id pembolehubah tempatan tidak disebut sebagai pembolehubah rujukan. Mana-mana pembolehubah bukan primitif ialah pembolehubah rujukan. Sebagai contoh, obj1 ialah pembolehubah jenis MyClass dan tempName ialah pembolehubah jenis String , dan di sini kedua-dua jenis bukan jenis primitif. Dalam kes ini, id ialah pembolehubah jenis int , yang merupakan jenis data primitif. Oleh itu, ia adalah pembolehubah bukan rujukan.

5 Perkara Yang Anda Perlu Tahu Mengenai Pensirilan dan Penyahserikatan di Jawa

Sumber: Devgenius Dengan tutorial ini, anda akan meningkatkan pengetahuan anda tentang cara pensirilan dan penyahserikatan berfungsi. Pensirian dalam Java membantu menukar objek sedia ada kepada aliran bait. Sebaliknya, penyahserikatan menjadikan aliran bait sebagai objek. Menggunakan bersiri dan penyahserikatan dalam Java, maklumat tentang objek boleh dipindahkan dari satu JVM ke JVM yang lain.

#1 Sirialisasi

Sebelum pergi ke perincian, mari kita lihat kelas SerializeUtils.java dan Person.java . Di sini mereka akan membantu kami melakukan penyirian dan penyahserikan menggunakan contoh khusus.

SerializeUtils.java

package com.techteam.serialization;

import java.io.*;

public class SerializeUtils {
    public static <T> void serialize(T input, String fileName) throws IOException {
        FileOutputStream file = new FileOutputStream(fileName);
        ObjectOutputStream out = new ObjectOutputStream(file);
        out.writeObject(input);
        out.close();
        file.close();
    }

    public static <T> T deserialize(String fileName) throws IOException, ClassNotFoundException {
        FileInputStream file = new FileInputStream(fileName);
        ObjectInputStream in = new ObjectInputStream(file);
        T result = (T) in.readObject();

        return result;
    }

    public static void externalSeialize(Externalizable e, String fileName) throws IOException {
        FileOutputStream file = new FileOutputStream(fileName);
        ObjectOutputStream out = new ObjectOutputStream(file);
        e.writeExternal(out);
        out.close();
        file.close();
    }

    public static void externalDeseialize(Externalizable e, String fileName) throws IOException, ClassNotFoundException {
        FileInputStream file = new FileInputStream (fileName);
        ObjectInputStream in = new ObjectInputStream (file);
        e.readExternal(in);
        in.close();
        file.close();
    }
}

Person.java

package com.techteam.serialization;

import java.io.Serializable;

public class Person implements Serializable {
    private static final long serialVersionUID = 1L;

    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
Seperti yang dinyatakan, siri membantu menukar objek menjadi aliran bait. Ini bermakna semua maklumat tentang objek juga ditukar kepada aliran bait, seperti kaedah, sifat dan data. Berikut ialah contoh cara sesuatu objek disirikan:
package com.techteam.serialization;

import java.io.IOException;

public class SerializationMain {

    public static void main(String[] args) throws IOException {
        Person p = new Person();
        p.setId(1);
        p.setName("Tech team members");
        p.setAge(20);

        SerializeUtils.serialize(p, "/person.txt");
    }
}
Selepas proses bersiri kami mempunyai fail dengan kandungan berikut: Coffee break #180.  Pembolehubah dalam Java: apakah ia dan bagaimana ia digunakan.  5 Perkara Yang Anda Perlu Tahu Mengenai Pensirilan dan Penyahserikatan di Jawa - 2

#2 Penyahserikatan

Jika dalam contoh sebelumnya kita mencipta aliran bait dengan mensirikan objek, sekarang mari lihat bagaimana kita kembali ke objek menggunakan penyahserilan:
package com.techteam.serialization;

import java.io.IOException;

public class DeserializationMain {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Person p = SerializeUtils.deserialize("/person.txt");

        System.out.println("Person data:");
        System.out.println(p.getId());
        System.out.println(p.getName());
        System.out.println(p.getAge());
    }
}
Berikut ialah data selepas proses penyahserikatan: Coffee break #180.  Pembolehubah dalam Java: apakah ia dan bagaimana ia digunakan.  5 Perkara Yang Anda Perlu Tahu Mengenai Pensirilan dan Penyahserikatan di Jawa - 3

#3 Versi Bersiri UID

SerialVersionUID bermaksud nombor pengenalan unik untuk setiap versi proses bersiri dan penyahsirilan. Nombor ini digunakan untuk memastikan kedua-dua objek bersiri dan desiri menggunakan kelas yang serasi. Untuk Person.java, saya ingin meningkatkan serialVersionUID kepada 2. Mari lihat output selepas menyahsiri fail person.txt. Coffee break #180.  Pembolehubah dalam Java: apakah ia dan bagaimana ia digunakan.  5 Perkara Yang Anda Perlu Tahu Mengenai Pensirilan dan Penyahserikatan di Jawa - 4

#4 Kata Kunci Sementara

Semasa proses bersiri dan penyahserilan, kadangkala kita tidak perlu mensiri semua maklumat tentang objek. Dengan menggunakan proses sementara untuk pembolehubah, kita boleh mengabaikan pembolehubah tersebut daripada objek yang bersiri. Contoh di bawah akan membantu memahami perkara ini dengan lebih jelas:
package com.techteam.serialization;

import java.io.IOException;
import java.io.Serializable;

public class PersonWithTransient implements Serializable {

    private static final long serialVersionUID = 1L;

    private int id;
    private String name;
    private transient int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        PersonWithTransient p = new PersonWithTransient();
        p.setId(2);
        p.setName("Tech team members(transient)");
        p.setAge(50);

        SerializeUtils.serialize(p, "/person_transient.txt");

        PersonWithTransient deserializeP = SerializeUtils.deserialize("/person_transient.txt");
        System.out.println("Person without transient data:");
        System.out.println(deserializeP.getId());
        System.out.println(deserializeP.getName());
        System.out.println(deserializeP.getAge());
    }
}
Dalam kod di atas, kami telah menggunakan kata kunci sementara untuk pembolehubah umur . Dan inilah yang kami dapat selepas proses bersiri dan penyahserikatan.

#5 Antara Muka Boleh Luar

Di Java, apabila kita ingin menyesuaikan proses bersiri dan penyahserikatan, kita boleh menggunakan proses peralihan untuk mengabaikan pembolehubah yang kita tidak perlukan untuk proses bersiri dan penyahsirilan. Satu lagi cara untuk memudahkan dan meningkatkan prestasi ialah menggunakan antara muka Externalizable dan bukannya antara muka Serializable . Mari lihat contoh:
package com.techteam.serialization;

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;

public class PersonExternalizable implements Externalizable {
    private static final long serialVersionUID = 1L;
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeUTF(this.name);
        out.writeInt(this.age);
    }

    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        this.name = in.readUTF();
        this.age = in.readInt();
    }

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        PersonExternalizable p = new PersonExternalizable();
        p.setId(3);
        p.setName("Tech team members(Externalizable)");
        p.setAge(30);

        SerializeUtils.externalSeialize(p, "/person_externalizable.txt");

        PersonExternalizable deserializeP = new PersonExternalizable();
        SerializeUtils.externalDeseialize(deserializeP, "/person_externalizable.txt");
        System.out.println("Person data:");
        System.out.println(deserializeP.getId());
        System.out.println(deserializeP.getName());
        System.out.println(deserializeP.getAge());
    }
}
Seperti yang anda lihat, apabila menggunakan Externalizable , kami boleh menulis logik tersuai dengan mudah, mengabaikan pembolehubah dan mendapatkan prestasi yang lebih baik daripada menggunakan Serializable . Sekarang mari kita lihat output: Coffee break #180.  Pembolehubah dalam Java: apakah ia dan bagaimana ia digunakan.  5 Perkara Yang Anda Perlu Tahu Mengenai Pensirilan dan Penyahserikatan di Jawa - 5

Kesimpulan

Mudah-mudahan, melalui artikel ini, anda telah mendapat pemahaman yang jelas tentang cara bersiri dan penyahserikatan berfungsi di Jawa, dan contoh di atas boleh membantu anda dalam amalan pada masa hadapan.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION