CodeGym /Blog Jawa /Acak /Deklarasi metode
John Squirrels
tingkat
San Francisco

Deklarasi metode

Diterbitake ing grup
Hi! Sampeyan wis ngerti babagan nggawe kelas sampeyan dhewe kanthi lapangan lan metode. Saiki kita bakal ngomong babagan metode.
Cara deklarasi - 1
Mesthine, kita wis nindakake iki luwih saka sepisan ing pawulangan, nanging kita utamane wis ngrembug babagan umum. Dina iki, kita bakal mbedakake metode, lan nyinaoni apa sing digawe, macem-macem cara nggawe, lan carane ngatur kabeh. :) Ayo!

Deklarasi metode

Kabeh kode sing nemtokake cara diarani deklarasi metode . Bentuk umum saka deklarasi metode bisa diterangake kaya ing ngisor iki:

access modifier, return type, method name (parameter list) {
    // method body
}
Minangka conto, deleng pranyatan saka macem-macem cara kelas Dog.

public class Dog {

   String name;

   public Dog(String name) {
       this.name = name;
   }

   public static void main(String[] args) {
       Dog max = new Dog("Max");
       max.woof();

   }

   public void woof() {
       System.out.println("A dog named " + name + " says \"Woof, woof!\"");
   }

   public void run(int distanceInFeet) {
       System.out.println("A dog named " + name + " ran " + distanceInFeet + " feet!");
   }

   public String getName() {
       return name;
   }
}

1. Akses modifier

Modifier akses tansah dituduhake dhisik. Kabeh Dogcara kelas ditandhani karo modifier umum . Iki tegese kita bisa nelpon saka kelas liyane:

public class Main {

   public static void main(String[] args) {

       Dog butch = new Dog("Butch");
       butch.run(100);
   }

}
Kaya sing sampeyan ngerteni, Dogmetode kelas gampang diakses ing Mainkelas. Iki bisa amarga modifier umum . Ing Jawa, ana modifikasi liyane. Dheweke ora kabeh ngidini cara digunakake ing kelas liyane. Kita bakal ngomong babagan iki ing pelajaran liyane. Wangsulan: Bab ingkang utama kanggo elinga iku tanggung jawab kanggo modifier: apa cara bisa diakses ing kelas liyane :)

2. tembung kunci statis

Salah siji Dogcara, main(), ditandhani karo tembung kunci statis . Iki uga minangka bagean saka deklarasi metode, lan kita wis ngerti maknane. Kita ora nyebutake ing cithakan deklarasi metode sing diwenehake ing wiwitan pawulangan, amarga iku opsional. Yen wis ditemtokake, banjur kudu teka sawise modifier akses. Elinga yen ing pawulangan anyar kita ngomong babagan variabel statis (kelas)? Nalika ditrapake ing metode, tembung kunci iki nduweni makna sing padha. Yen cara iku statis , banjur bisa digunakake tanpa referensi kanggo obyek tartamtu saka kelas. Lan tenan, sampeyan ora perlu Dogobyek kanggo mbukak main()cara statis ingDogkelas. Bakal mlaku kanthi apik tanpa siji. Yen cara iki ora statis, mula kita kudu nggawe obyek kanggo mbukak.

3. Nilai bali

Yen cara kita kudu ngasilake soko, banjur kita nemtokake jinis nilai bali. Iki katon saka conto getter getName():

public String getName() {
   return name;
}
Iku ngasilake Stringobyek. Yen cara ora ngasilake apa-apa, banjur tembung kunci ora bisa digunakake, kaya ing woof()metode:

public void woof() {
   System.out.println("A dog named " + name + " says \"Woof, woof!\"");
}

Metode kanthi jeneng sing padha

Ana kahanan nalika kita pengin sawetara cara kanggo nelpon cara. Napa ora nggawe intelijen buatan dhewe? Amazon duwe Alexa, Apple duwe Siri, mula kenapa ora duwe? :) Ing film Iron Man, Tony Stark nggawe intelijen buatan sing luar biasa, Jarvis. Ayo menehi penghormatan marang karakter sing apik tenan lan jenenge AI kita kanggo ngurmati. :) Kaping pisanan, kita kudu ngajari Jarvis ngucapake salam marang wong-wong sing mlebu kamar (aneh yen akal sing luar biasa kasebut ora sopan).

public class Jarvis {

   public void sayHi(String name) {
       System.out.println("Good evening, " + name + ". How are you?");
   }

   public static void main(String[] args) {
       Jarvis jarvis = new Jarvis();
       jarvis.sayHi("Tony Stark");
   }
}
Output konsol: Sugeng sonten, Tony Stark. Piye kabare? Apik tenan! Jarvis saiki bisa nampa tamu. Mesthi, luwih kerep tinimbang sing bakal dadi mastere, Tony Stark. Nanging kepiye yen dheweke ora teka dhewe! Nanging sayHi()cara kita mung nampa siji argumen. Dadi mung bisa menehi salam marang wong siji sing mlebu kamar, lan ora nglirwakake liyane. Ora sopan banget, setuju? :/ Ing kasus iki, kita bisa ngatasi masalah kanthi nulis 2 cara kanthi jeneng sing padha, nanging beda paramèter:

