CodeGym /Blog Java /rawak /Tingkat Lama 09
John Squirrels
Tahap
San Francisco

Tingkat Lama 09

Diterbitkan dalam kumpulan

Pengetahuan lwn Kemahiran

Tahap Lama 09 - 1Kolej mengajar kami bahawa tidak ada perbezaan besar antara teori dan amalan. Nah, pasti anda faham itu tidak sama. Tetapi anda tidak nampak perbezaan teras. Namun ada satu. Kebanyakan orang meletakkan tanda kesamaan antara "Saya tahu" dan "Saya boleh". Adakah awak? Bagaimana dengan beberapa contoh?
  1. Saya tahu bahawa merokok tidak baik untuk saya, tetapi saya merokok.
  2. Saya tahu bahawa makanan segera tidak baik untuk saya, tetapi saya memakannya.
  3. Saya tahu peraturan lalu lintas tetapi saya tidak boleh memandu.
  4. Saya tahu jogging bagus untuk saya tetapi saya tidak berjoging pada waktu pagi.
Ia sering berlaku bahawa orang mengambil "Saya tahu" untuk "Saya boleh". Ia adalah contoh yang baik dengan peraturan lalu lintas. Jika seseorang itu tahu peraturan dan tahu, cara memandu, adakah ini bermakna dia boleh memandu? Tidak. Bagaimana jika dia fikir dia tahu memandu? Jadi mengapa dia memerlukan pengajar - dia sudah tahu segala-galanya. Apabila anda pasti anda sudah mengetahui segala-galanya, anda mungkin tidak akan mempelajari sesuatu yang baru. Dan jika anda pasti anda tahu bagaimana untuk melakukan segala-galanya, anda tidak akan belajar. Pemikiran seperti ini tidak akan terlintas di fikiran anda. Dan ini bermakna anda akan terlepas semua peluang menarik untuk mempelajari sesuatu. Kolej biasa hanya memberi anda pengetahuan; anda perlu memperoleh kemahiran sendiri. Tetapi apa yang saya dengar? Anda pernah berlatih selain teori di kolej anda? Ok, jika anda belajar di fakulti fizik, buat model kerja enjin stim dengan kecekapan sekurang-kurangnya 20%. Saya yakin anda tahu bagaimana untuk melakukannya, tetapi anda sebenarnya tidak akan dapat melakukannya, bukan? Anda seorang ahli kimia ? Buat serbuk tanpa asap. Anda tahu bagaimana, tetapi anda tidak boleh, ha? Ahli matematik, adakah anda? Kira trajektori peluru artileri. Jangan lupa untuk mengambil kira bentuk cangkerang. Titik matematik tidak terbang dalam kehidupan sebenar. Dan tidak ada kuda sfera. Tahap Lama 09 - 2Ahli biologi? Asingkan penisilin. Acuan ini tumbuh pada tembikai, jadi anda tahu. Anda tahu bagaimana - hebat! Boleh awak lakukannya? Ahli ekonomi?Buat ramalan harga naik minyak. Selesai? Dan kini tukarkannya kepada $2,000 atau $200,000 setahun berdasarkan ramalan anda. Adakah anda pernah bermain FOREX? Untuk wang sebenar? Atau anda hanya tahu apa itu? ekonomi antarabangsa? Splendid! Di manakah saya boleh membuka syarikat luar pesisir? Di Hong-Cong, Ireland atau di Amerika Syarikat. kenapa? Walaupun anda tahu perkara itu, yang meragukan, anda tidak akan dapat melakukannya, kerana anda tidak pernah melakukannya. Anda tidak mempunyai sedikit pun petunjuk bagaimana untuk melakukannya. Oh, awak tidak belajar itu di kolej? Apakah hak saya untuk memberikan tugasan yang anda tidak bersedia? Kerana ini adalah tugas kehidupan sebenar. Amalan IS ini , semua yang anda pelajari di kolej ialah: kuda sfera, persaingan sempurna – tiada satu pun daripadanya wujud dalam kehidupan sebenar. Tetapi kenapa saya terlupa untuk menyebutpakar pemasaran ? Apakah cara terbaik untuk membelanjakan $500 saya supaya seramai mungkin orang mengetahui tentang kuliah saya? Pada iklan? Adakah anda sedar bahawa bukan sahaja pengiklanan klasik sudah lapuk, tetapi juga konsep USP (unique selling proposition), yang saya pasti anda telah diajar di kolej sebagai ubat penawar yang hampir unik. Lupa awak tahu apa-apa. Tanya diri anda - apa yang boleh saya lakukan? Berguna, maksud saya? Sesuatu yang orang akan bayar wang? Wang yang baik, maksud saya? Jadi kawan-kawan, mari kita ucapkan terima kasih kepada kursus yang begitu indah seperti CodeGym. Disebabkan itu, anda bukan sahaja tahu cara memprogram, tetapi anda sebenarnya boleh melakukannya. Anda juga boleh mendapatkan pekerjaan dan memperoleh wang yang lumayan dalam beberapa tahun. Saya harap wang ini akan mencukupi untuk hidup selesa dan selesa. Saya akan mengatakannya sekali lagi, supaya anda ingat: tidak kira apa yang anda ketahui. Satu-satunya perkara yang penting ialah kemahiran berguna yang anda miliki, kemahiran yang orang akan berhasrat untuk membayar anda. Lebih cepat anda memahami perkara ini, lebih baik.

Anda telah mencapai tahap yang baharu

Tahap 9

Tahap Lama 09 - 3

1 Risha, Timbunan jejak

Tahap Lama 09 - 4- Hey! Hari ini saya akan memberitahu anda apa itu surih tindanan. Tetapi pertama-tama izinkan saya menerangkan kepada anda apakah timbunan itu. - Bayangkan timbunan kertas - tugasan untuk kerani tertentu. Tugasan baharu boleh diletakkan di bahagian atas timbunan, dan dia akan mengambil tugasan dari bahagian atas timbunan. Oleh itu, tugasan tidak akan dibuat secara tiba-tiba. Setiap kali kerani mengambil tugasan yang datang terakhir. Struktur pengumpulan sedemikian dipanggil tindanan . - Di Java, terdapat koleksi khas - Stack. Koleksi ini mempunyai kaedah «tambah elemen» dan «ambil (dapat/ambil) elemen». Seperti yang anda sedia maklum, elemen terakhir yang ditambah akan diambil dahulu. - Hum. Ia tidak sukar, saya rasa. - Baiklah. Kemudian izinkan saya menerangkan apa itu surih tindananialah. - Bayangkan bahawa dalam fungsi Java А memanggil fungsi B , dan yang terakhir memanggil fungsi C , yang, seterusnya, memanggil fungsi D . Jadi, untuk keluar dari fungsi B , anda mesti keluar dari fungsi C dahulu , dan untuk berbuat demikian anda perlu keluar dari fungsi D . Ini sangat serupa dengan timbunan. - Dan apakah persamaannya? - Dalam timbunan, untuk sampai ke tugasan tertentu, anda juga perlu menyelesaikan semua tugasan yang diletakkan di atas. - Nah, ia agak analogi, tetapi saya tidak pasti sama ada saya faham semuanya dengan betul. - Tengok sini. Dalam Java timbunan ialah satu set elemen. Ia seperti helaian kertas dalam timbunan. Untuk mengambil yang ketiga dari atas, anda mesti mengambil helaian kedua, tetapi sebelum itu anda perlu mengambil yang pertama. Anda sentiasa boleh meletakkan dan mengambil helaian, tetapi anda boleh meletakkannya hanya di bahagian atas dan mengambil hanya dari bahagian atas. Perkara yang sama berlaku untuk panggilan fungsi. Fungsi А memanggil fungsi B , yang terakhir memanggil fungsi C . Untuk keluar dari А , anda mesti keluar dari B dahulu , dan untuk melakukan ini anda perlu keluar dari C . - Tunggu sekejap. Jika saya melakukannya dengan betul, keseluruhan timbunan ternyata dalam «hanya helaian terakhir yang diletakkan pada timbunan boleh diambil» dan «pertama, fungsi terakhir dipanggil harus keluar». Adakah begitu? - Ya. Jadi, urutan panggilan fungsi ialah «timbunan panggilan fungsi», atau ringkasnya «timbunan panggilan». Fungsi yang dipanggil terakhir mesti ditamatkan dahulu. Mari kita lihat contoh: Tahap Lama 09 - 5- OK. Semuanya jelas dengan panggilan fungsi, saya rasa. Tetapi apakah StackTraceElement ini ? - Mesin maya Java log semua panggilan fungsi. Untuk tujuan ini ia mempunyai koleksi khas - timbunan. Apabila satu fungsi memanggil yang lain, JVM meletakkan elemen baharu StackTraceElement ke dalam tindanan ini. Apabila fungsi tamat, elemen dipadamkan daripada timbunan. Oleh itu, timbunan ini sentiasa menyimpan maklumat terkini tentang keadaan semasa «timbunan panggilan fungsi». - Setiap StackTraceElementmengandungi maklumat tentang kaedah yang dipanggil. Jadi anda boleh mendapatkan nama kaedah ini menggunakan getMethodName . - Contoh di atas menunjukkannya:
  1. Dapatkan «timbunan panggilan»:
  2. Lelaran tatasusunan menggunakan gelung untuk-setiap . Saya harap anda tidak melupakannya.
  3. Cetak nama kaedah ke System.out .
- Satu perkara yang menarik, dan nampaknya mudah. Terima kasih, Risha!

2 Diego, Tugas pada paparan surih tindanan

- Hei, Amigo! Berikut ialah tugas kecil untuk memaparkan surih tindanan pada skrin.
Tugasan
1 Setiap kaedah harus mengembalikan StackTrace
Tulis lima kaedah yang memanggil satu sama lain. Setiap kaedah harus mengembalikan StackTracenya.
2 StackTrace sekali lagi
Tulis lima kaedah yang memanggil satu sama lain. Setiap kaedah harus mengembalikan nama kaedah pemanggilnya. Anda boleh mendapatkan kaedah pemanggil menggunakan StackTrace.
3 Kaedah harus mengembalikan nombor baris kod kaedah ini dipanggil daripada
Tulis lima kaedah yang memanggil satu sama lain. Setiap kaedah harus mengembalikan nombor baris kod kaedah ini dipanggil. Gunakan elemen fungsi.getLineNumber() .
4 Susuri tindanan 10 panggilan
Tulis kod untuk mendapatkan surih tindanan 10 panggilan.
5 Kaedah harus mengembalikan hasil - kedalaman surih tindanannya
Tulis kaedah yang memaparkan dan mengembalikan kedalaman surih tindanannya. Kedalaman surih tindanan ialah bilangan kaedahnya (bilangan unsur dalam senarai).

3 Elly, Ralat dan Pengecualian

- Hei, Amigo! Hari ini kita mempunyai pelajaran yang sangat menarik. Saya akan memberitahu anda tentang pengecualian. Pengecualian adalah mekanisme khas untuk mengawal ralat dalam program. Berikut adalah beberapa contoh ralat yang mungkin berlaku dalam program:
  1. Program ini cuba menulis fail ke cakera penuh.
  2. Program ini cuba memanggil kaedah pembolehubah yang menyimpan rujukan nol.
  3. Program ini cuba membahagikan nombor dengan 0.
Tindakan ini mengakibatkan ralat. Biasanya, ini membawa kepada penutupan program - tidak ada gunanya untuk terus melaksanakan kod. - Kenapa begitu? - Adakah ada rasa untuk memusingkan roda apabila kereta jatuh dari tebing? - Adakah anda maksudkan program ini harus ditamatkan? - Ya. Macam tu dulu. Sebarang ralat membawa kepada penamatan program. - Ini keputusan yang sangat bijak. - Bukankah lebih baik untuk mencuba? - Yeah. Anda telah menaip teks yang besar dalam MS Word, menyimpannya, ia belum disimpan, tetapi program memberitahu anda bahawa semuanya OK. Dan anda teruskan menaip. Bodoh, bukan? - Yeah. - Kemudian pengaturcara menghasilkan langkah yang menarik:setiap fungsi mengembalikan status kerjanya. 0 bermakna bahawa fungsi berfungsi seperti yang sepatutnya, sebarang nilai lain - bahawa terdapat ralat : nilai ini ialah kod ralat. - Tetapi pendekatan ini mempunyai kelemahan. Selepas setiap panggilan fungsi (!), anda perlu menyemak kod (nombor) yang dikembalikan oleh fungsi tersebut. Pertama, ia menyusahkan: kod pengendalian ralat jarang dilaksanakan, tetapi anda sentiasa perlu menulisnya. Kedua, fungsi itu sendiri sering mengembalikan nilai yang berbeza - apa yang perlu dilakukan dengannya? - Yeah. Itu yang saya hendak tanya. - Kemudian masa depan yang cerah datang - pengecualian dan pengendalian ralat telah muncul. Begini cara ia berfungsi:
  1. Apabila ralat berlaku, mesin maya Java mencipta objek khas - pengecualian - mengandungi semua maklumat tentang ralat. Untuk ralat yang berbeza terdapat pengecualian yang berbeza.
  2. Kemudian pengecualian ini memaksa program untuk mengganggu fungsi semasa dengan serta-merta, dan fungsi seterusnya, sehingga ia keluar dari kaedah utama. Selepas itu program ditamatkan. Pembangun Java memanggil proses ini «gulung semula timbunan panggilan».
- Tetapi anda telah mengatakan bahawa program itu tidak akan keluar dengan pasti. - Betul, kerana ada cara untuk menangkap pengecualian. Bila-bila masa dan di mana sahaja anda perlukan, anda boleh menulis kod khas untuk menangkap pengecualian ini dan melakukan sesuatu yang penting. - Untuk melakukan ini, terdapat cuba-tangkap pembinaan khas . Lihat bagaimana ia berfungsi: Tingkatan Lama 09 - 6- Mengapa «Selepas kaedah1 memanggil. Tidak akan ditunjukkan» tidak akan dipaparkan ke skrin? - Saya gembira anda bertanya mengenainya. Dalam baris 25, terdapat pembahagian dengan sifar. Ini membawa kepada ralat - pengecualian. Mesin maya Java mencipta objek ArithmeticException yang mengandungi maklumat ralat. Objek ini adalah pengecualian. - Pengecualian berlaku di dalam kaedah method1() .Ini mengakibatkan kaedah penamatan serta-merta. Ia juga akan membawa kepada penamatan kaedah utama , jika tiada blok cuba-tangkap . - Jika pengecualian berlaku di dalam blok cuba, ia akan ditangkap dalam blok tangkapan . Selebihnya kod dalam cubaan blok tidak akan dilaksanakan, pelaksanaan tangkapan blok akan bermula serta-merta. - Saya tidak begitu faham. - Dengan kata lain, kod ini berfungsi seperti ini:
  1. Jika pengecualian berlaku di dalam blok cuba , kod dalam blok ini tidak lagi dilaksanakan, tetapi pelaksanaan tangkapan blok bermula.
  2. Jika tiada pengecualian berlaku, blok cuba dilaksanakan sehingga tamat , dan tangkapan tidak pernah dilaksanakan .
- Ahem! - Bayangkan selepas setiap panggilan kaedah kami menyemak sama ada kaedah yang dipanggil ditamatkan dengan sendirinya atau disebabkan pengecualian. Jika terdapat pengecualian, JVM mula melaksanakan tangkapan blok jika ia tersedia, dan menangkap pengecualian. Jika tiada blok tangkapan, JVM menamatkan kaedah semasa. Kemudian semakan yang sama bermula dalam kaedah yang dipanggil kaedah semasa. - Sekarang saya rasa saya mendapatnya. - Baiklah. - Dan apakah Pengecualian di dalam blok tangkapan itu? - Semua pengecualian adalah kelas yang diwarisi daripada kelas Exception. Kita boleh menangkap mana-mana daripada mereka dengan menyatakan kelasnya dalam tangkapanblok, atau kesemuanya sekali gus dengan menyatakan Pengecualian kelas induk biasa. Kemudian, daripada pembolehubah e (pembolehubah ini menyimpan rujukan objek pengecualian) anda boleh mendapatkan semua maklumat yang diperlukan tentang ralat. - Hebat! Dan bagaimana jika dalam kaedah saya berlaku pengecualian yang berbeza, bolehkah saya mengendalikannya dengan cara yang berbeza? - Kamu perlu. Anda boleh melakukannya seperti ini: Tahap Lama 09 - 7- Blok cuba mungkin mengandungi berbilang blok tangkapan , setiap satunya akan menangkap pengecualian jenisnya. - Umph. Nah, saya agak faham. Sudah tentu, saya sendiri tidak akan menulis sesuatu seperti ini. Walau bagaimanapun, saya tidak akan takut jika saya memenuhi kod tersebut.

4 Elly, RuntimeException, melontar

Tahap Lama 09 - 8- Saya memutuskan untuk membawa topik lain hari ini. Di Java, semua pengecualian dibahagikan kepada dua jenis – dikawal/ditanda dan tidak dikawal/tidak ditanda . Pengecualian yang disemak mesti ditangkap, tidak disemak boleh ditangkap tetapi itu tidak diperlukan . - Adakah mungkin untuk membuang pengecualian dalam kod dengan sengaja? - Dalam kod anda, anda boleh membuang pengecualian sendiri. Anda juga boleh menulis pengecualian anda sendiri. Tetapi kita akan mendalami lubang ini nanti. Sekarang mari kita belajar bagaimana untuk bekerja dengan pengecualian yang dilemparkan oleh mesin maya Java. - OKEY. - Jika pengecualian ClassNotFoundException dan FileNotFoundExceptiondibuang (muncul) dalam kaedah, pengaturcara perlu menentukannya dalam tandatangan kaedah (pengepala kaedah). Pengecualian sedemikian disemak. Itulah yang biasanya kelihatan seperti: Tahap Lama 09 - 9- Jadi, kami hanya menulis lontaran dan menyenaraikan pengecualian yang dipisahkan dengan koma. Betul ke? Adakah begitu? - Ya. Tetapi ada satu lagi perkara yang menarik. Agar contoh di bawah telah disusun, kaedah yang memanggil method1() mempunyai sama ada untuk menangkap pengecualian ini atau membuangnya ke hadapan. Jika anda ingin membuang pengecualian yang diperiksa ke hadapan, anda perlu menentukannya dalam pengepala kaedah . - Sekali lagi, jika dalam kaedah utama , anda ingin memanggil kaedah yang mempunyai dalam frasa pengepalanya membuang FileNotFoundException, …maka anda perlu melakukan salah satu daripada dua perkara ini:
  1. untuk menangkap pengecualian FileNotFoundException, …
    Anda perlu membungkus kod di mana anda memanggil kaedah berbahaya dengan blok cuba-tangkap
  2. bukan untuk menangkap pengecualian FileNotFoundException, …
Anda perlu menambah pengecualian ini pada senarai lontaran kaedah utama anda . - Adakah anda memberi saya contoh? - Lihat di sini: Tahap Lama 09 - 10- Contoh ini tidak akan disusun, kerana kaedah utama memanggil kaedah kaedah1(), yang membuang pengecualian yang mesti ditangkap. - Agar contoh disusun, anda perlu menambah pengendalian pengecualian kepada kaedah utama . Anda boleh melakukan ini dalam dua cara: Tahap Lama 09 - 11- Dan di sini kita menangkapnya menggunakan cuba-tangkap : Tahap Lama 09 - 12- Ia semakin jelas, tetapi sangat sedikit. - Lihat contoh di bawah: Tahap Lama 09 - 13- Masih terdapat pengecualian - RuntimeException dan kelas yang diwarisi daripadanya.Ia tidak diperlukan untuk menangkap atau membuangnya. Ini adalah pengecualian yang tidak disemak. Pengecualian ini dianggap sukar untuk diramalkan, jadi hampir mustahil untuk meramalkan kejadiannya. Anda boleh melakukan perkara yang sama dengan mereka, tetapi tidak perlu menyatakannya dalam lontaran .

5 Risha, Melancarkan timbunan panggilan, bagaimana untuk melakukannya dalam pengecualian

- Saya ingin memberitahu anda lebih sedikit tentang cara pengecualian berfungsi. Contoh di bawah menerangkan bahawa: Tahap Lama 09 - 14- Saya tidak faham. - Okey. Saya akan menerangkan apa yang berlaku. - Dalam contoh di sebelah kiri, kami memanggil beberapa kaedah dalam susunan rantai. Dalam method2() kami secara khusus mencipta dan membuang pengecualian (untuk memulakan ralat). - Contoh di sebelah kanan menunjukkan apa yang berlaku. Lihat kaedah2() . Itulah yang diubah menjadi penciptaan pengecualian: kami mencipta objek jenis RuntimeException , menyimpannya dalam pengecualian pembolehubah khas dan segera keluar daripada kaedah – return . - Dalam method1 , selepas panggilan method2 ada semakan,jika terdapat pengecualian atau tidak; jika terdapat pengecualian, maka kaedah1 akan ditamatkan dengan serta-merta. Semakan ini dilakukan secara tersirat selepas memanggil setiap (!) kaedah Java. - Wah! - Tepat sekali. - Dalam lajur di sebelah kanan dalam kaedah utama saya menulis apa yang berlaku apabila pengecualian ditangkap oleh blok cuba-tangkap . Jika tiada pengecualian, kod terus dilaksanakan seperti yang dirancang. Jika terdapat pengecualian jenis yang dinyatakan dalam catch , maka kami mengendalikannya. - Dan apakah maksud lontaran dan contoh ? - Lihat baris terakhir di sebelah kiri lempar RuntimeException baharu. Dengan cara ini kami mencipta dan membuang pengecualian. Ini hanya contoh. Kami tidak akan melakukannya setakat ini. - Menggunakan arahan « а instanceof B » di blok kanan kami menyemak sama ada objek a mempunyai jenis B . Iaitu, sama ada objek yang disimpan dalam pengecualian pembolehubah, mempunyai jenis RuntimeException . Ia adalah ungkapan yang logik. - Nah, ia semakin jelas sedikit.

6 Diego, Tugas menangkap pengecualian

- Tengok sini! Pakcik Diego membawa beberapa tugas untuk menangkap untuk anda. Semoga berjaya. Saya rasa awak perlukannya. Heh. Tahap Lama 09 - 15- Hei, Amigo! Berikut ialah beberapa tugas penangkapan pengecualian yang menarik.
Menangkap tugas
1 1. Pengecualian apabila beroperasi dengan nombor
Tangkap pengecualian yang berlaku apabila menjalankan kod:
int a = 42 / 0;
Paparkan pengecualian pada skrin, nyatakan jenisnya
2 2. Pengecualian apabila beroperasi dengan rentetan
Tangkap pengecualian yang berlaku apabila menjalankan kod:
String s = null;
Rentetan m = s.toLowerCase();
Paparkan pengecualian pada skrin, nyatakan jenisnya.
3 3. Pengecualian apabila beroperasi dengan tatasusunan
Tangkap pengecualian yang berlaku apabila menjalankan kod:
int[] m = new int[2];
m[8] = 5;
Paparkan pengecualian pada skrin, nyatakan jenisnya.
4 4. Pengecualian apabila beroperasi dengan koleksi Senarai
Tangkap pengecualian yang berlaku apabila menjalankan kod:
ArrayList<String> list = new ArrayList<String>();
String s = list.get(18);
Paparkan pengecualian pada skrin, nyatakan jenisnya.
5 5. Pengecualian apabila beroperasi dengan koleksi Peta
Tangkap pengecualian yang berlaku apabila menjalankan kod:
HashMap<String, String> map = new HashMap<String, String>(null);
map.put(null, null);
map.remove(null);
Paparkan pengecualian pada skrin, nyatakan jenisnya.
- Petua: mula-mula tulis program, kemudian lihat pengecualian yang berlaku dan selepas itu tukar kod dan tangkap pengecualian itu.

7 Risha, Bagaimana pelbagai tangkapan berfungsi

Tahap Lama 09 - 16- Sekarang, beberapa kuliah yang lebih menarik. Saya sangat suka mengajar. - Saya ingin memberitahu anda bagaimana beberapa tangkapan berfungsi. Sebenarnya ia sangat mudah: apabila pengecualian berlaku dalam blok try , pelaksanaan program dipindahkan ke tangkapan pertama . - Jika jenis yang dinyatakan dalam kurungan tangkapan blok adalah sama dengan jenis objek pengecualian, maka pelaksanaan kod bermula di dalam {}. Jika tidak kita pergi ke tangkapan seterusnya . Semakan diulang di sana. - Jika tiada lagi blok tangkapan , tetapi pengecualian belum ditangkap, ia dilemparkan ke hadapan, dan kaedah semasa terganggu. - Saya faham. Tangkapan itu akan dilaksanakan, jenis yang sepadan dengan jenis pengecualian. - Ya betul. Sebenarnya, ia lebih rumit: Intinya ialah kelas boleh diwarisi antara satu sama lain. Jika kelas «Lembu» diwarisi daripada kelas «Haiwan», objek jenis «Lembu» boleh disimpan bukan sahaja dalam pembolehubah jenis «Lembu», tetapi dalam pembolehubah jenis «Haiwan» juga . - Jadi apa? - Memandangkan semua pengecualian diwarisi daripada kelas Exception atau RuntimeException (yang juga diwarisi daripada Exception ), mereka semua mungkin ditangkap menggunakan perintah catch (Exception e) atau catch (RuntimeException e) . - Jadi apa? - Ini bermakna,pertama, anda boleh menangkap sebarang pengecualian menggunakan perintah catch(Exception e) . Kedua, susunan blok tangkapan adalah penting. Contoh: - ArithmeticException terhasil daripada pembahagian dengan 0 ditangkap dalam tangkapan kedua. Tahap Lama 09 - 17- Dalam contoh di bawah, ArithmeticException ditangkap dalam tangkapan pertama , kerana kelas semua pengecualian diwarisi daripada Exception. Jadi, Exception menangkap sebarang pengecualian . Tahap Lama 09 - 18- Dalam contoh di bawah, pengecualian ArithmeticException tidak ditangkap, tetapi dilemparkan ke hadapan kepada kaedah panggilan. Tahap Lama 09 - 19- Nah, ia semakin jelas sekarang. Pengecualian ini tidak semudah itu. - Nampaknya begitu. Malah, ia adalah salah satu perkara paling mudah di Jawa. - Saya ragu-ragu sama ada akan gembira atau kecewa mengenainya…

8 Diego, Pelbagai tugas tangkapan pengecualian

- Hei, Amigo! Semalam saya mabuk dan terlalu merumitkan tugas anda, tetapi saya harap tidak ada perasaan berat di pihak anda dan anda akan menyelesaikan semuanya? Ia untuk kebaikan anda sendiri. di sini:
Tugasan
1 1. Pengecualian
Terdapat kaedah yang membuang dua pengecualian yang diwarisi daripada Exception , dan dua lagi yang diwarisi daripada RuntimeException : NullPointerException , ArithmeticException , FileNotFoundException dan URISyntaxException .

Anda perlu menangkap NullPointerException dan FileNotFoundException , tetapi bukan untuk menangkap ArithmeticException dan URISyntaxException . Bagaimana hendak melakukannya?
2 2. Menangkap pengecualian
Terdapat tiga pengecualian yang diwarisi secara berurutan daripada Pengecualian :
kelas Pengecualian1 memanjangkan
Kelas Pengecualian Pengecualian2 memanjangkan
Kelas Pengecualian1 Pengecualian3 memanjangkan Pengecualian2
Terdapat kaedah, yang diterangkan seperti berikut:
kaedah kekosongan statik awam1() melontar Pengecualian1, Pengecualian2, Pengecualian3

Tulis tangkapan blok untuk menangkap ketiga-tiga Exception1 , Exception2 dan Exception3
3 3. Menangkap pengecualian terpilih
1. Ketahui apakah pengecualian yang dilemparkan dengan kaedah BEAN.methodThrowExceptions .
2. Kaedah processExceptions() harus memanggil kaedah BEAN.methodThrowExceptions dan mengendalikan pengecualian:
2.1. jika pengecualian FileSystemException berlaku, kemudian logkannya dengan memanggil kaedah BEAN.log dan lontar ke hadapan
2.2. jika pengecualian CharConversionException atau mana-mana IOException lain berlaku, hanya logkannya dengan memanggil kaedah BEAN.log
3. Tambah kelas/jenis pengecualian yang anda kirim semula dalam 2.1. kepada processExceptions()tandatangan kaedah.
4. Kendalikan baki pengecualian dalam kaedah main() dan logkannya. Gunakan try..catch

Petua:
Jika anda menangkap pengecualian MyException , yang anda tidak mahu tangkap, anda boleh membuangnya ke hadapan menggunakan kod berikut:
tangkap (MyException e) {
throw e;
}
4 4. Menangkap pengecualian yang diperiksa
Kendalikan semua pengecualian yang disemak dalam kaedah processExceptions() .
Anda perlu memaparkan pada skrin setiap pengecualian yang diperiksa yang telah berlaku.
Anda boleh menggunakan hanya satu blok cubaan .
5 5. Menangkap pengecualian yang tidak ditanda
Kendalikan semua pengecualian yang tidak ditanda dalam kaedah processExceptions() .
Anda perlu memaparkan pada skrin surih tindanan bagi setiap pengecualian yang berlaku menggunakan kaedah printStack() .
Anda boleh menggunakan hanya satu blok cubaan .

9 Profesor, Kuliah mengenai pengecualian

- Hari ini kami mempunyai topik yang sangat menarik - pengecualian. Pada masa itu, apabila saintis dan pengaturcara muda sangat teruja dengan topik ini... - Maaf, saya mesti pergi ke makmal. Berikut adalah nota kuliah. Saya fikir anda akan memikirkannya sendiri. Di sini: Java Exceptions (Oracle Documentation) Exception Handling in Java (Java T point) Java - Exceptions Handling (tutorials point) Asas Java Exception Handling

10 Julio

- Amigo, apa pendapat anda tentang pelajaran hari ini? Adakah otak positron anda belum berfungsi lagi? Tugas Diego sudah cukup untuk meletihkan sesiapa sahaja. Mari kita minum seketika dan berehat. Adakah anda masih berdiri?

11 Kapten Tupai

- Hello, askar! - Selamat Pagi tuan! - Saya ada berita menggerunkan untuk awak. Berikut ialah semakan pantas untuk mengukuhkan kemahiran anda. Lakukan setiap hari, dan anda akan meningkatkan kemahiran anda dengan cepat. Tugasan direka khas untuk dilakukan dalam Intellij IDEA.
Tugas tambahan yang perlu dilakukan dalam Intellij Idea
1 1. Pembahagian dengan sifar
Cipta kaedah public static void divisionByZero() , di mana anda perlu membahagi sebarang nombor dengan sifar, dan memaparkan pada skrin hasil pembahagian.
Balut panggilan kaedah divisionByZero() ke dalam percubaan..tangkap . Paparkan pada skrin surih tindanan pengecualian menggunakan kaedah exception.printStackTrace() .
2 2. Kira detik dari 10 hingga 0
Tulis gelung untuk kira detik dari 10 hingga 0. Gunakan Thread.sleep(100) untuk membuat kelewatan;
Bungkus panggilan tidur sebagai percubaan..tangkap .
3 3. Balut kaedah menjadi percubaan..tangkap
Baca nombor dari papan kekunci. Tulis kod untuk membaca nombor daripada papan kekunci ke dalam kaedah berasingan readData() .
Balut seluruh badan kaedah ini (keseluruhan kod di dalam kaedah readData() , kecuali untuk pengisytiharan senarai tempat nombor akan disimpan) ke dalam percubaan..catch .

Jika pengguna memasukkan beberapa teks dan bukannya memasukkan nombor, kaedah itu perlu menangkap pengecualian dan memaparkan ke skrin semua nombor yang dimasukkan sebelum ini.
Paparkan nombor pada skrin. Setiap nombor hendaklah pada baris baharu. Susunan nombor hendaklah sama seperti dalam input.
4 4. Penukar tarikh
Baca dari papan kekunci tarikh dalam format «08/18/2013»
Paparkan pada skrin tarikh tersebut dalam bentuk «18 AUG 2013».
Gunakan objek Date dan SimpleDateFormat .
5 5. Vokal dan konsonan
Tulis atur cara yang membaca baris daripada papan kekunci.
Atur cara hendaklah memaparkan pada skrin dua rentetan:
1) rentetan pertama hendaklah mengandungi vokal
2) rentetan kedua hendaklah mengandungi konsonan dan aksara tanda baca daripada teks yang dimasukkan.
Pisahkan aksara mengikut ruang.

Contoh input:
Berhenti lihat dengar
Contoh output:
oooie
stplklstn
6 6. Kisah Little Red Riding Hood
1. Terdapat lima kelas: Red Riding Hood, nenek, patty, penebang kayu, serigala.
2. Setiap kelas mempunyai dua medan jenis ArrayList : dibunuh dan dimakan.
3. Objek yang diperlukan sudah dibuat (hud, nenek, ...).
4. Wujudkan hubungan yang betul (yang makan dan membunuh siapa) untuk mendapatkan logik «Little Red Riding Hood».
7 7. Gerakkan pengubahsuaian statik
Alihkan pengubahsuai statik supaya kod tersusun.
8 8. Senarai tatasusunan nombor
Cipta senarai yang unsur-unsurnya ialah tatasusunan nombor. Tambahkan pada senarai lima tatasusunan objek dengan panjang 5, 2, 4, 7, 0, masing-masing. Isi tatasusunan dengan sebarang data dan paparkannya pada skrin.
9 9. Sepuluh kucing
Buat kucing kelas dengan nama String medan .
Buat kamus Map<String, Cat> , tambahkan 10 kucing pada model «Nama» - «Kucing».
Dapatkan dari Peta Set nama dan paparkan set itu ke skrin.
- Tugas-tugas itu adalah untuk hijau. Saya menambah tugas bonus dengan kerumitan yang lebih tinggi. Untuk senjata api atas sahaja.
Tugasan bonus
1 1. Program tidak dikompil dan dijalankan. Betulkan.
Tugas: Program harus membaca dari papan kekunci dua nama fail dan menyalin fail pertama ke lokasi yang ditentukan oleh nama kedua.
2 2. Tambahkan fungsi baharu pada program.
Tugas Lama: Program harus membaca dari papan kekunci dua nama fail dan untuk menyalin fail pertama ke lokasi yang ditentukan oleh nama kedua.
Tugas baharu: Program harus membaca dari papan kekunci dua nama fail dan untuk menyalin fail pertama ke lokasi yang ditentukan oleh nama kedua.

Jika fail (yang akan disalin) dengan nama yang ditentukan tidak wujud, program harus memaparkan pada skrin mesej «Fail tidak wujud» dan cuba membaca nama fail dari konsol sekali lagi sebelum membaca nama fail kedua (destinasi).
3 3. Belajar dan mengamalkan algoritma.
Baca dari papan kekunci senarai perkataan dan nombor. Paparkan pada skrin perkataan dalam susunan menaik dan nombor dalam susunan menurun.

Contoh input:
Ceri
1
Kacang
3
Epal
2
0
Tembikai

Contoh output:
Epal
3
Kacang
2
Ceri
1
0
Tembikai
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION