1. Variabel statis

Ketika kelas dimuat ke dalam memori, objek statis segera dibuat. Objek ini menyimpan variabel kelas statis (bidang kelas statis). Objek statis ada bahkan jika tidak ada objek kelas biasa (non-statis) yang telah dibuat.

Ketika kita mendeklarasikan variabel dalam sebuah kelas, kita menunjukkan apakah mereka akan dibuat sekali saja, atau apakah harus ada instance yang berbeda dari variabel-variabel ini di setiap objek. Secara default, salinan baru dari setiap variabel dibuat untuk setiap objek.

Variabel statis terikat ke objek statis kelas dan selalu ada satu contoh darinya.

Untuk membuat variabel statis di kelas, Anda perlu menulis statickata kunci sebelum namanya. Format umum untuk mendeklarasikan variabel statis adalah:

static Type name = value;

Jika variabel statis tidak diberi nilai awal, itu diinisialisasi dengan nilai default:

Jenis Nilai default
byte
0
short
0
int
0
long
0
float
0.0
double
0.0
char
'\u0000'
(hal yang sama dengan
0
)
boolean
false
Object
dan kelas apapun
null

Contoh:

Kode Catatan
public static int WIDTH = 100;
public static String message = "Hello";
private static Scanner console;
private static int count = 0;
private static boolean flag;

Di dalam kelas, Anda bisa merujuk ke variabel statisnya hanya dengan menggunakan namanya. Tetapi untuk mengaksesnya dari kelas lain, Anda perlu menulis nama kelas sebelum nama variabel statis.

ClassName.variable

Contoh:

Variabel Kelas Mengakses variabel di luar kelasnya
public static int WIDTH = 100;
Solution
Solution.WIDTH
public static String message = "Hello";
Main
Main.message
private static Scanner console;
JavaGame
Variabelnya adalah private. Itu tidak terlihat di luar kelas.
private static int count = 0;
Counter
Variabelnya adalah private. Itu tidak terlihat di luar kelas.
private static boolean flag;
Arithmetic
Variabelnya adalah private. Itu tidak terlihat di luar kelas.


2. Perbedaan antara variabel statis dan non-statis

Variabel non-statis (biasa) dari suatu kelas dideklarasikan dengan cara yang sama seperti variabel statis, hanya saja tanpa kata statickunci.

Apa perbedaan antara variabel biasa dan variabel statis?

Variabel biasa dari suatu kelas terikat ke objek kelas (instance kelas), sedangkan variabel statis terikat ke objek statis kelas.

Jika ada beberapa instance kelas, masing-masing memiliki salinan variabel non-statis (biasa) sendiri. Variabel statis suatu kelas selalu disimpan dalam objek statisnya dan hanya ada satu contoh darinya.

Anda dapat mengakses variabel biasa (bidang) dari kelas hanya jika Anda memiliki referensi ke objek kelas. Dan di dalam metode kelas, tentu saja.

Contoh:

Mengakses bidang kelas menggunakan referensi objek
public class DataInfo
{
   public int value = 100;
}

public class Solution
{
   public static void main(String[] args)
   {
      DataInfo info = new DataInfo();
      System.out.println(info.value);
   }
}

Anda dapat mengakses variabel statis dari mana saja (setelah memperhitungkan pengubah visibilitas): dari metode biasa, dari metode statis dari kelas yang sama, dari metode kelas lain, dll.

Contoh:

Mengakses bidang statis kelas tanpa menggunakan referensi objek
public class DataInfo
{
   public static int value = 100;
}

public class Solution
{
   public static void main(String[] args)
   {
      System.out.println(DataInfo.value);
   }
}

Bagaimana memori diatur:

Katakanlah kita memiliki Personkelas dengan 4 bidang: dua statis dan dua tidak.

public class Person
{
   public static int count = 0;
   public static int sum = 0;
   public int age = 0;
   public String name;
}

Segera setelah memuat kelas

Saat mesin Java selesai memuat Personkelas, memori akan terlihat seperti ini:

Setelah membuat objek pertama

Jika kita membuat Personobjek, maka gambarnya menjadi seperti ini:

Perbedaan antara variabel statis dan non-statis 2

Harap dicatat bahwa meskipun kedua objek memiliki dua variabel, ini adalah variabel yang berbeda: objek biasa memiliki variabel biasa, dan objek statis memiliki variabel statis.

Kami membutuhkan lebih banyak objek

Mari buat dua Personobjek lagi. Sekarang memori akan terlihat seperti ini:

Perbedaan antara variabel statis dan non-statis 3

Harap dicatat bahwa setiap objek memiliki variabel umur dan nama sendiri.



3. Menghapus dan menambahkan staticpengubah

Dari statis menjadi biasa

Apa yang terjadi jika kita mengambil variabel statis dan mengubahnya menjadi variabel biasa dengan menghapus pengubahnya static? Misalnya static int sumvariabel.

Kode yang dimodifikasi akan terlihat seperti ini:

public class Person
{
   public static int count = 0;
   public int sum = 0;
   public int age = 0;
   public String name;
}

Sekarang memori terlihat seperti ini:

Perbedaan antara variabel statis dan non-statis

Variabel statis menghilang dari objek statis, dan sekarang setiap objek biasa memiliki variabelnya sendiri sum.

Dari biasa menjadi statis

Kita bisa melakukan sebaliknya: tambahkan staticpengubah ke variabel biasa dari sebuah kelas. Mereka akan menghilang dari semua objek biasa dan akan muncul di objek statis. Misalkan kita memutuskan untuk membuat variabel agedan namestatis. Maka kode akan terlihat seperti ini:

public class Person
{
   public static int count = 0;
   public int sum = 0;
   public static int age = 0;
   public static String name;
}

Dan sekarang memori akan terlihat seperti ini:

Menghapus dan menambahkan pengubah statis