public class Jarvis {

   public void sayHi(String firstGuest) {
       System.out.println("Good evening, " + firstGuest + ". How are you?");
   }

   public void sayHi(String firstGuest, String secondGuest) {
       System.out.println("Good evening, " + firstGuest + " and " + secondGuest + ". How are you?");
   }

}
Iki diarani metode overloading . Metode overloading ngidini program kita dadi luwih fleksibel lan nampung macem-macem cara kerja. Ayo dideleng cara kerjane:

public class Jarvis {

   public void sayHi(String firstGuest) {
       System.out.println("Good evening, " + firstGuest + ". How are you?");
   }

   public void sayHi(String firstGuest, String secondGuest) {
       System.out.println("Good evening, " + firstGuest + " and " + secondGuest + ". How are you?");
   }

   public static void main(String[] args) {
       Jarvis jarvis = new Jarvis();
       jarvis.sayHi("Tony Stark");
       jarvis.sayHi("Tony Stark", "Captain America");
   }
}
Output konsol: Sugeng sonten, Tony Stark. Piye kabare? Sugeng sonten, Tony Stark lan Kapten Amerika. Piye kabare? Banget, loro versi makarya. :) Nanging kita ora ngrampungake masalah! Apa yen ana tamu telu? Kita bisa, mesthi, overload sayHi()cara maneh, supaya nampa telung jeneng tamu. Nanging bisa uga ana 4 utawa 5. Kabeh cara kanggo tanpa wates. Apa ora ana cara sing luwih apik kanggo mulang Jarvis kanggo nangani sembarang nomer jeneng, tanpa overloading cara sayHi()yuta kaping ()? :/ Mesthi ana! Yen ora ana, apa sampeyan mikir Jawa bakal dadi basa pemrograman sing paling populer ing donya? ;)

public class Jarvis {

   public void sayHi(String...names) {

       for (String name: names) {
           System.out.println("Good evening, " + name + ". How are you?");
       }
   }

   public static void main(String[] args) {
       Jarvis jarvis = new Jarvis();
       jarvis.sayHi("Tony Stark");
       System.out.println();
       jarvis.sayHi("Tony Stark", "Captain America");
   }
}
Nalika ( String... names ) digunakake minangka parameter, nuduhake yen koleksi Strings bakal diterusake menyang metode kasebut. Kita ora kudu nemtokake luwih dhisik jumlah sing bakal ana, mula saiki cara kita luwih fleksibel:

public class Jarvis {

   public void sayHi(String...names) {

       for (String name: names) {
           System.out.println("Good evening, " + name + ". How are you?");
       }
   }

   public static void main(String[] args) {
       Jarvis jarvis = new Jarvis();
       jarvis.sayHi("Tony Stark", "Captain America", "Black Widow", "Hulk");
   }
}
Output konsol: Sugeng sonten, Tony Stark. Piye kabare? Sugeng sonten, Kapten Amerika. Piye kabare? Sugeng sonten, Randha Ireng. Piye kabare? Sugeng sonten, Hulk. Piye kabare? Ing cara kasebut, kita ngulang kabeh argumen lan nampilake frase sing diformat nganggo jeneng. Ing kene kita nggunakake for-eachloop sing disederhanakake (sing wis sampeyan deleng sadurunge). Iku sampurna ing kene, amarga notasi ( String... names ) bener-bener tegese compiler nglebokake kabeh argumen sing dilewati menyang array. Akibaté, kita bisa nggarap jeneng variabelminangka kita bakal bisa karo Uploaded, kalebu dening iterasi liwat ing daur ulang. Kajaba iku, bakal bisa digunakake karo senar sing dilewati! Loro, sepuluh, malah sewu-carane bakal bisa digunakake kanthi bener karo nomer tamu. Cara luwih trep tinimbang overloading metode kanggo kabeh kemungkinan, apa sampeyan mikir? :) Punika conto liyane saka overloading cara. Ayo menehi Jarvis printInfoFromDatabase()cara. Bakal nampilake informasi babagan wong saka database. Yen basis data nuduhake yen wong iku superhero utawa supervillain, kita bakal nampilake informasi kasebut:

public class Jarvis {

   public void printInfoFromDatabase (String bio) {

       System.out.println(bio);
   }

   public void printInfoFromDatabase(String bio, boolean isEvil, String nickname) {

       System.out.println(bio);
       if (!isEvil) {
           System.out.println("Also known as the superhero " + nickname);
       } else {
           System.out.println("Also known as the supervillain " + nickname);
       }
   }

