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. 1. 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 {
private String instanceField1;
public MyClass(){}
public int anotherInstanceField2;
public void setInstanceField(String parameterVariable) {...}
boolean instanceField3;
public static void main(String[] args) {
System.out.println("field 1 value: " + instanceField1);
System.out.println("field 2 value: " + anotherInstanceField2);
System.out.println("field 3 value: " + instanceField3);
}
}
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();
obj1.anotherInstanceField2 = 11;
obj2.anotherInstanceField2 = 33;
System.out.println(obj1.anotherInstanceField2);
System.out.println(obj2.anotherInstanceField2);
}
}
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 {
public static String staticField;
public MyClass(){}
}
class Main {
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.staticField
MyClass.staticField = "I am a static field";
System.out.println(MyClass.staticField);
}
}
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 {
public String instanceField;
public MyClass(){}
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);
}
}
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();
int id = 1;
if (id > 1) {
String tempName = "Austin";
}
}
}
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:
#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:
#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.
#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:
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.
GO TO FULL VERSION