Pada bab-bab sebelumnya kita sering menggunakan System.out.println(), lalu apa itu?
println() adalah metode (Metode), dan Sistem adalah kelas sistem (Kelas), dan keluar adalah objek keluaran standar (Objek). Penggunaan kalimat ini adalah untuk memanggil metode println() pada objek keluaran standar di kelas sistem System.out.
Metode Java adalah kumpulan pernyataan yang bersama-sama menjalankan suatu fungsi.
Metode adalah kombinasi langkah-langkah yang terurut untuk memecahkan suatu jenis masalah
Metode yang terkandung dalam kelas atau objek
Metode dibuat dalam program dan dirujuk di tempat lain
Umumnya, mendefinisikan suatu metode mencakup sintaks berikut:
Pengubah nama metode tipe nilai kembalian (nama parameter tipe parameter) {
...
Metode tubuh...
mengembalikan nilai pengembalian;
}
Suatu metode berisi header metode dan isi metode. Berikut adalah semua bagian dari suatu metode:
Pengubah: Pengubah, yang bersifat opsional, memberi tahu kompiler cara memanggil metode. Mendefinisikan jenis akses untuk metode ini.
Jenis nilai yang dikembalikan: Metode dapat mengembalikan nilai. returnValueType adalah tipe data dari nilai pengembalian metode. Beberapa metode melakukan operasi yang diperlukan tetapi tidak mengembalikan nilai. Dalam hal ini, returnValueType adalah kata kunci void .
Nama metode: adalah nama sebenarnya dari metode tersebut. Nama metode dan daftar parameter bersama-sama membentuk tanda tangan metode.
Tipe parameter: Parameternya seperti placeholder. Saat metode dipanggil, nilai diteruskan ke parameter. Nilai ini disebut parameter atau variabel aktual. Daftar parameter mengacu pada jenis parameter, urutan dan jumlah parameter metode. Parameter bersifat opsional dan metode tidak boleh berisi parameter.
Badan metode: Badan metode berisi pernyataan spesifik yang mendefinisikan fungsi metode.
menyukai:
publicstaticintage(ulang tahun ke dalam){...}
Mungkin ada beberapa parameter:
staticfloatinterest(floatprincipal,intyear){...}
Catatan: Dalam beberapa bahasa lain, metode mengacu pada prosedur dan fungsi. Metode yang mengembalikan nilai kembalian yang tidak kosong disebut fungsi; metode yang mengembalikan nilai kembalian kosong disebut prosedur.
Metode di bawah ini berisi 2 parameter num1 dan num2 dan mengembalikan nilai maksimum dari kedua parameter tersebut.
/**Mengembalikan nilai yang lebih besar dari dua data variabel integer*/
publicstaticintmax(intnum1,intnum2){
penghinaan;
jika(angka1>angka2){
hasil=angka1;
}kalau tidak{
hasil=angka2;
}
hasil pengembalian;
}
Java mendukung dua cara memanggil metode, bergantung pada apakah metode tersebut mengembalikan suatu nilai.
Ketika suatu program memanggil suatu metode, kendali program ditransfer ke metode yang dipanggil. Kontrol dikembalikan ke program ketika pernyataan pengembalian metode yang dipanggil dijalankan atau tanda kurung tutup isi metode tercapai.
Ketika suatu metode mengembalikan suatu nilai, pemanggilan metode biasanya diperlakukan sebagai suatu nilai. Misalnya:
intlebih besar=maks(30,40);
Jika nilai pengembalian metode tidak berlaku, pemanggilan metode harus berupa pernyataan. Misalnya, metode println mengembalikan batal. Panggilan berikut adalah pernyataan:
System.out.println("Selamat Datang diJava!");
Contoh berikut menunjukkan cara mendefinisikan metode dan cara memanggilnya:
publicclassTestMax{
/**Metode utama*/
publicstaticvoidmain(String[]args){
inti=5;
intj=2;
intk=maks(i,j);
System.out.println("Jumlah maksimum antara"+i+
"dan"+j+"adalah"+k);
}
/**Mengembalikan nilai yang lebih besar dari dua variabel integer*/
publicstaticintmax(intnum1,intnum2){
penghinaan;
jika(angka1>angka2){
hasil=angka1;
}kalau tidak{
hasil=angka2;
}
hasil pengembalian;
}
}
Hasil kompilasi dan running dari contoh di atas adalah sebagai berikut:
Maksimum antara 5 dan 2 adalah 5
Program ini berisi metode utama dan metode maksimal. Metode Utama disebut dengan JVM. Selain itu, metode utama tidak berbeda dengan metode lainnya.
Kepala metode main tetap tidak berubah, seperti yang ditunjukkan dalam contoh, dengan pengubah publik dan statis, mengembalikan nilai tipe void, nama metode main, dan menggunakan parameter tipe String[]. String[] menunjukkan bahwa parameternya adalah array string.
Bagian ini menjelaskan cara mendeklarasikan dan memanggil metode void.
Contoh berikut mendeklarasikan metode bernama printGrade dan memanggilnya untuk mencetak nilai yang diberikan.
metode publicclassTestVoid{
publicstaticvoidmain(String[]args){
printGrade(78.5);
}
publicstaticvoidprintGrade(skor ganda){
jika(skor>=90,0){
Sistem.keluar.println('A');
}
elseif(skor>=80,0){
Sistem.keluar.println('B');
}
elseif(skor>=70,0){
Sistem.keluar.println('C');
}
elseif(skor>=60,0){
Sistem.keluar.println('D');
}
kalau tidak{
Sistem.keluar.println('F');
}
}
}
Hasil kompilasi dan running dari contoh di atas adalah sebagai berikut:
C
Metode printGrade di sini adalah metode tipe void dan tidak mengembalikan nilai.
Panggilan ke metode void harus berupa pernyataan. Oleh karena itu, disebut sebagai pernyataan pada baris ketiga metode utama. Sama seperti pernyataan apa pun yang diakhiri dengan titik koma.
Saat memanggil suatu metode, Anda perlu memberikan parameter, dan Anda harus menyediakannya dalam urutan yang ditentukan dalam daftar parameter.
Misalnya, metode berikut mencetak pesan sebanyak n kali berturut-turut:
publicstaticvoidnPrintln(Pesan string,intn){
untuk(inti=0;i<n;i++)
System.out.println(pesan);
}
Contoh berikut menunjukkan efek meneruskan nilai.
Program ini menciptakan metode yang menukar dua variabel.
publicclassTestPassByValue{
publicstaticvoidmain(String[]args){
intnum1=1;
intnum2=2;
System.out.println("Metode sebelum wap,angka1adalah"+
angka1+"danangka2adalah"+angka2);
//Panggil metode swap swap(num1,num2);
System.out.println("Metode Afterswap,num1is"+
angka1+"danangka2adalah"+angka2);
}
/**Metode pertukaran dua variabel*/
publicstaticvoidswap(intn1,intn2){
System.out.println("tDi dalam metode swap");
System.out.println("ttSebelum bertukarn1is"+n1
+"n2adalah"+n2);
//Tukarkan nilai n1 dan n2 inttemp=n1;
n1=n2;
n2=suhu;
System.out.println("ttAfterswappingn1is"+n1
+"n2adalah"+n2);
}
}
Hasil kompilasi dan running dari contoh di atas adalah sebagai berikut:
Sebelum metode swap,num1is1andnum2is2
Di dalam metode swap
Sebelum menukarn1is1n2is2
Setelah bertukarn1is2n2is1
Metode afterswap,num1is1andnum2is2
Panggil metode swap dengan meneruskan dua parameter. Menariknya, nilai parameter sebenarnya tidak berubah setelah metode dipanggil.
Metode max yang digunakan di atas hanya berlaku untuk data bertipe int. Namun bagaimana jika Anda ingin mendapatkan nilai maksimal dari dua tipe data floating point?
Solusinya adalah dengan membuat metode lain dengan nama yang sama tetapi parameternya berbeda, seperti yang ditunjukkan pada kode berikut:
publicstaticdoublemax(angka ganda1,angka ganda2){
jika(angka1>angka2){
nomor kembali1;
}kalau tidak{
nomor kembali2;
}
}
Jika Anda meneruskan parameter int saat memanggil metode max, metode max dari parameter int akan dipanggil;
Jika parameter double dilewatkan, isi metode max bertipe double akan dipanggil.
Artinya, dua metode dalam suatu kelas memiliki nama yang sama, tetapi daftar parameternya berbeda.
Kompiler Java menentukan metode mana yang harus dipanggil berdasarkan tanda tangan metode.
Metode kelebihan beban dapat membuat program menjadi lebih jelas dan mudah dibaca. Metode yang melakukan tugas yang berkaitan erat harus menggunakan nama yang sama.
Metode yang kelebihan beban harus memiliki daftar parameter yang berbeda. Anda tidak dapat membebani metode secara berlebihan hanya berdasarkan pengubah atau tipe kembalian.
Cakupan suatu variabel adalah bagian program yang menjadi acuan variabel tersebut.
Variabel yang didefinisikan dalam suatu metode disebut variabel lokal.
Cakupan variabel lokal dimulai dari deklarasinya dan berakhir di akhir blok yang memuatnya.
Variabel lokal harus dideklarasikan sebelum dapat digunakan.
Cakupan parameter suatu metode mencakup keseluruhan metode. Parameter sebenarnya adalah variabel lokal.
Variabel yang dideklarasikan di bagian inisialisasi perulangan for memiliki cakupan di seluruh perulangan.
Namun cakupan penerapan variabel yang dideklarasikan di badan perulangan adalah dari deklarasinya hingga akhir badan perulangan. Ini berisi deklarasi variabel seperti yang ditunjukkan di bawah ini:
Anda dapat mendeklarasikan variabel lokal dengan nama yang sama beberapa kali dalam suatu metode, di blok non-nested yang berbeda, namun Anda tidak dapat mendeklarasikan variabel lokal dua kali dalam blok nested.
Terkadang Anda ingin menyampaikan pesan ke suatu program saat sedang berjalan. Hal ini dicapai dengan meneruskan argumen baris perintah ke fungsi main().
Parameter baris perintah adalah informasi yang mengikuti nama program saat menjalankan program.
Program berikut mencetak semua argumen baris perintah:
publicclassCommandLine{
publicstaticvoidmain(Stringarg[]){
for(inti=0;i<args.panjang;i++){
Sistem.keluar.println("args ["+i+"]:"+args[i]);
}
}
}
Jalankan program seperti gambar di bawah ini:
javaCommandLineinisisacommandline200-100
Hasil yang berjalan adalah sebagai berikut:
args[0]: ini
argumen[1]:adalah
argumen[2]:a
argumen[3]:perintah
args[4]:baris
argumen[5]:200
argumen[6]:-100
Ketika sebuah objek dibuat, konstruktor digunakan untuk menginisialisasi objek tersebut. Konstruktor memiliki nama yang sama dengan kelasnya, tetapi konstruktor tidak memiliki nilai kembalian.
Konstruktor biasanya digunakan untuk menetapkan nilai awal ke variabel instan suatu kelas, atau untuk melakukan langkah-langkah lain yang diperlukan untuk membuat objek lengkap.
Terlepas dari apakah Anda mengkustomisasi konstruktor atau tidak, semua kelas memiliki konstruktor karena Java secara otomatis menyediakan konstruktor default yang menginisialisasi semua anggota ke 0.
Setelah Anda menentukan konstruktor Anda sendiri, konstruktor default menjadi tidak valid.
Berikut ini contoh penggunaan metode konstruktor:
//Konstruktor sederhana static classMyClass{
intx;
//Berikut ini adalah konstruktor MyClass(){
x=10;
}
}
Anda dapat menginisialisasi objek dengan memanggil konstruktor seperti ini:
publicclassConsDemo{
publicstaticvoidmain(Stringarg[]){
Kelas Sayat1=KelasSayabaru();
Kelas Sayat2=KelasSayabaru();
Sistem.keluar.println(t1.x+""+t2.x);
}
}
Seringkali diperlukan konstruktor dengan parameter.
Berikut ini contoh penggunaan metode konstruktor:
//Konstruktor sederhana classMyClass{
intx;
//Berikut ini konstruktor MyClass(inti){
x=saya;
}
}
Anda dapat menginisialisasi objek dengan memanggil konstruktor seperti ini:
publicclassConsDemo{
publicstaticvoidmain(Stringarg[]){
KelasSayat1=KelasSayabaru(10);
KelasSayat2=KelasSayabaru(20);
Sistem.keluar.println(t1.x+""+t2.x);
}
}
Hasil yang berjalan adalah sebagai berikut:
1020
Dimulai dengan JDK 1.5, Java mendukung penerusan parameter variabel bertipe sama ke suatu metode.
Deklarasi parameter variadik metode ini terlihat seperti ini:
typeName...parameterName
Dalam deklarasi metode, tambahkan elipsis (...) setelah menentukan tipe parameter.
Hanya satu parameter variabel yang dapat ditentukan dalam suatu metode, dan itu harus menjadi parameter terakhir dari metode tersebut. Parameter biasa apa pun harus dideklarasikan sebelumnya.
publicclassVarargsDemo{
publicstaticvoidmain(Stringarg[]){
//Panggil metode parameter variabel printMax(34,3,3,2,56.5);
printMax(ganda baru[]{1,2,3});
}
publicstaticvoidprintMax(ganda...angka){
if(angka.panjang==0){
System.out.println("Tidak ada argumen yang lolos");
kembali;
}
hasil ganda=angka[0];
for(inti=1;i<angka.panjang;i++)
if(angka[i]>hasil){
hasil=angka[i];
}
System.out.println("Nilai maksimal"+hasil);
}
}
Hasil kompilasi dan running dari contoh di atas adalah sebagai berikut:
Nilai maksimalnya adalah 56,5
Nilai maksimalnya adalah 3.0
Java mengizinkan definisi metode seperti itu, yang dipanggil sebelum objek dirusak (didaur ulang) oleh pengumpul sampah. Metode ini disebut finalize(), yang digunakan untuk membersihkan objek daur ulang.
Misalnya, Anda dapat menggunakan finalize() untuk memastikan bahwa file yang dibuka oleh suatu objek ditutup.
Dalam metode finalize(), Anda harus menentukan operasi yang akan dilakukan ketika objek dimusnahkan.
Format umum finalize() adalah:
dilindungivoidfinalisasi()
{
//Kode terminal di sini}
Kata kunci protected adalah qualifier yang memastikan bahwa metode finalize() tidak akan dipanggil oleh kode di luar kelas.
Tentu saja, daur ulang memori Java dapat diselesaikan secara otomatis oleh JVM. Jika Anda menggunakannya secara manual, Anda bisa menggunakan cara di atas.
Demo Finalisasi Kelas Publik{
publicstaticvoidmain(String[]args){
Kuec1=Kue baru(1);
Kuec2=Kue baru(2);
Kuec3=Kue baru(3);
c2=c3=batal;
System.gc();//Memanggil pengumpul sampah Java}
}
kelasCakeextendsObject{
rahasia pribadi;
kue publik(intid){
ini.id=id;
System.out.println("CakeObject"+id+"dibuat");
}
protectedvoidfinalize()throwsjava.lang.Throwable{
super.finalisasi();
System.out.println("CakeObject"+id+"dibuang");
}
}
Menjalankan kode di atas, hasil keluarannya adalah sebagai berikut:
C:1>JavaFinalisasiDemo
CakeObject1 telah dibuat
CakeObject2 telah dibuat
CakeObject3 telah dibuat
CakeObject3 dibuang
CakeObject2 dibuang