Variabel Instance vs Statis
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 15 dari 87.
Sejauh ini, setiap field yang kita buat termasuk dalam object tertentu. Setiap BankAccount memiliki balance sendiri, dan setiap Product memiliki name sendiri. Ini adalah variabel instance, yang ada secara terpisah untuk setiap instance dari sebuah class.
Namun, bagaimana jika kamu membutuhkan data yang digunakan bersama oleh semua object? Di sinilah variabel statis (juga disebut variabel class) digunakan. Variabel statis dimiliki oleh class itu sendiri, bukan oleh object tertentu.
public class Student {
private String name; // Variabel instance, unik untuk setiap siswa
private static int totalCount; // Variabel statis, digunakan bersama oleh semua siswa
public Student(String name) {
this.name = name;
totalCount++; // Menambah nilai penghitung bersama
}
public static int getTotalCount() {
return totalCount;
}
}Saat kamu membuat beberapa siswa, masing-masing memiliki name sendiri, tetapi semuanya berbagi totalCount yang sama:
Student s1 = new Student("Alice");
Student s2 = new Student("Bob");
System.out.println(Student.getTotalCount()); // output: 2Perhatikan bahwa kita mengakses variabel statis melalui nama class (Student.getTotalCount()), bukan melalui object. Ini menegaskan bahwa anggota statis milik class, bukan milik instance.
Gunakan variabel instance untuk data yang berbeda antar-object, seperti nama siswa. Gunakan variabel static untuk data yang perlu dibagikan, seperti menghitung jumlah object yang ada.
Tantangan
MudahMari kita buat sistem inventaris Book yang melacak detail setiap buku dan jumlah total buku dalam seluruh koleksimu menggunakan variabel instance dan static.
Kamu akan membuat dua file untuk mengatur kodemu:
Book.java: Buat class Book yang melacak informasi setiap buku sekaligus menghitung semua buku yang pernah dibuat:- Variabel instance
title(String), unik untuk setiap buku - Variabel instance
price(double), unik untuk setiap buku - Variabel static
totalBooks(int), digunakan bersama oleh semua object Book untuk melacak jumlah buku yang telah dibuat - Sebuah constructor yang menerima title dan price, lalu menambah jumlah total buku
- Getter
getTitle()untuk title - Getter
getPrice()untuk price - Method static
getTotalBooks()yang mengembalikan jumlah total buku yang telah dibuat
- Variabel instance
Main.java: Buat beberapa object Book dan tunjukkan cara penghitung static melacak semua instance. Kamu akan menerima tiga judul buku dan tiga harga sebagai input. Setelah membuat ketiga buku, cetak empat baris:- Judul dan harga setiap buku dengan format:
[title]: $[price](harga diformat dengan 2 angka desimal) - Jumlah total buku menggunakan method static:
Total books: [count]
- Judul dan harga setiap buku dengan format:
Kamu akan menerima enam input secara berurutan: title1, price1, title2, price2, title3, price3.
Ingat untuk mengakses method static melalui nama class (Book.getTotalBooks()), bukan melalui instance object. Untuk memformat harga, gunakan String.format("%.2f", price).
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca input untuk tiga buku
String title1 = scanner.nextLine();
double price1 = Double.parseDouble(scanner.nextLine());
String title2 = scanner.nextLine();
double price2 = Double.parseDouble(scanner.nextLine());
String title3 = scanner.nextLine();
double price3 = Double.parseDouble(scanner.nextLine());
// TODO: Buat tiga object Book menggunakan input di atas
// TODO: Tampilkan judul dan harga setiap buku dalam format: [title]: $[price]
// Gunakan String.format("%.2f", price) untuk memformat harga menjadi 2 angka di belakang koma
// TODO: Tampilkan jumlah total buku menggunakan method statis
// Format: Total books: [count]
// Ingat, akses method statis melalui nama class: Book.getTotalBooks()
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online