Skip to content

Static Field and Method

Info

Semua file yang ada pada contoh pada catatan ini ada pada package Ch4/J4_4_Static_Field_And_Method

Semua sample diatas yang ada pada catatan ini, semua method main menggunakan modifier static

public static void main (Stringp[] args){

}

Static Fields

Jika kita mendefinisikan field sebagai static, maka field tersebut tidak akan bisa diakses dari objek dari class yang bersangkutan. Karena static field tersebut dimiliki oleh class, bukan instance dari class tersebut.

Lanjutan dari class Employee, katakan setiap karyawan harus memiliki ID yang berbeda-beda dengan karyawan lainya. Katakan, kita tetapkan ID karyawan adalah nomor urut dari karyawan yang pertama menjadi anggota perusahaan tersebut dan seterusnya. Kita dapat memanfaatkan static field dimana field tersebut akan berbagi dengan instance objek dari class Employee sehingga kita dapat menaruh increment logic setiap objek Employee dibuat.

Code

package Ch4.J4_4_Static_Field_And_Method;

public class J_1_Static_Fields {
    public static void main(String[] args) {
        Employee[] employee = new Employee[5];

        employee[0] = new Employee("Farras");
        employee[1] = new Employee("Tania");
        employee[2] = new Employee("Faris");
        employee[3] = new Employee("Noah");
        employee[4] = new Employee("Hilyah");

        for (Employee data: employee){
            System.out.println(data);
            System.out.println("-----");
        }
    }
}

class Employee{
    private static int  id = 0;

    private int idKaryawan;
    private String name;
    public Employee(String name){
        // Increment id
        id++;
        this.idKaryawan = id;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Id \t\t: %d\nName \t: %s".formatted(this.idKaryawan, this.name);
    }
}
Output
Id      : 1
Name    : Farras
-----
Id      : 2
Name    : Tania
-----
Id      : 3
Name    : Faris
-----
Id      : 4
Name    : Noah
-----
Id      : 5
Name    : Hilyah
-----

Static Constant

Static Fields jarang ditemukan atau dipakai. Namun static constant lebih sering ditemukan. Sebagai contoh kita ingin membuat sebuah static field/properties yang nilainya tidak dapat di-reassign.

Code

package Ch4.J4_4_Static_Field_And_Method;

public class J_2_Static_Constant {
    public static void main(String[] args) {
        System.out.println(Math.PHI);
    }
}

class Math{
    public static final double PHI = 3.14;
}

Sebagaimana yang telah kita lihat pada catatan diatas, sangat tidak disarankan membuat filed sebagai public. Namun untuk Static Contant tidak mengapa, karena kita juga menetapkan modifier menjadi final dimana nilai field tersebut tidak akan bisa di ganti.

Static Method

Static method adalah method yang tidak dapat beroperasi pada sebuah Object, namun langsung pada classny. Contoh adalah operasi matematika yang ada pada class Math.

System.out.println(java.lang.Math.pow(4.0,5.0));
Gunakan static mehotd pada dua kondisi:

  1. Gunakan static method ketika kita tidak butuh akses ke properties dari objek karena semua yang dibutuhkan diambil dari paramater dari static metod.
  2. Ketika mtehod hanya membutuhkan akses ke static fields dari class.

Factory Method

Factory method adalah salah satu fungsi dari static method. Class seperti LocalDate dan NumberFormat menggunakan static facotry methods utuk membangun object. Pada catatan sebelumnya kita telah menggunakan factory method untuk membuat object LocalDate. Dibawah ini kita akan membuat class yang memiliki Factory Method untuk membuat object.

Code

package Ch4.J4_4_Static_Field_And_Method;

public class J_3_Factory_Method {
    public static void main(String[] args) {

        var logs = SystemMessage.forStand("This is log");

        var secondLogs = SystemMessage.forStandLower("This is log");

        System.out.println(logs.getSysLog());
        System.out.println(secondLogs.getSysLog());
    }
}

class SystemMessage{

    private String source;
    private String sysLog;

    private SystemMessage(String source, String message){
        this.sysLog = message;
        this.source = source;
    }
    public static SystemMessage forStand (String message){
        return new SystemMessage("From forStand()",message);
    }

    public static SystemMessage forStandLower(String message){
        return forStand(message.toLowerCase());
    }

    public String getSysLog() {
        return sysLog;
    }
}
Output
This is log
this is log