Coretan kuliah dengan mentor sebagai sebahagian daripada kursus Universiti Codegym. Daftar untuk kursus penuh.


"Salam, Amigo! Saya dengar awak sudah faham kaedah?"

"Hai, Rishi. Ya, saya telah memotong cara saya melalui helah guru itu. Saya akan mengatakan bahawa ia tidak begitu teruk, tetapi anda akan memberitahu saya, 'Tidak, tidak! Anda tidak mengetahui apa-apa. '"

"Anda jelas telah menghabiskan terlalu banyak masa berbual dengan guru tertentu, mungkin dengan Diego. Bagaimanapun... Saya masih berharap anda memahami kaedah dengan cukup baik. Lagipun, hari ini saya akan mengajar anda beberapa perkataan ajaib yang membantu menggambarkan kaedah. ' sfera pengaruh."

"Kedengarannya menarik."

"Malah, semuanya mudah. ​​Sebelum setiap kaedah, pengaturcara boleh menentukan apa yang dipanggil pengubah akses. Ini termasuk kata kunci berikut: public, protected, private.

"Pengubah suai akses ini membenarkan anda menyekat akses kelas lain kepada kaedah.

"Sebagai contoh, jika anda menulis privatekata kunci sebelum pengisytiharan kaedah, maka kaedah itu hanya boleh dipanggil dari kelas yang sama di mana ia diisytiharkan. Kata kunci publicmembenarkan akses kepada kaedah yang ditanda daripada mana-mana kaedah mana-mana kelas.

Terdapat sejumlah 3 pengubah sedemikian, tetapi terdapat 4 jenis akses kepada kaedah. Ini kerana ketiadaan pengubah akses juga bermakna sesuatu. Berikut ialah jadual lengkap:

Akses daripada...
Pengubah suai Mana-mana kelas Kelas kanak-kanak Pakejnya Kelasnya
public ya ya ya ya
protected Tidak ya ya ya
tiada pengubahsuai Tidak Tidak ya ya
private Tidak Tidak Tidak ya

"Dan berikut ialah penjelasan lengkap tentang pengubah suai akses:

1. publicpengubahsuai

Kaedah (atau pembolehubah, atau kelas) yang ditandakan dengan publicpengubah suai boleh diakses dari mana-mana sahaja dalam program . Ini adalah tahap keterbukaan tertinggi — tiada sekatan.

2. privatepengubahsuai

Kaedah (atau pembolehubah, atau kelas) yang ditandakan dengan privatepengubah suai hanya boleh diakses daripada kelas yang sama di mana ia diisytiharkan . Untuk semua kelas lain, kaedah yang ditandakan (atau pembolehubah) tidak kelihatan. Seolah-olah ia tidak wujud. Ini adalah tahap sekatan tertinggi — hanya kelasnya sendiri.

3. Tiada pengubah (ubah suai lalai)

Jika kaedah (atau pembolehubah) tidak ditandakan dengan mana-mana pengubah, maka ia dianggap mempunyai 'pengubah suai lalai'. Pembolehubah atau kaedah dengan pengubah itu (iaitu dengan tiada langsung) kelihatan kepada semua kelas dalam pakej di mana ia diisytiharkan . Dan hanya kepada mereka. Pengubah suai ini juga kadangkala dipanggil package-private, membayangkan bahawa akses kepada pembolehubah dan kaedah terbuka kepada keseluruhan pakej di mana kelas mereka berada.

4. protectedpengubahsuai

Jika kaedah ditandakan dengan protectedpengubah suai, maka ia boleh diakses daripada kelas yang sama, pakej yang sama dan keturunan (kelas yang mewarisi kelas di mana kaedah itu diisytiharkan). Kami akan menganalisis topik ini dengan lebih terperinci dalam pencarian Java Core."

"Menarik, tetapi saya tidak pasti sama ada saya boleh segera meletakkan pengubah suai ini di semua tempat yang betul.

"Anda akan tiba di sana secara beransur-ansur. Tidak perlu risau lebih awal. Sehingga anda mencapai penghujung pencarian Java Syntax, anda boleh menggunakan pengubah suai publicpada semua kaedah anda (serta kelas dan pembolehubah contoh). Anda memerlukan pengubah suai lain apabila kita mula belajar secara aktif OOP."

"Bolehkah anda menerangkan dengan lebih terperinci mengapa pengubah suai akses diperlukan?"

"Mereka menjadi perlu untuk projek besar yang ditulis oleh puluhan dan ratusan pengaturcara pada masa yang sama.

"Kadang-kadang terdapat situasi apabila pengaturcara ingin membahagikan kaedah yang terlalu besar kepada bahagian dan memindahkan sebahagian kod ke kaedah pembantu. Tetapi pada masa yang sama, dia tidak mahu pengaturcara lain memanggil kaedah pembantu ini, kerana kod yang sepadan mungkin tidak berfungsi dengan betul."

"Jadi mereka menghasilkan pengubah suai akses ini. Jika anda menandakan kaedah pembantu dengan perkataan persendirian , maka tiada kod selain daripada kelas anda boleh melihat kaedah pembantu anda."

"Saya fikir saya faham."

statickata kunci

