Menu
CoddyTech

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: 2

Perhatikan 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.

challenge icon

Tantangan

Mudah

Mari 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
  • 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]

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()
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online