Skip to content

Using Predefinedd Class

Info

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

Object and Object Variable

Untuk menggunakan objek, pertama kali kita harus meng construct objek dan mengisinya dengan parameter (jika ada). Setelah kita itu, kita dapat menggunakan method yang dimiliki oleh objek tersebut. Pada Java, kita menggunakan keyword new diikut dengan method constructor untuk membuat sebuah objek. Method constructor adalah special metod yang berguna untuk membangun objek dan menginisiasi properties pada class tersebut.

Constructor selalu memiliki nama yang sama dengan nama dari class. Misalnya, costructor dari class Date adalah Date . Dibawah ini adalah bagaimana kita meng- construct Date object menggunakan keyword new

new Date()

Dibawah ini adalah bagimana kita membuat sebuah variable objek yang menampung objek Date.

Date rightNow = new Date();

Gambar dibawah ini menggambarkan kondisi bagaimana object variable rightNow merujuk ke costructor objek.

Single obj

Ada hal penting yang membedakan antara objek dan object variable. Contohnya lihat snippet dibawah ini

Code

package Ch4.J4_2_Predefined_Class;

import java.util.Date;

public class J_1_Object_and_Variable_Object {
    public static void main(String[] args) {
        // Variable object doesn't reference yet
        Date thisTime;
        //System.out.println(date.toString()); //This line will error at compile time

        // Variable has reference to Date objek
        thisTime = new Date();
        System.out.println(thisTime.toString());
    }
}

variable thisTime merujuk ke objek dengan tipe Date. Namun variable tersebut bukanlah objek atau tidak (belum) merujuk ke objek #!Date. Kita tidak dapat menggunakan method dari Date menggunakan variable thisTime. Maka dari itu saat variable tersebut memanggil thisTime.toString() akan menyebabkan error saat compile.

Untuk itu, kita harus menginisiasi variable thisTime dengan construct objek yang baru thisTime = new Date();. Dengan begitu kita dapat menggunakan method toString() pada variable thisTime.

Hal penting yang harus diingat sebauh objek variable tidak sebenarnya mengandung sebuah objek, mereka hanya merujuk ke sebuah objek. Di Java, nilai dari sebuah object variable adalah sebuah rujukan pada sebauh objek yang disimpan ditempat lain.

Return value dari operator new juga sebuah rujukan. Statement Date startTime = new Date(); terdiri dari dua bagian. Ekspresi new Date() menghasilkan objek dengan tipe Date dan nilai tersebut akan merujuk ke objek tersebut. Rujukan tersebut selanjutnya akan disimpan pada variabel startTime.

Ketika kita menggunakan method pada variable objek yang kemungkinan belum merujuk ke objek apapun itu, kita dianjurkan untuk mengcheck terlebih dahulu apakah varible object tersebut null atau tidak.

Code

package Ch4.J4_2_Predefined_Class;

import java.util.Date;

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

        Date today = null;
        if(today != null){
            today.toInstant();
        }
    }
}

The localeDate Class of the Java Library

Objek date direpresentasikan menggunakan angka milliseconds (positif atau negatif), disebut juga dengan epoch, yang mana 00:00:00 UTC adalah 1 Januari 9170. UTC sendiri adalah the Coordinate Universal Time, standard waktu seperti GMT (Greenwich Mean Time). Class Date tidak terlalu berguna jika berurusan dengan menipulasi informasi tanggal kalender.

Pembuat java memisahkan keperluan keeping time dan attaching names to points in time. Dengan demikian Java library terdiri dari dua class yang terpisah;

  1. Date yang merepresentasikan point in time
  2. LocaleDate, mengeluarkan hari dan tanggal dalam bentuk kalender yang lebih familiar.

Umumnya, ide yang bagus dalam memisahkan class untuk mengekspresikan konsep yang berbeda.

Kita tidak perlu constructor untuk membuat objek dari class LocaleDate. Akan tetapi kita dapat menggunakan Factory Method yang memanggil constructor class tersebut dibelakangnya.

LocalDate.now();

Kode diatas membuat object baru dengan nilai tanggal saat objek tersebut dibuat. Kita juga dapat membuat sebuah objek dari class tersebut dengan memberikan parameter tanggal, bulan dan tahun.