"Terdapat satu lagi kata kunci yang menarik. Ia adalah static. Tidak mengejutkan, ia menjadikan kaedah statik."

"Apa maksudnya?"

"Saya akan memberitahu anda lebih lanjut mengenainya kemudian. Jangan risau. Buat masa ini, cuba ingat beberapa fakta mengenai kaedah statik.

Fakta 1. Kaedah statik tidak dilampirkan pada mana-mana objek, sebaliknya tergolong dalam kelas di mana ia diisytiharkan. Untuk memanggil kaedah statik, anda perlu menulis:

ClassName.MethodName()

Contoh kaedah statik:

Nama kelas Nama kaedah statik
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

Nama kelas sebelum nama kaedah statik boleh ditinggalkan jika anda memanggil kaedah statik dari dalam kelasnya. Inilah sebabnya mengapa anda tidak perlu menulis Solutionsebelum nama setiap kaedah statik yang dipanggil.

Fakta 2. Kaedah statik tidak boleh mengakses kaedah bukan statik kelasnya sendiri. Kaedah statik hanya boleh mengakses kaedah statik. Akibatnya, kami mengisytiharkan semua kaedah yang kami mahu panggil daripada mainkaedah statik."

"Kenapa begitu?"

"Anda akan menjawab sendiri soalan ini apabila anda mula belajar OOP dan memahami cara kaedah statik berfungsi. Sehingga itu, hanya percaya kepada saya.

throwskata kunci

"Terdapat kata kunci lain yang mungkin anda lihat dalam pengisytiharan kaedah — throwskata kunci. Tidak seperti pengubah suai akses dan statickata kunci, kata kunci ini diletakkan selepas parameter kaedah:

public static Type name(parameters) throws Exception
{
  method body
}

"Dan apa maksudnya?"

"Sekali lagi saya perlu memberitahu anda bahawa anda akan mengetahui tujuan sebenarnya nanti, apabila kita mengkaji pengecualian (dalam Tahap 15).

Tetapi untuk menyentuhnya secara cetek, kita boleh mengatakan bahawa kaedah yang ditandakan dengan throwskata kunci boleh membuang ralat (pengecualian), yang bermaksud contoh kelas Exception(dan kelas yang mewarisinya). Jika beberapa jenis ralat yang berbeza boleh berlaku dalam kelas, maka anda perlu menyenaraikan setiap ralat yang dipisahkan dengan koma."

"Kedengaran misteri dan tidak dapat difahami! Saya perlu menunggu Tahap 14."

kaedah utama

"Mari kita lihat dengan lebih dekat kaedah utama. Anda sudah faham bahawa baris di mana kaedah diisytiharkan, yang mengandungi semua pengubah, akan mempengaruhi cara kaedah ini dipanggil dari kelas dan kaedah lain. Selain itu, ia mempengaruhi jenis hasilnya kaedah akan kembali dan menunjukkan ralat yang mungkin berlaku semasa ia dijalankan.

"Barisan sedemikian dipanggil pengisytiharan kaedah dan mempunyai format umum berikut:

access modifier static Type name(parameters) throws exceptions
Format umum pengisytiharan kaedah

Di mana access modifiersdigantikan dengan public, protected, private, atau tiada langsung;

jika kaedah itu statik, maka statickata kunci itu muncul (ia tiada untuk kaedah bukan statik)

Typeialah jenis nilai pulangan ( voidjika tiada hasil)

"Sekarang anda mempunyai pemahaman yang lebih baik tentang maksud semua perkataan ini dalam pengisytiharan kaedah main:

public static void main(String[] args) throws Exception
Mengisytiharkan mainkaedah

"Nah, sekarang saya menyedari bahawa akses kepada main()kaedah itu boleh dilakukan dari mana-mana kelas, seperti yang ditunjukkan oleh publickata kunci. Kaedah ini statik, jadi ia boleh dipanggil secara eksplisit sebagai Solution.main()."

"Apakah hasil main()kaedah itu kembali?"

"Tiada langsung! Jenis hasil ialah void. Ia seperti jenis kosong, pemegang tempat."

"Apa yang main()ada dalam kurungan?"

"Hmm... Ternyata mainkaedah itu mengambil hujah (!). Mereka dihantar sebagai tatasusunan rentetan."

"Betul. Dan nama parameter argsmencadangkan 'argumen' kepada fikiran kita. Apabila atur cara bermula, anda boleh menyampaikan argumen - tatasusunan rentetan. Ia akan terkandung dalam tatasusunan argsdalam main()kaedah."

"Wah! Saya tertanya-tanya tentang perkara ini apabila saya melihatnya buat kali pertama, tetapi kemudian saya terbiasa dengannya dan mula menulis senarai parameter tanpa berfikir."

"Kami semua telah berada di sana. Akhirnya, ralat yang tidak dikendalikan seperti Exception(atau keturunannya) boleh berlaku dalam main()kaedah. Kami tahu ini terima kasih kepada throws Exceptionbahagian pengisytiharan itu."

"Terima kasih, Rishi. Saya tidak faham semuanya, tetapi ini menarik."

"Anda dialu-alukan. Secara beransur-ansur anda akan memahami semua perkara halus ini, saya pasti."