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.
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
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;
Date
yang merepresentasikan point in timeLocaleDate
, 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.
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.
Tentu kita juga dapat menyimpan objek kedalam variable
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.
Class LocaleDate
meng-enkasuplasi instance untuk maintain tanggal yang telah dipasang.
Source Code Standard Java Library
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
}
}
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);
}
}
}