LocalDate.of(1995,12,27);

Tentu kita juga dapat menyimpan objek kedalam variable

LocalDate myWeddingDate = LocalDate.of(2019,10,13);

Setelah kita membuat objek Locale Date, kita dapat mengambil tanggal, bulan dan tahun menggunakan method yang dimiliki objek tersebut.

int dayOfMyWedding = myWeddingDate.getDayOfMonth(); // 13
int monthOfMyWedding = myWeddingDate.getMonthValue(); // 10
int yearIfMyWedding = myWeddingDate.getYear(); // 2019

Dikatakan diawal fungsi dari LocaleDate adalah untuk memanipulasi tanggal, kita juga bisa menggunakan fungsi plusDays() untuk mendapatkan tanggal setelah ditambah jumlah hari tertentu.

LocalDate aThousandYearOfMyMarriage = myWeddingDate.plusDays(10000);

Class LocaleDate meng-enkasuplasi instance untuk maintain tanggal yang telah dipasang.

Source Code Standard Java Library

/**
 * The year.
 */
private final int year;
/**
 * The month-of-year.
 */
private final short month;
/**
 * The day-of-month.
 */
private final short day;

All code

package Ch4.J4_2_Predefined_Class;

import java.time.LocalDate;
import java.util.Date;

public class J_3_Locale_Date {
    public static void main(String[] args) {
        System.out.println(LocalDate.now());
        System.out.println(LocalDate.of(1995,12,27));

        LocalDate myWeddingDate = LocalDate.of(2019,10,13);
        int dayOfMyWedding = myWeddingDate.getDayOfMonth(); // 13
        int monthOfMyWedding = myWeddingDate.getMonthValue(); // 10
        int yearIfMyWedding = myWeddingDate.getYear(); // 2019
        System.out.printf("Tanggal pernihakan %d %d %d\n",dayOfMyWedding,monthOfMyWedding,yearIfMyWedding);

        LocalDate aThousandYearOfMyMarriage = myWeddingDate.plusDays(10000);


        Date depracetedDate = new Date();
        int yearRightNow = depracetedDate.getYear(); // deprecated
    }
}
Output
2023-08-17
1995-12-27
Tanggal pernihakan 13 10 2019
2047-02-28

Mutator and Accessor Method

Mutator method adalah sebuah method yang merubah (mutate) nilai dari object variable itu langsung. Sedangkan Accessor adalah sebuah method yang nilainya adalah objek baru, tanpa merubah nilai dari object variable itu. Contoh Accessor method adalah localeDate.plustDay() yang mana nilai kerluara objke tersetbu adalah object LocaleDate baru.

Dibawah ini saya membuat sebuah code untuk membuat calender. Tanggal hari ini kode dijalankan ditandai dengan asterik *.

Code

package Ch4.J4_2_Predefined_Class;

import java.time.LocalDate;
import java.util.Arrays;

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

        String[] daysName = {"Sen","Sel","Rab","Kam","Jum","Sab","Ahad"};
        LocalDate today = LocalDate.now()   ;
        LocalDate date = today.minusDays(today.getDayOfMonth()-1);
        LocalDate firstDate = date.minusDays(date.getDayOfYear());
        int month = date.getMonthValue();

        System.out.println(Arrays.toString(daysName));
        for (int i = 0 ; i < date.getDayOfWeek().getValue()-1; i ++) {
            System.out.printf("%4s","     ");
        }
            while(date.getMonthValue() == month){

                if (date.getDayOfWeek().getValue() == 6 || date.getDayOfWeek().getValue() == 7) {
                    System.out.printf("%4s", "x");
                }
                else {
                    System.out.printf("%4d", date.getDayOfMonth());
                }
                if (date.equals(today)){
                    System.out.print("*");
                }
                else {
                    System.out.print(" ");
                }
                if(date.getDayOfWeek().getValue()==7) System.out.println();
                date = date.plusDays(1);
            }
    }
}
Output
[Sen, Sel, Rab, Kam, Jum, Sab, Ahad]
        1    2    3    4    x    x 
   7    8    9   10   11    x    x 
  14   15   16   17   18*   x    x 
  21   22   23   24   25    x    x 
  28   29   30   31