   public static void main(String[] args) {
       Jarvis jarvis = new Jarvis();
       jarvis.printInfoFromDatabase("Laura Palmer. Date of birth: July 22, 1972. Twin Peaks, Washington");
       System.out.println();
       jarvis.printInfoFromDatabase("Max Eisenhardt. Height: 15.6 ft. Weight: 189 lbs. ", true, "Magneto");
   }
}
Output: Laura Palmer. Tanggal lair: 22 Juli 1972. Twin Peaks, Washington Max Eisenhardt. Dhuwur: 15,6 ft Bobot: 189 lbs. Uga dikenal minangka supervillain Magneto Dadi, prilaku cara kita gumantung ing data sing kita pass menyang. Mangkene titik penting liyane: urutan argumentasi penting! Dadi cara kita njupuk String lan nomer:

public class Person {

   public static void sayYourAge(String greeting, int age) {
       System.out.println(greeting + " " + age);
   }

   public static void main(String[] args) {

       sayYourAge("My age is ", 33);
       sayYourAge(33, "My age is "); // Error!
   }
}
Yen metode Personkelas sayYourAge()njupuk senar lan nomer minangka input, mula iki urutan argumen kasebut kudu diterusake menyang metode kasebut! Yen kita ngliwati urutan sing beda, kompiler bakal ngasilake kesalahan lan wong kasebut ora bisa ngomong umure. Miturut cara, konstruktor, sing kita bahas ing wulangan pungkasan, uga cara! Sampeyan uga bisa kakehan (yaiku nggawe sawetara konstruktor kanthi set paramèter sing beda) lan urutan argumen sing dilewati uga penting banget kanggo wong-wong mau. Iku cara nyata! :)

Cara ngundang metode kanthi paramèter sing padha

Kaya sing wis dingerteni, nullyaiku tembung kunci ing basa Jawa. Penting banget kanggo ngerti manawa nulldudu obyek utawa jinis data . Mbayangno yen kita duwe Personkelas lan introduce()metode, sing ngumumake jeneng lan umur wong kasebut. Salajengipun, umur bisa liwati minangka teks utawa nomer.

public class Person {

   public void introduce(String name, String age) {
       System.out.println("My name is " + name + ". My age is " + age);
   }

   public void introduce(String name, Integer age) {
       System.out.println("My name is " + name + ". My age is " + age);
   }

   public static void main(String[] args) {

       Person alex = new Person();
       alex.introduce ("Alex", "twenty-one");

       Person mary = new Person();
       mary.introduce("Mary", 32);
   }
}
Kita wis kenal karo overloading, mula kita ngerti manawa cara loro kasebut bakal ditindakake: Jenengku Alex. Umurku rong puluh siji jenengku Mary. umurku 32 Nanging apa bakal kelakon yen kita pass nullminangka parameter kapindho tinimbang senar utawa nomer?

public static void main(String[] args) {

   Person victor = new Person();
   victor.introduce("Victor", null);// Ambiguous method call!
}
Kita bakal entuk kesalahan kompilasi! Apa sing nyebabake iki lan apa persis "ambiguitas"? Nyatane, kabeh iku prasaja banget. Masalahe yaiku kita duwe rong versi metode: siji karo Stringargumen kapindho, lan siji Integerminangka argumen kapindho. Nanging a Stringlan Integerbisa loro-lorone null! Amarga padha jinis referensi, nullpunika Nilai standar kanggo loro mau. Mulane ing kahanan iki compiler ora bisa ngerti versi cara sing kudu diarani. Solusi kanggo masalah iki cukup prasaja. Nullbisa kanthi tegas diowahi dadi jinis referensi tartamtu. Mangkono, nalika sampeyan nelpon cara, sampeyan bisa nunjukake ing kurung jinis data sing dikarepake kanggo argumen kapindho! Compiler bakal ngerti "pitunjuk" sampeyan lan bakal nelpon cara sing bener:

public class Person {

   public void introduce(String name, String age) {
       System.out.println("Method with two strings!");
       System.out.println("My name is " + name + ". My age is " + age);
   }

   public void introduce(String name, Integer age) {
       System.out.println("Method with a string and a number!");
       System.out.println("My name is " + name + ". My age is " + age);
   }

   public static void main(String[] args) {

       Person victor = new Person();
       victor.introduce("Victor", (String) null);
   }
}
Output: Metode kanthi rong senar! Jenengku Victor. Umurku null Elinga yen parameter nomer primitif int, tinimbang conto saka jinis referensi Integer, ora ana kesalahan kuwi.

public class Person {

   public void introduce(String name, String age) {
       System.out.println("Method with two strings!");
       System.out.println("My name is " + name + ". My age is " + age);
   }

   public void introduce(String name, int age) {
       System.out.println("Method with a string and a number!!");
       System.out.println("My name is " + name + ". My age is " + age);
   }

   public static void main(String[] args) {

       Person victor = new Person();
       victor.introduce("Victor", null);
   }
}
Sampeyan bisa guess apa? Yen sampeyan ngira-ngira kenapa, apik! :) Amarga primitif ora bisa null. Saiki kompiler mung duwe siji pilihan, yaiku nelpon introduce()metode kanthi rong senar. Iki minangka versi metode sing bakal ditindakake saben metode kasebut diarani.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION