Pengetahuan lwn Kemahiran
Kolej 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?- Saya tahu bahawa merokok tidak baik untuk saya, tetapi saya merokok.
- Saya tahu bahawa makanan segera tidak baik untuk saya, tetapi saya memakannya.
- Saya tahu peraturan lalu lintas tetapi saya tidak boleh memandu.
- Saya tahu jogging bagus untuk saya tetapi saya tidak berjoging pada waktu pagi.
Anda telah mencapai tahap yang baharu
Tahap 9
1 Risha, Timbunan jejak
- 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: - 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:- Dapatkan «timbunan panggilan»:
- Lelaran tatasusunan menggunakan gelung untuk-setiap . Saya harap anda tidak melupakannya.
- Cetak nama kaedah ke System.out .
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:- Program ini cuba menulis fail ke cakera penuh.
- Program ini cuba memanggil kaedah pembolehubah yang menyimpan rujukan nol.
- Program ini cuba membahagikan nombor dengan 0.
- Apabila ralat berlaku, mesin maya Java mencipta objek khas - pengecualian - mengandungi semua maklumat tentang ralat. Untuk ralat yang berbeza terdapat pengecualian yang berbeza.
- 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».
- Jika pengecualian berlaku di dalam blok cuba , kod dalam blok ini tidak lagi dilaksanakan, tetapi pelaksanaan tangkapan blok bermula.
- Jika tiada pengecualian berlaku, blok cuba dilaksanakan sehingga tamat , dan tangkapan tidak pernah dilaksanakan .
4 Elly, RuntimeException, melontar
- 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: - 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:- untuk menangkap pengecualian FileNotFoundException, …
Anda perlu membungkus kod di mana anda memanggil kaedah berbahaya dengan blok cuba-tangkap - bukan untuk menangkap pengecualian FileNotFoundException, …
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: - 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. - 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. |
7 Risha, Bagaimana pelbagai tangkapan berfungsi
- 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. - Dalam contoh di bawah, ArithmeticException ditangkap dalam tangkapan pertama , kerana kelas semua pengecualian diwarisi daripada Exception. Jadi, Exception menangkap sebarang pengecualian . - Dalam contoh di bawah, pengecualian ArithmeticException tidak ditangkap, tetapi dilemparkan ke hadapan kepada kaedah panggilan. - 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 Handling10 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. |
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 |
GO TO FULL VERSION