Pengetahuan vs Keterampilan
Perguruan tinggi mengajarkan kita bahwa tidak ada perbedaan besar antara teori dan praktik. Nah, pasti Anda mengerti bahwa itu tidak sama. Tetapi Anda tidak melihat perbedaan intinya. Namun ada satu. Kebanyakan orang memberi tanda kesetaraan antara "Saya tahu" dan "Saya bisa". Apakah kamu? Bagaimana dengan beberapa contoh?- Saya tahu bahwa merokok itu buruk bagi saya, tetapi saya merokok.
- Saya tahu bahwa makanan cepat saji tidak baik untuk saya, tetapi saya memakannya.
- Saya tahu peraturan lalu lintas tapi saya tidak bisa mengemudi.
- Saya tahu joging baik untuk saya, tetapi saya tidak joging di pagi hari.
Anda telah mencapai level baru
Tingkat 9
1 Risha, Jejak tumpukan
- Hai! Hari ini saya akan memberi tahu Anda apa itu jejak tumpukan. Tapi pertama-tama izinkan saya menjelaskan kepada Anda apa tumpukan itu. - Bayangkan setumpuk kertas - tugas untuk pegawai tertentu. Tugas baru dapat diletakkan di atas tumpukan, dan dia akan mengambil tugas dari atas tumpukan. Dengan demikian, penugasan akan dilakukan bukan pada yang pertama datang. Setiap kali petugas mengambil tugas yang datang terakhir. Struktur pengumpulan seperti itu disebut tumpukan . - Di Jawa, ada koleksi khusus - Stack. Koleksi ini memiliki metode «tambahkan elemen» dan «ambil(ambil/ambil) elemen». Seperti yang sudah Anda ketahui, elemen terakhir yang ditambahkan akan diambil terlebih dahulu. - Hum. Tidak sulit, kurasa. - Bagus. Lalu izinkan saya menjelaskan apa itu stack traceadalah. - Bayangkan bahwa di Java function А memanggil function B , dan yang terakhir memanggil function C , yang, pada gilirannya, memanggil function D . Jadi, untuk keluar dari fungsi B , Anda harus keluar dari fungsi C terlebih dahulu , dan untuk itu Anda harus keluar dari fungsi D . Ini sangat mirip dengan tumpukan. - Dan apa persamaannya? - Di stack, untuk mendapatkan tugas tertentu, kamu juga harus menyelesaikan semua tugas yang diletakkan di atas. - Nah, ini agak analogi, tapi saya tidak yakin apakah saya mengerti semuanya dengan benar. - Lihat disini. Di Jawa, tumpukan adalah sekumpulan elemen. Ini seperti lembaran kertas dalam tumpukan. Untuk mengambil lembar ketiga dari atas, Anda harus mengambil lembar kedua, tetapi sebelumnya Anda harus mengambil lembar pertama. Anda selalu dapat meletakkan dan mengambil lembaran, tetapi Anda hanya dapat meletakkannya di atas dan hanya mengambil dari atas. Hal yang sama berlaku untuk pemanggilan fungsi. Fungsi А memanggil fungsi B , yang terakhir memanggil fungsi C . Untuk keluar А , Anda harus terlebih dahulu keluar dari B , dan untuk melakukannya Anda harus keluar dari C . - Tunggu sebentar. Jika saya melakukannya dengan benar, seluruh tumpukan berubah menjadi «hanya lembar terakhir yang diletakkan di tumpukan yang dapat diambil» dan «pertama, fungsi yang terakhir dipanggil harus keluar». Apakah begitu? - Ya. Jadi, urutan pemanggilan fungsi adalah «tumpukan panggilan fungsi», atau sederhananya «tumpukan panggilan». Fungsi yang dipanggil terakhir harus diakhiri terlebih dahulu. Mari kita lihat contohnya: - Oke. Semuanya jelas dengan pemanggilan fungsi, kurasa. Tapi apa StackTraceElement ini ? - Mesin virtual Java mencatat semua panggilan fungsi. Untuk tujuan ini ia memiliki koleksi khusus - tumpukan. Saat satu fungsi memanggil yang lain, JVM menempatkan elemen baru StackTraceElement ke dalam tumpukan ini. Saat fungsi berakhir, elemen dihapus dari tumpukan. Dengan demikian, tumpukan ini selalu menyimpan informasi terbaru tentang status «tumpukan panggilan fungsi» saat ini. - Setiap StackTraceElementberisi informasi tentang metode yang dipanggil. Jadi Anda bisa mendapatkan nama metode ini menggunakan getMethodName . - Contoh di atas menunjukkannya:- Dapatkan «tumpukan panggilan»:
- Iterasi array menggunakan loop for-each . Saya harap Anda tidak melupakannya.
- Cetak nama metode ke System.out .
2 Diego, Tugas pada tampilan pelacakan tumpukan
- Hei, Amigo! Inilah tugas kecil untuk menampilkan jejak tumpukan ke layar.Tugas | |
---|---|
1 | Setiap metode harus mengembalikan StackTrace Write lima metode yang saling memanggil. Setiap metode harus mengembalikan StackTrace-nya. |
2 | StackTrace lagi Tulis lima metode yang saling memanggil. Setiap metode harus mengembalikan nama metode pemanggilnya. Anda bisa mendapatkan metode pemanggil menggunakan StackTrace. |
3 | Metode ini harus mengembalikan nomor baris dari kode yang dipanggil dari metode ini Tulis lima metode yang saling memanggil. Setiap metode harus mengembalikan nomor baris dari kode tempat metode ini dipanggil. Gunakan fungsi element.getLineNumber() . |
4 | Pelacakan tumpukan 10 panggilan Tulis kode untuk mendapatkan pelacakan tumpukan 10 panggilan. |
5 | Metode harus mengembalikan hasil - kedalaman pelacakan tumpukannya Tulis metode yang menampilkan dan mengembalikan kedalaman pelacakan tumpukannya. Kedalaman jejak tumpukan adalah jumlah metodenya (jumlah elemen dalam daftar). |
3 Elly, Kesalahan dan Pengecualian
- Hei, Amigo! Hari ini kita memiliki pelajaran yang sangat menarik. Saya akan memberi tahu Anda tentang pengecualian. Pengecualian adalah mekanisme khusus untuk mengontrol kesalahan dalam program. Berikut adalah beberapa contoh kesalahan yang mungkin terjadi pada program:- Program mencoba menulis file ke disk penuh.
- Program mencoba memanggil metode variabel yang menyimpan referensi nol.
- Program mencoba membagi angka dengan 0.
- Saat terjadi kesalahan, mesin virtual Java membuat objek khusus – pengecualian – yang berisi semua informasi tentang kesalahan tersebut. Untuk kesalahan yang berbeda ada pengecualian yang berbeda.
- Kemudian pengecualian ini memaksa program untuk segera menginterupsi fungsi saat ini, dan fungsi selanjutnya, hingga keluar dari metode utama. Setelah itu program berakhir. Pengembang Java menyebut proses ini «memutar kembali tumpukan panggilan».
- Jika pengecualian terjadi di dalam blok coba , kode di blok ini tidak lagi dieksekusi, tetapi eksekusi tangkapan blok dimulai .
- Jika tidak ada pengecualian yang terjadi, blok try dieksekusi sampai akhir , dan catch tidak pernah dieksekusi .
4 Elly, RuntimeException, melempar
- Saya memutuskan untuk mengangkat topik lain hari ini. Di Jawa, semua pengecualian dibagi menjadi dua jenis – dikontrol/diperiksa dan tidak dikontrol/tidak dicentang . Pengecualian yang dicentang harus ditangkap, tidak dicentang dapat ditangkap tetapi itu tidak wajib . - Apakah mungkin untuk membuang pengecualian dalam kode dengan sengaja? - Dalam kode Anda, Anda dapat membuat sendiri pengecualian. Anda bahkan dapat menulis pengecualian Anda sendiri. Tapi kita akan jauh di dalam lubang ini nanti. Sekarang mari pelajari cara bekerja dengan pengecualian yang dilemparkan oleh mesin virtual Java. - OKE. - Jika pengecualian ClassNotFoundException dan FileNotFoundExceptiondilemparkan (muncul) dalam suatu metode, pemrogram harus menentukannya dalam tanda tangan suatu metode (header metode). Pengecualian seperti itu diperiksa. Seperti itulah biasanya: - Jadi, kami hanya menulis lemparan dan mencantumkan pengecualian yang dipisahkan dengan koma. Benar? Apakah begitu? - Ya. Tapi ada hal menarik lainnya. Agar contoh di bawah ini telah dikompilasi, metode yang memanggil method1() harus menangkap pengecualian ini atau melemparkannya ke depan. Jika Anda ingin melempar pengecualian yang diperiksa ke depan, Anda perlu menentukannya di header metode . - Sekali lagi, jika dalam metode utama , Anda ingin memanggil metode yang memiliki frase header melempar FileNotFoundException, …maka Anda harus melakukan salah satu dari dua hal ini:- untuk menangkap pengecualian FileNotFoundException, …
Anda harus membungkus kode tempat Anda memanggil metode berbahaya dengan blok coba-tangkap - tidak menangkap pengecualian FileNotFoundException, …
5 Risha, Memutar tumpukan panggilan, bagaimana melakukannya dalam pengecualian
- Saya ingin memberi tahu Anda lebih banyak tentang cara kerja pengecualian. Contoh di bawah menjelaskan bahwa: - Saya tidak mengerti. - Oke. Saya akan menjelaskan apa yang terjadi. - Pada contoh di sebelah kiri, kami memanggil beberapa metode dalam urutan berantai. Di method2() kami secara khusus membuat dan melempar pengecualian (untuk memulai kesalahan). - Contoh di sebelah kanan menunjukkan apa yang terjadi. Lihatlah method2() . Itulah yang mengubah pembuatan pengecualian: kami membuat objek bertipe RuntimeException , menyimpannya dalam pengecualian variabel khusus dan segera keluar dari metode – return . - Di method1 , setelah pemanggilan method2 ada tanda centang,apakah ada pengecualian atau tidak; jika ada pengecualian, maka metode1 segera dihentikan. Pemeriksaan ini dilakukan secara implisit setelah memanggil setiap (!) Metode Java. - Wow! - Tepat. - Di kolom sebelah kanan dalam metode utama saya menulis apa yang terjadi ketika pengecualian ditangkap oleh blok try-catch . Jika tidak ada pengecualian, kode terus dijalankan seperti yang direncanakan. Jika ada pengecualian dari tipe yang ditentukan di catch , maka kami akan menanganinya. - Dan apa arti dari throw dan instanceof ? - Lihat baris terakhir di sebelah kiri lempar RuntimeException baru. Dengan cara ini kami membuat dan melempar pengecualian. Ini hanya sebuah contoh. Kami tidak akan melakukannya sejauh ini. - Menggunakan perintah « а instanceof B » di blok kanan kami memeriksa apakah objek a bertipe B . Yaitu, apakah objek yang disimpan dalam pengecualian variabel, bertipe RuntimeException . Itu ekspresi logis. - Nah, ini menjadi sedikit lebih jelas.6 Diego, tugas menangkap pengecualian
- Lihat disini! Paman Diego membawa sedikit tugas untuk menangkapmu. Semoga Anda beruntung. Saya pikir Anda akan membutuhkannya. Heh. - Hei, Amigo! Berikut adalah beberapa tugas menangkap pengecualian yang menarik.Menangkap tugas | |
---|---|
1 | 1. Pengecualian saat beroperasi dengan angka Tangkap pengecualian yang terjadi saat menjalankan kode: int a = 42 / 0; Tampilkan pengecualian ke layar, tentukan jenisnya |
2 | 2. Pengecualian saat beroperasi dengan string Tangkap pengecualian yang terjadi saat menjalankan kode: String s = null; String m = s.toLowerCase(); Tampilkan pengecualian ke layar, tentukan jenisnya. |
3 | 3. Pengecualian saat beroperasi dengan array Tangkap pengecualian yang terjadi saat menjalankan kode: int[] m = new int[2]; m[8] = 5; Tampilkan pengecualian ke layar, tentukan jenisnya. |
4 | 4. Pengecualian saat beroperasi dengan koleksi Daftar Tangkap pengecualian yang terjadi saat menjalankan kode: ArrayList<String> list = new ArrayList<String>(); String s = daftar.dapatkan(18); Tampilkan pengecualian ke layar, tentukan jenisnya. |
5 | 5. Pengecualian saat beroperasi dengan koleksi Peta Tangkap pengecualian yang terjadi saat menjalankan kode: HashMap<String, String> map = new HashMap<String, String>(null); peta.put(null, null); peta.hapus(null); Tampilkan pengecualian ke layar, tentukan jenisnya. |
7 Risha, Cara kerja banyak tangkapan
- Sekarang, beberapa ceramah yang lebih menarik. Saya sangat suka mengajar. - Saya ingin memberi tahu Anda cara kerja beberapa tangkapan . Sebenarnya sangat sederhana: ketika pengecualian terjadi di blok try , eksekusi program ditransfer ke catch pertama . - Jika tipe yang ditetapkan dalam tanda kurung tangkapan blok sama dengan tipe objek pengecualian, maka eksekusi kode akan dimulai di dalam {}. Kalau tidak, kita pergi ke tangkapan berikutnya . Cek diulangi di sana. - Jika tidak ada lagi catch block, tetapi exception belum tertangkap, maka akan dilempar ke depan, dan metode saat ini diinterupsi. - Jadi begitu. Tangkapan itu akan dieksekusi, yang jenisnya cocok dengan jenis pengecualian. - Ya benar. Sebenarnya, ini sedikit lebih rumit: Intinya kelas-kelas itu bisa diwariskan satu sama lain. Jika kelas «Sapi» diwariskan dari kelas «Hewan», objek bertipe «Sapi» dapat disimpan tidak hanya dalam variabel bertipe «Sapi», tetapi juga dalam variabel bertipe «Hewan». . - Terus? - Karena semua pengecualian diwarisi dari kelas Exception atau RuntimeException (yang juga diwarisi dari Exception ), mereka semua dapat ditangkap menggunakan perintah catch (Exception e) atau catch (RuntimeException e) . - Terus? - Artinya,pertama, Anda dapat menangkap pengecualian apa pun menggunakan perintah catch(Exception e) . Kedua, urutan blok penangkap itu penting. Contoh: - ArithmeticException yang dihasilkan dari pembagian dengan 0 ditangkap di tangkapan kedua. - Pada contoh di bawah ini, ArithmeticException ditangkap di catch pertama , karena kelas dari semua exception diwariskan dari Exception. Jadi, Pengecualian menangkap pengecualian apa pun . - Pada contoh di bawah ini, pengecualian ArithmeticException tidak ditangkap, tetapi dilempar ke depan ke metode pemanggilan. - Nah, sekarang semakin jelas. Pengecualian ini tidak semudah itu. - Sepertinya begitu. Faktanya, ini adalah salah satu hal paling sederhana di Jawa. - Saya ragu apakah harus senang atau kesal karenanya…8 Diego, beberapa tugas menangkap pengecualian
- Hei, Amigo! Kemarin saya mabuk dan terlalu memperumit tugas Anda, tetapi saya harap tidak ada perasaan sulit di pihak Anda dan Anda akan menyelesaikan semuanya? Itu untuk kebaikanmu sendiri. Di Sini:Tugas | |
---|---|
1 | 1. Pengecualian Ada sebuah metode yang melontarkan dua pengecualian yang diwarisi dari Exception , dan dua lainnya diwarisi dari RuntimeException : NullPointerException , ArithmeticException , FileNotFoundException , dan URISyntaxException . Anda perlu menangkap NullPointerException dan FileNotFoundException , tetapi tidak untuk menangkap ArithmeticException dan URISyntaxException . Bagaimana cara melakukannya? |
2 | 2. Menangkap exception Ada tiga exception yang diwariskan secara berurutan dari Exception : class Exception1 extends Exception class Exception2 extends Exception1 class Exception3 extends Exception2 Ada sebuah metode, yang dijelaskan sebagai berikut: public static void method1() throws Exception1, Exception2, Exception3 Tulis tangkapan blok untuk menangkap ketiga Exception1 , Exception2 dan Exception3 |
3 | 3. Menangkap pengecualian selektif 1. Cari tahu pengecualian apa yang dilemparkan dengan metode BEAN.methodThrowExceptions . 2. Metode processExceptions() harus memanggil metode BEAN.methodThrowExceptions dan menangani pengecualian: 2.1. jika pengecualian FileSystemException terjadi, maka catatlah dengan memanggil metode BEAN.log dan lempar ke depan 2.2. jika pengecualian CharConversionException atau IOException lainnya terjadi, cukup catat dengan memanggil metode BEAN.log 3. Tambahkan kelas/jenis pengecualian yang Anda teruskan di 2.1. ke processExceptions()tanda tangan metode. 4. Tangani pengecualian yang tersisa di metode main() dan catat. Gunakan try..catch Tip: Jika Anda menangkap pengecualian MyException , yang tidak ingin Anda tangkap, Anda dapat melemparkannya ke depan menggunakan kode berikut: catch (MyException e) { throw e; } |
4 | 4. Menangkap pengecualian yang diperiksa Tangani semua pengecualian yang diperiksa dalam metode processExceptions() . Anda perlu menampilkan ke layar setiap pengecualian yang diperiksa yang telah terjadi. Anda hanya dapat menggunakan satu blok try . |
5 | 5. Menangkap pengecualian yang tidak dicentang Tangani semua pengecualian yang tidak dicentang dalam metode processExceptions() . Anda perlu menampilkan ke layar jejak tumpukan dari setiap pengecualian yang terjadi menggunakan metode printStack() . Anda hanya dapat menggunakan satu blok try . |
9 Profesor, Kuliah tentang pengecualian
- Hari ini kami memiliki topik yang sangat menarik - pengecualian. Pada saat ilmuwan dan pemrogram muda sangat bersemangat tentang topik ini… - Maaf, saya harus pergi ke lab. Berikut adalah catatan kuliah. Saya pikir Anda akan mengetahuinya sendiri. Di sini: Pengecualian Java (Dokumentasi Oracle) Penanganan Pengecualian di Jawa (titik Java T) Java - Penanganan Pengecualian (poin tutorial) Penanganan Pengecualian Java Dasar10 Julio
- Amigo, apa pendapatmu tentang pelajaran hari ini? Apakah otak positron Anda belum bekerja? Tugas Diego cukup melelahkan siapa pun. Mari kita minum bir dan bersantai. Apakah kamu masih berdiri?11 Kapten Tupai
- Halo, prajurit! - Selamat pagi Pak! - Saya punya berita luar biasa untuk Anda. Inilah pemeriksaan cepat untuk memperkuat keterampilan Anda. Lakukan setiap hari, dan Anda akan meningkatkan keterampilan Anda dengan sangat cepat. Tugas dirancang khusus untuk dilakukan di Intellij IDEA.Tugas tambahan yang harus dilakukan di Intellij Idea | |
---|---|
1 | 1. Pembagian dengan nol Buat metode public static void divisionByZero() , di mana Anda perlu membagi angka apa pun dengan nol, dan menampilkan hasil pembagian ke layar. Bungkus pemanggilan metode divisionByZero() menjadi try..catch . Tampilkan ke layar pelacakan tumpukan pengecualian menggunakan metode exception.printStackTrace() . |
2 | 2. Hitung mundur dari 10 ke 0 Tulis satu putaran untuk menghitung mundur dari 10 ke 0. Gunakan Thread.sleep(100) untuk menunda; Bungkus panggilan tidur menjadi try..catch . |
3 | 3. Bungkus metode menjadi try..catch Membaca angka dari keyboard. Tulis kode untuk membaca angka dari keyboard ke dalam metode terpisah readData() . Bungkus seluruh tubuh metode ini (seluruh kode di dalam metode readData() , kecuali untuk deklarasi daftar tempat nomor akan disimpan) menjadi try..catch . Jika pengguna memasukkan beberapa teks alih-alih memasukkan angka, metode harus menangkap pengecualian dan menampilkan ke layar semua angka yang dimasukkan sebelumnya. Tampilkan nomor ke layar. Setiap nomor harus berada di baris baru. Urutan angka harus seperti yang ada di input. |
4 | 4. Konverter tanggal Baca dari keyboard tanggal dalam format «18/08/2013» Tampilkan tanggal tersebut di layar dalam bentuk «18 Agustus 2013». Gunakan objek Date dan SimpleDateFormat . |
5 | 5. Vokal dan konsonan Tulis program yang membaca baris dari keyboard. Program harus menampilkan dua string ke layar: 1) string pertama harus berisi vokal 2) string kedua harus berisi konsonan dan karakter tanda baca dari teks yang dimasukkan. Pisahkan karakter dengan spasi. Contoh input: Stop lihat dengar Contoh output: oooie stplklstn |
6 | 6. Kisah Si Kecil Berkerudung Merah 1. Ada lima kelas: Red Riding Hood, nenek, patty, penebang kayu, serigala. 2. Setiap kelas memiliki dua bidang tipe ArrayList : dibunuh dan dimakan. 3. Benda-benda yang diperlukan sudah dibuat (kap mesin, nenek, ...). 4. Ciptakan hubungan yang benar (siapa yang memakan dan membunuh siapa) untuk mendapatkan logika dari «Little Red Riding Hood». |
7 | 7. Pindahkan modifikasi statis Pindahkan pengubah statis agar kode dapat dikompilasi. |
8 | 8. Daftar larik angka Buat daftar yang elemennya adalah larik angka. Tambahkan ke daftar lima larik objek dengan panjang masing-masing 5, 2, 4, 7, 0. Isi array dengan data apa pun dan tampilkan di layar. |
9 | 9. Sepuluh kucing Buat kelas Cat dengan field String name . Buat kamus Map<String, Cat> , tambahkan 10 kucing pada model «Nama» - «Kucing». Dapatkan dari Peta satu Set nama dan tampilkan set ke layar. |
Tugas bonus | |
---|---|
1 | 1. Program tidak dapat dikompilasi dan dijalankan. Memperbaikinya. Tugas: Program harus membaca dari keyboard dua nama file dan menyalin file pertama ke lokasi yang ditentukan oleh nama kedua. |
2 | 2. Tambahkan fungsionalitas baru ke program. Tugas Lama: Program harus membaca dari keyboard dua nama file dan menyalin file pertama ke lokasi yang ditentukan oleh nama kedua. Tugas baru: Program harus membaca dari keyboard dua nama file dan menyalin file pertama ke lokasi yang ditentukan oleh nama kedua. Jika file (yang akan disalin) dengan nama yang ditentukan tidak ada, program akan menampilkan pesan «File tidak ada» di layar dan mencoba membaca nama file dari konsol sekali lagi sebelum membaca nama file kedua (tujuan). |
3 | 3. Belajar dan berlatih algoritma. Baca dari keyboard daftar kata dan angka. Tampilkan ke layar kata-kata dalam urutan menaik dan angka dalam urutan menurun. Contoh masukan: Ceri 1 Kacang 3 Apel 2 0 Semangka Contoh keluaran: Apel 3 Kacang 2 Ceri 1 0 Semangka |
GO TO FULL VERSION