JavaRush /Java Blog /Random-ID /Rehat kopi #180. Variabel di Java: apa itu dan bagaimana ...

Rehat kopi #180. Variabel di Java: apa itu dan bagaimana penggunaannya. 5 Hal Yang Harus Anda Ketahui Tentang Serialisasi dan Deserialisasi di Java

Dipublikasikan di grup Random-ID

Variabel di Java: Apa itu dan bagaimana penggunaannya

Sumber: Hackernoon Ada empat tipe variabel berbeda di Java, bergantung di mana variabel tersebut dideklarasikan dalam program. Hari ini Anda akan mempelajari contoh dan perbedaan masing-masing jenis. Rehat kopi #180.  Variabel di Java: apa itu dan bagaimana penggunaannya.  5 Hal Yang Harus Anda Ketahui Tentang Serialisasi dan Deserialisasi di Java - 11. Variabel Instance atau Bidang Instance adalah variabel yang dideklarasikan di dalam kelas tanpa kata kunci statis , tetapi di luar metode, konstruktor, atau blok kode. Variabel tersebut dapat dideklarasikan dimana saja di dalam kelas. Anda dapat mendeklarasikannya dengan atau tanpa pengubah akses, seperti public , private , protected atau default (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 kolom instance tidak diberi nilai pada waktu deklarasi, maka kolom tersebut akan diberi nilai default nol jika tipenya primitif, misalnya ( int , boolean , long , float ), atau null jika bukan tipe primitif, seperti ( String , Integer , AnyClass ). Mereka disebut field atau variabel instan karena mereka termasuk dalam instance objek apa pun yang dibuat dari kelas di mana mereka dideklarasikan.
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'
  }
}
Jadi, setiap bidang instance unik untuk objeknya, seperti yang terlihat pada cuplikan di atas. Di dalamnya, obj1 dan obj2 memiliki nilai unik yang ditetapkan ke bidang instance masing-masing. 2. Bidang kelas atau bidang statis adalah bidang yang dideklarasikan dengan kata kunci statis . Mereka dideklarasikan di dalam kelas, tetapi di luar metode, konstruktor, atau blok kode. Mereka juga dapat dideklarasikan di posisi mana pun dalam kelas, dengan atau tanpa pengubah akses, seperti public , private , protected , atau default (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'
  }
}
Bidang statis hanya dapat diakses melalui kelasnya dan bukan dari objek apa pun seperti yang ditunjukkan pada cuplikan kode di atas. 3. Parameter atau variabel Argumen adalah variabel yang dideklarasikan di dalam suatu konstruksi metode antara kurung kurawal buka dan tutup tanda tangan metode. Mereka digunakan untuk meneruskan nilai atau objek ke suatu metode.
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. Variabel lokal adalah variabel yang dideklarasikan di dalam suatu metode atau blok kode apa pun, misalnya di dalam blok pernyataan if , perulangan for , perulangan while , blok pernyataan switch , dan seterusnya.
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 kode ini Anda dapat melihat penggunaan referensi dengan beberapa variabel, sedangkan variabel lokal id tidak disebutkan sebagai variabel referensi. Variabel non-primitif apa pun adalah variabel referensi. Misalnya, obj1 adalah variabel bertipe MyClass dan tempName adalah variabel bertipe String , dan di sini kedua tipe tersebut bukan tipe primitif. Dalam hal ini, id adalah variabel bertipe int , yang merupakan tipe data primitif. Oleh karena itu, ini adalah variabel non-referensi.

5 Hal Yang Harus Anda Ketahui Tentang Serialisasi dan Deserialisasi di Java

Sumber: Devgenius Dengan tutorial ini, Anda akan meningkatkan pengetahuan Anda tentang cara kerja serialisasi dan deserialisasi. Serialisasi di Java membantu mengubah objek yang ada menjadi aliran byte. Sebaliknya, deserialisasi membuat aliran byte menjadi objek. Menggunakan serialisasi dan deserialisasi di Java, informasi tentang objek dapat ditransfer dari satu JVM ke JVM lainnya.

Serialisasi #1

Sebelum masuk ke detailnya, mari kita lihat kelas SerializeUtils.java dan Person.java . Di sini mereka akan membantu kami melakukan serialisasi dan deserialisasi menggunakan contoh spesifik.

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();
    }
}

Orang.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 disebutkan, serialisasi membantu mengubah suatu objek menjadi aliran byte. Ini berarti bahwa semua informasi tentang objek juga diubah menjadi aliran byte, seperti metode, properti, dan data. Berikut adalah contoh bagaimana suatu objek diserialkan:
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");
    }
}
Setelah proses serialisasi kami memiliki file dengan konten berikut: Rehat kopi #180.  Variabel di Java: apa itu dan bagaimana penggunaannya.  5 Hal Yang Harus Anda Ketahui Tentang Serialisasi dan Deserialisasi di Java - 2

#2 Deserialisasi

Jika pada contoh sebelumnya kita membuat aliran byte dengan membuat serialisasi suatu objek, sekarang mari kita lihat bagaimana kita kembali ke objek tersebut menggunakan deserialisasi:
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 data setelah proses deserialisasi: Rehat kopi #180.  Variabel di Java: apa itu dan bagaimana penggunaannya.  5 Hal Yang Harus Anda Ketahui Tentang Serialisasi dan Deserialisasi di Java - 3

#3 UID Versi Serial

SerialVersionUID berarti nomor identifikasi unik untuk setiap versi proses serialisasi dan deserialisasi. Nomor ini digunakan untuk memastikan bahwa objek yang diserialisasi dan dideserialisasi menggunakan kelas yang kompatibel. Untuk Person.java, saya ingin meningkatkan serialVersionUID menjadi 2. Mari kita lihat output setelah deserializing file person.txt. Rehat kopi #180.  Variabel di Java: apa itu dan bagaimana penggunaannya.  5 Hal Yang Harus Anda Ketahui Tentang Serialisasi dan Deserialisasi di Java - 4

#4 Kata Kunci Sementara

Selama proses serialisasi dan deserialisasi, terkadang kita tidak perlu membuat serialisasi semua informasi tentang suatu objek. Dengan menggunakan proses sementara untuk variabel, kita dapat mengabaikan variabel tersebut dari objek yang sedang diserialkan. Contoh di bawah ini akan membantu memahami hal 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());
    }
}
Pada kode di atas, kami telah menggunakan kata kunci transient untuk variabel age . Dan inilah yang kami dapatkan setelah proses serialisasi dan deserialisasi.

#5 Antarmuka yang Dapat Dieksternalisasi

Di Java, ketika kita ingin menyesuaikan proses serialisasi dan deserialisasi, kita dapat menggunakan proses transisi untuk mengabaikan variabel yang tidak kita perlukan untuk proses serialisasi dan deserialisasi. Cara lain untuk menyederhanakan dan meningkatkan kinerja adalah dengan menggunakan antarmuka Externalizable daripada antarmuka Serializable . Mari kita lihat sebuah 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, saat menggunakan Externalizable kita dapat dengan mudah menulis logika khusus, mengabaikan variabel, dan mendapatkan kinerja yang lebih baik daripada menggunakan Serializable . Sekarang mari kita lihat hasilnya: Rehat kopi #180.  Variabel di Java: apa itu dan bagaimana penggunaannya.  5 Hal Yang Harus Anda Ketahui Tentang Serialisasi dan Deserialisasi di Java - 5

Kesimpulan

Semoga melalui artikel ini Anda mendapatkan pemahaman yang jelas tentang cara kerja serialisasi dan deserialisasi di Java, dan contoh di atas dapat membantu Anda dalam praktik di masa mendatang.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION