JavaRush /Blog Java /Random-MS /Kaedah dalam Java
articles
Tahap

Kaedah dalam Java

Diterbitkan dalam kumpulan
Kaedah dalam Java - 1Dalam Java, aplikasi terdiri daripada kelas. Kelas pula terdiri daripada pembolehubah. Mereka bertanggungjawab untuk menyimpan data dan kaedah yang bertanggungjawab untuk kelakuan kelas: dengan kata lain, logik yang boleh diberikannya (contohnya, memproses beberapa data, memanggil kaedah lain, dll.). Kita boleh bercakap tentang komponen seperti pembolehubah untuk masa yang lama, tetapi itu bukan sebabnya kita telah berkumpul hari ini. Mari kita bercakap dengan lebih baik tentang komponen kelas sedemikian sebagai kaedah. Kaedah dalam Java - 2Kaedah ialah blok kod bernama yang diisytiharkan dalam kelas. Ia mengandungi urutan tindakan (arahan) lengkap tertentu yang bertujuan untuk menyelesaikan masalah berasingan, yang boleh digunakan semula. Dalam erti kata lain, kaedah ialah fungsi: sesuatu yang boleh dilakukan oleh kelas anda. Bahasa lain juga mempunyai fungsi. Hanya di Jawa mereka adalah ahli kelas dan, menurut terminologi OOP, dipanggil kaedah. Tetapi sebelum kita meneruskan, mari kita lihat contoh kecil:
public String constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  System.out.println(resultSentence);
  return resultSentence;
}
Tiada apa-apa yang rumit di sini: kaedah Java yang tugasnya adalah untuk menjana rentetan ucapan dengan nama yang kami berikan kepadanya. Seperti contohnya - Hello world! My name is Bobby Mari kita fahami pembinaan kaedah dengan betul dengan melihat setiap kata kunci dalam pengisytiharan kaedah (dari kiri ke kanan). Kata kunci pertama kami ialah public, dan ia menandakan pengubah suai akses:

Pengubah suai akses

Mereka menunjukkan skop penglihatan yang dibenarkan untuk ahli kelas, iaitu, sekatan tempat di mana pembolehubah atau kaedah dibenarkan untuk digunakan. Kaedah dalam Java - 3Pengubah suai akses berikut digunakan dalam Java:
  • awam : awam. Kaedah atau medan dengan pengubah suai ini adalah awam, boleh dilihat oleh kelas lain (atau sebaliknya, kaedah dan medannya) daripada pakej semasa dan daripada pakej luaran. Ini ialah tahap capaian paling luas yang diketahui;

  • protected : kaedah atau pembolehubah dengan pengubah suai ini boleh diakses dari mana-mana sahaja dalam kelas atau pakej semasa, atau dalam kelas yang mewarisi yang ini, serta kaedah atau medan, walaupun ia berada dalam pakej lain

    protected String constructHelloSentence(String name) {...}
  • Pengubah suai lalai. Jika medan atau kaedah kelas tidak mempunyai pengubah, pengubah lalai digunakan. Dalam kes ini, medan atau kaedah kelihatan kepada semua kelas dalam pakej semasa (seperti protected , tetapi tanpa keterlihatan semasa mewarisi).

    String constructHelloSentence(String name) {...}
  • swasta : bertentangan dengan pengubah suai awam . Kaedah atau pembolehubah dengan pengubah suai sedemikian hanya tersedia dalam kelas di mana ia diisytiharkan.

    private String constructHelloSentence(String name) {...}
Seterusnya kita ada Stringdalam tandatangan kaedah (baris pertama kaedah yang menerangkan sifatnya).

Nilai pulangan

Nilai pulangan ialah data (sesetengah hasil daripada pelaksanaan kaedah) yang datang menggantikannya selepas panggilan. Setiap kaedah mempunyai nilai pulangan. Atau tidak?

Kaedah Nilai Pulangan

Nilai ini boleh menjadi sebarang jenis data: pembolehubah jenis mudah atau jenis rujukan. Dalam contoh ini, kami menunjukkan bahawa kaedah mesti mengembalikan objek jenis String, yang, seperti yang kita ingat, ialah kelas yang menerangkan rentetan. Perkara kedua di sini ialah perkataan return. Ia mempunyai hubungan langsung dengan nilai pulangan: nilai selepas ia akan dihantar semula ke tempat kaedah dipanggil, dan kaedah itu sendiri kemudiannya akan returnditutup. Perkataan ini biasanya muncul dalam baris terakhir kaedah (kecuali kaedah dengan pelbagai cabang seperti if, else...). Jika anda menulis kod pada baris seterusnya selepas return:
private String constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  return resultSentence;
  System.out.println(resultSentence);
}
maka kita akan mendapat kutukan dari pengkompil, yang tidak begitu baik (pengkompil tidak akan mengesyorkan yang bukan-bukan). Anda juga perlu ingat bahawa jenis data selepas сmesti sepadan dengan yang diisytiharkan dalam tandatangan kaedah. returnBaca lebih lanjut mengenai di sini .

batal

Untuk apa ia digunakan voiddi Jawa? Tidak semua kaedah mempunyai nilai pulangan. Sesetengah sama ada tidak mempunyai apa-apa atau tidak perlu memulangkan apa-apa. Apa yang perlu dilakukan kemudian? Kemudian dalam tandatangan kaedah kita tulis void. Bagaimanakah kaedah kami kelihatan tanpa nilai pulangan?
protected void constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  System.out.println(resultSentence);
}
Anda mungkin perasan bahawa bersama-sama dengan nilai pulangan, perkataan returnSo it is telah hilang, kerana kaedah kami tidak sepatutnya mengembalikan apa-apa. Walau bagaimanapun, ia boleh diletakkan di sini, tetapi tanpa sebarang makna, hanya return; dalam baris terakhir. Ini secara amnya tidak berguna, jadi voidia adalah pilihan dalam kaedah dengan. Walau bagaimanapun, ia boleh digunakan dengan berguna dalam voidkaedah, seperti cawangan atau gelung, di mana anda ingin keluar dari kaedah dengan segera. Seterusnya dalam pengisytiharan kaedah yang kami ada constructHelloSentence.

Nama kaedah

constructHelloSentence - nama kaedah, ciri tersendiri yang mana kita boleh membezakan satu atau kaedah lain. Dan, dengan itu, hubungi satu atau kaedah lain. Kaedah dalam Java - 4Nama kaedah mesti bermula dengan huruf kecil, tetapi juga menggunakan sarung unta (CamelCase, sarung unta): i.e. Setiap perkataan seterusnya dalam nama itu bersebelahan dengan yang sebelumnya dan ditulis dengan huruf besar. Nama kaedah harus menerangkan kaedah (komen terbaik ialah penamaan yang betul). Untuk melakukan ini, gunakan kata kerja atau gabungan dengan kata kerja: getCat, delete, createCar, dan seterusnya. Dalam satu kelas, nama kaedah mestilah unik (tidak mengira kaedah terlebih beban, yang akan kita bincangkan kemudian). Mari kita lihat lebih lanjut kaedah yang kita analisis dan lihat ( String name)

Parameter kaedah

Kaedah mungkin (atau mungkin tidak) mempunyai data tertentu yang akan datang dari luar, iaitu dari tempat kaedah itu dipanggil. Dalam kes kami, kami melihat bahawa objek jenis Stringdengan nama tiba namedan kemudian kami menggunakan pembolehubah ini dalam kaedah kami. Anda boleh menggunakan bilangan parameter yang tidak terhad dalam sesuatu kaedah, tetapi lebih daripada 7 tidak disyorkan. Apabila kita tidak mengetahui bilangan elemen yang tepat, tetapi semua elemen ini diperlukan untuk tujuan yang sama dan akan menjadi jenis yang sama (contohnya, String), elipsis digunakan:
public void constructHelloSentence(String...name) {
 ...
}
Rayuan kepada setiap elemen adalah seperti ini: name[0] Adakah ia mengingatkan anda tentang apa-apa? Betul, array! Tiada apa yang akan berubah jika kita menulis:
protected void constructHelloSentence(String[] name) {
 ...
}
Akses kepada elemen juga akan dalam bentuk: name[1] Dan satu lagi perkara. Hujah kaedah boleh menjadi muktamad :
public String constructHelloSentence(final String name) {
  ...
}
Ini bermakna bahawa rujukan nama terikat pada objek tertentu Stringdan tidak boleh ditindih. finalAnda boleh membaca tentang bekerja dengan pembolehubah rujukan dan interaksinya dengan perkataan terpelihara dalam bahan " Jenis Data Rujukan di Jawa ".

Kaedah Panggilan

Jadi, kami telah menyelesaikan penciptaan kaedah, sekarang mari kita bercakap tentang menggunakannya. Bagaimana untuk memanggil kaedah di Jawa? Kaedah dalam Java - 5Setiap kaedah dalam Java adalah dalam kelas. Untuk memahami cara kaedah panggilan dalam Java berfungsi, mari kita ambil kelas:
public class StringConstructor {
  public String constructHelloSentence(String name) {
     String resultSentence = "Hello world! My name is " + name;
     System.out.println(resultSentence);
     return resultSentence;
  }
}
Memandangkan kaedah kami tidak statik (ini adalah topik yang berasingan untuk perbincangan yang melangkaui skop artikel hari ini), untuk memanggilnya anda mesti mencipta objek dahulu dan kemudian memanggil kaedah padanya:
class Application{
  public static void main(String[] args) {
     StringConstructor stringConstructor = new StringConstructor();
     stringConstructor.constructHelloSentence("Den");
  }
}
Dalam hujah kaedah kami, kami lulus rentetan (nama) yang kami mahu lihat dalam rentetan yang terhasil dipaparkan pada skrin:

Hello world! My name is Den
Perlu diingat juga bahawa kaedah boleh digunakan semula seberapa banyak yang kita perlukan - tiada sekatan.

ini

Anda selalunya boleh melihat kata kunci dalam kod this, seperti dalam penetap:
public void setValue(Long value) {
   this.value = value;
}
Dan apakah maksudnya? thisdi Jawa, ini adalah rujukan kepada objek semasa kelas ini. Sebagai contoh, jika kita mencipta objek:
StringConstructor stringConstructor = new StringConstructor();
maka thisdi dalam objek stringConstructorakan ada pautan ke objek yang sama. thisdigunakan untuk merujuk kepada pembolehubah objek (seperti dalam penetap di atas) dan untuk memanggil beberapa kaedah. Kita boleh menulis semula kelas kita sedikit:
public class StringConstructor {

  public String constructHelloSentence(String name) {
     String resultSentence = this.getSentence()  + name;
     System.out.println(resultSentence);
     return resultSentence;
  }

  private String getSentence() {
     return "Hello world! My name is ";
  }
}
Melalui thiskami memanggil kaedah objek ini untuk mengambil rentetan yang diperlukan. Tetapi, sebagai peraturan, ini hampir tidak digunakan untuk kaedah, kerana walaupun tanpanya terdapat rujukan kepada kaedah objek tertentu; ia digunakan terutamanya untuk pembolehubah objek.

Kaedah terlebih beban

Katakan kita memerlukan kaedah yang pada dasarnya melakukan logik yang sama, tetapi dalam a Hello world! sebaliknya worldkita ingin memasukkan perkataan kita sendiri (tali). Tetapi kami sudah mempunyai kaedah constructHelloSentence. Jadi, adakah kita perlu menghasilkan nama baharu untuk kaedah yang pada asasnya melaksanakan fungsi yang sama? Tidak kira bagaimana keadaannya: pada masa ini kaedah lebihan beban membantu kami. Kaedah dalam Java - 7Kaedah terlebih beban ialah penggunaan nama kaedah yang sama lebih daripada sekali apabila mengisytiharkannya dalam kelas. Dari sudut pandangan sintaks bahasa, tidak boleh ada dua nama yang sama dalam sesetengah ruang tempatan. Tetapi ia juga mungkin untuk mengisytiharkan kaedah dengan nama yang sama tetapi hujah yang berbeza. Dalam erti kata lain, kelas mengandungi lebihan apabila terdapat dua atau lebih kaedah dengan nama yang sama tetapi data input yang berbeza:
public class Constructor {

  public String constructHelloSentence(String name) {
     String resultSentence = "Hello world! My name is " + name;
     System.out.println(resultSentence);
     return resultSentence;
  }

  protected String constructHelloSentence(String firstName, String secondName) {
     String resultSentence = "Hello " + firstName + "! My name is " + secondName;
     System.out.println(resultSentence);
     return resultSentence;
  }
}
Di sini kita melihat bahawa kaedah tidak perlu mengandungi pengubah akses yang sama (serta jenis pemulangan). Jika kaedah terlebih beban dipanggil, maka daripada beberapa kaedah yang diisytiharkan, pengkompil secara automatik menentukan yang diperlukan berdasarkan parameter yang ditentukan semasa panggilan.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION