java面試題之異常
面試題如下:
1、什么是Java中的異常?
異常是在程序執(zhí)行期間可能發(fā)生的錯(cuò)誤事件,并且會(huì)中斷它的正常流程。異??赡軄?lái)自不同類型的情況,例如用戶輸入的錯(cuò)誤數(shù)據(jù),硬件故障,網(wǎng)絡(luò)連接故障等。
(學(xué)習(xí)視頻分享:java教學(xué)視頻)
每當(dāng)執(zhí)行java語(yǔ)句時(shí)發(fā)生任何錯(cuò)誤,都會(huì)創(chuàng)建一個(gè)異常對(duì)象,然后JRE會(huì)嘗試查找異常處理程序來(lái)處理異常。如果找到合適的異常處理程序,則將異常對(duì)象傳遞給處理程序代碼以處理異常,稱為捕獲異常。如果未找到處理程序,則應(yīng)用程序?qū)惓伋龅竭\(yùn)行時(shí)環(huán)境,JRE將終止該程序。
Java異常處理框架僅用于處理運(yùn)行時(shí)錯(cuò)誤,編譯時(shí)錯(cuò)誤不由異常處理框架處理。
2、Java中的異常處理關(guān)鍵字是什么?
java異常處理中使用了四個(gè)關(guān)鍵字。
throw:有時(shí)我們明確要?jiǎng)?chuàng)建異常對(duì)象然后拋出它來(lái)停止程序的正常處理。throw關(guān)鍵字用于向運(yùn)行時(shí)拋出異常來(lái)處理它。
throws:當(dāng)我們?cè)诜椒ㄖ袙伋鋈魏我褭z查的異常而不處理它時(shí),我們需要在方法簽名中使用throws關(guān)鍵字讓調(diào)用者程序知道該方法可能拋出的異常。調(diào)用方法可以處理這些異?;蚴褂胻hrows關(guān)鍵字將其傳播給它的調(diào)用方法。我們可以在throws子句中提供多個(gè)異常,也可以與main()方法一起使用。
try-catch:我們?cè)诖a中使用try-catch塊進(jìn)行異常處理。try是塊的開始,catch是在try塊的末尾處理異常。我們可以使用try有多個(gè)catch塊,try-catch塊也可以嵌套。catch塊需要一個(gè)應(yīng)該是Exception類型的參數(shù)。
finally:finally塊是可選的,只能用于try-catch塊。由于異常會(huì)暫停執(zhí)行過(guò)程,因此我們可能會(huì)打開一些不會(huì)關(guān)閉的資源,因此我們可以使用finally塊。finally塊總是被執(zhí)行,無(wú)論是否發(fā)生異常。
3、解釋Java異常層次結(jié)構(gòu)?
Java異常是分層的,繼承用于對(duì)不同類型的異常進(jìn)行分類。Throwable是Java Exceptions Hierarchy的父類,它有兩個(gè)子對(duì)象 - Error和Exception。異常進(jìn)一步分為檢查異常和運(yùn)行時(shí)異常。
錯(cuò)誤是超出應(yīng)用程序范圍的特殊情況,并且無(wú)法預(yù)測(cè)并從中恢復(fù),例如硬件故障,JVM崩潰或內(nèi)存不足錯(cuò)誤。
Checked Exceptions是我們可以在程序中預(yù)期并嘗試從中恢復(fù)的特殊情況,例如FileNotFoundException。我們應(yīng)該捕獲此異常并向用戶提供有用的消息并正確記錄以進(jìn)行調(diào)試。Exception是所有Checked Exceptions的父類。
運(yùn)行時(shí)異常是由錯(cuò)誤的編程引起的,例如嘗試從Array中檢索元素。我們應(yīng)該在嘗試檢索元素之前先檢查數(shù)組的長(zhǎng)度,否則它可能會(huì)ArrayIndexOutOfBoundException在運(yùn)行時(shí)拋出。RuntimeException是所有運(yùn)行時(shí)異常的父類。
4、Java異常類的重要方法是什么?
異常及其所有子類不提供任何特定方法,并且所有方法都在基類Throwable中定義。
String getMessage() - 此方法返回消息String of Throwable,并且可以在通過(guò)構(gòu)造函數(shù)創(chuàng)建異常時(shí)提供消息。 String getLocalizedMessage() - 提供此方法,以便子類可以覆蓋它以向調(diào)用程序提供特定于語(yǔ)言環(huán)境的消息。此方法getMessage()的可拋出類實(shí)現(xiàn)只是使用方法來(lái)返回異常消息。 synchronized Throwable getCause() - 此方法返回異常的原因或null id,原因未知。 String toString() - 此方法以String格式返回有關(guān)Throwable的信息,返回的String包含Throwable類和本地化消息的名稱。 void printStackTrace() - 此方法將堆棧跟蹤信息打印到標(biāo)準(zhǔn)錯(cuò)誤流,此方法已重載,我們可以將PrintStream或PrintWriter作為參數(shù)傳遞,以將堆棧跟蹤信息寫入文件或流。
5、解釋Java 7 ARM功能和multi-catch塊?
如果你在一個(gè)try塊中捕獲了很多異常,你會(huì)發(fā)現(xiàn)catch塊代碼看起來(lái)非常難看,并且主要由冗余代碼組成,以記錄錯(cuò)誤,記住Java 7的一個(gè)特性是multi-catch塊。我們可以在一個(gè)catch塊中捕獲多個(gè)異常。具有此功能的catch塊如下所示:
catch(IOException | SQLException | Exception ex){ logger.error(ex); throw new MyException(ex.getMessage()); }
大多數(shù)情況下,我們使用finally塊來(lái)關(guān)閉資源,有時(shí)我們忘記關(guān)閉它們并在資源耗盡時(shí)獲得運(yùn)行時(shí)異常。這些異常很難調(diào)試,我們可能需要查看我們使用該類資源的每個(gè)地方,以確保我們關(guān)閉它。所以java 7的改進(jìn)之一是try-with-resources,我們可以在try語(yǔ)句中創(chuàng)建一個(gè)資源并在try-catch塊中使用它。當(dāng)執(zhí)行來(lái)自try-catch塊時(shí),運(yùn)行時(shí)環(huán)境會(huì)自動(dòng)關(guān)閉這些資源。具有這種改進(jìn)的try-catch塊樣本是:
try (MyResource mr = new MyResource()) { System.out.println("MyResource created in try-with-resources"); } catch (Exception e) { e.printStackTrace(); }
(更多相關(guān)面試題分享:java面試題及答案)
6、Java中Checked和Unchecked Exception有什么區(qū)別?
Checked Exceptions應(yīng)該使用try-catch塊在代碼中處理,否則方法應(yīng)該使用throws關(guān)鍵字讓調(diào)用者知道可能從方法拋出的已檢查異常。未經(jīng)檢查的異常不需要在程序中處理或在方法的throws子句中提及它們。
Exception是所有已檢查異常RuntimeException的超類,而是所有未經(jīng)檢查的異常的超類。請(qǐng)注意,RuntimeException是Exception的子類。
已檢查的異常是需要在代碼中處理的錯(cuò)誤方案,否則您將收到編譯時(shí)錯(cuò)誤。例如,如果您使用FileReader讀取文件,它會(huì)拋出FileNotFoundException,我們必須在try-catch塊中捕獲它或?qū)⑵湓俅螔伣o調(diào)用方法。
未經(jīng)檢查的異常主要是由編程不良引起的,例如在對(duì)象引用上調(diào)用方法時(shí)的NullPointerException,而不確保它不為null。例如,我可以編寫一個(gè)方法來(lái)從字符串中刪除所有元音。確保不傳遞空字符串是調(diào)用者的責(zé)任。我可能會(huì)改變方法來(lái)處理這些場(chǎng)景,但理想情況下,調(diào)用者應(yīng)該處理這個(gè)問(wèn)題。
7、Java中throw和throws關(guān)鍵字有什么區(qū)別?
throws關(guān)鍵字與方法簽名一起用于聲明方法可能拋出的異常,而throw關(guān)鍵字用于破壞程序流并將異常對(duì)象移交給運(yùn)行時(shí)來(lái)處理它。
8、如何在Java中編寫自定義異常?
我們可以擴(kuò)展Exception類或其任何子類來(lái)創(chuàng)建我們的自定義異常類。自定義異常類可以擁有自己的變量和方法,我們可以使用它們將錯(cuò)誤代碼或其他與異常相關(guān)的信息傳遞給異常處理程序。
自定義異常的一個(gè)簡(jiǎn)單示例如下所示。
package com.journaldev.exceptions; import java.io.IOException; public class MyException extends IOException { private static final long serialVersionUID = 4664456874499611218L; private String errorCode="Unknown_Exception"; public MyException(String message, String errorCode){ super(message); this.errorCode=errorCode; } public String getErrorCode(){ return this.errorCode; } }
9、Java中的OutOfMemoryError是什么?
Java中的OutOfMemoryError是java.lang.VirtualMachineError的子類,當(dāng)JVM用完堆內(nèi)存時(shí),它會(huì)拋出它。我們可以通過(guò)提供更多內(nèi)存來(lái)通過(guò)java選項(xiàng)運(yùn)行java應(yīng)用程序來(lái)修復(fù)此錯(cuò)誤。
$>java?MyProgram?-Xms1024m?-Xmx1024m?-XX:PermSize=64M?-XX:MaxPermSize=256m
10、“主線程中的異常”有哪些不同的情況?
一些常見的主線程異常情況是:
主線程java.lang.UnsupportedClassVersionError中的異常:
當(dāng)您的java類是從另一個(gè)JDK版本編譯并且您嘗試從另一個(gè)Java版本運(yùn)行它時(shí),會(huì)出現(xiàn)此異常。
主線程java.lang.NoClassDefFoundError中的異常:
此異常有兩種變體。第一個(gè)是您提供類全名和.class擴(kuò)展名的地方。第二種情況是找不到Class。
主線程java.lang.NoSuchMethodError中的異常:
main:當(dāng)您嘗試運(yùn)行沒(méi)有main方法的類時(shí)會(huì)出現(xiàn)此異常。
線程“main”中的異常java.lang.ArithmeticException:
每當(dāng)從main方法拋出任何異常時(shí),它都會(huì)打印異常是控制臺(tái)。第一部分解釋了從main方法拋出異常,第二部分打印異常類名,然后在冒號(hào)后打印異常消息。
11、Java中的final,finally和finalize有什么區(qū)別?
final和finally是java中的關(guān)鍵字,而finalize是一種方法。
final關(guān)鍵字可以與類變量一起使用,以便它們不能被重新分配,類可以避免按類擴(kuò)展,并且使用方法來(lái)避免子類覆蓋。
finally關(guān)鍵字與try-catch塊一起使用,以提供始終執(zhí)行的語(yǔ)句即使出現(xiàn)一些異常,通常最終也會(huì)用來(lái)關(guān)閉資源。
finalize()方法由垃圾收集器在銷毀對(duì)象之前執(zhí)行,這是確保關(guān)閉所有全局資源的好方法。
在三者之中,最后只涉及到j(luò)ava異常處理。
12、當(dāng)main方法拋出異常時(shí)會(huì)發(fā)生什么?
當(dāng)main()方法拋出異常時(shí),Java Runtime終止程序并在系統(tǒng)控制臺(tái)中打印異常消息和堆棧跟蹤。
13、我們可以有一個(gè)空的catch塊嗎?
我們可以有一個(gè)空的catch塊,但它是最差編程的例子。我們永遠(yuǎn)不應(yīng)該有空的catch塊,因?yàn)槿绻惓1辉搲K捕獲,我們將沒(méi)有關(guān)于異常的信息,并且它將成為調(diào)試它的噩夢(mèng)。應(yīng)該至少有一個(gè)日志記錄語(yǔ)句來(lái)記錄控制臺(tái)或日志文件中的異常詳細(xì)信息。
14、提供一些Java異常處理最佳實(shí)踐?
與Java異常處理相關(guān)的一些最佳實(shí)踐是:
使用特定異常以便于調(diào)試。
在程序中盡早拋出異常(Fail-Fast)。
在程序后期捕獲異常,讓調(diào)用者處理異常。
使用Java 7 ARM功能確保資源已關(guān)閉或使用finally塊正確關(guān)閉它們。
始終記錄異常消息以進(jìn)行調(diào)試。
使用multi-catch塊清潔關(guān)閉。
使用自定義異常從應(yīng)用程序API中拋出單一類型的異常。
遵循命名約定,始終以Exception結(jié)束。
記錄在javadoc中使用@throws的方法拋出的異常。
異常是昂貴的,所以只有在有意義的時(shí)候拋出它。否則,您可以捕獲它們并提供空或空響應(yīng)。
相關(guān)推薦:java入門教程
Atas ialah kandungan terperinci java面試題——異常. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Untuk mengendalikan transaksi JDBC dengan betul, anda mesti terlebih dahulu mematikan mod komit automatik, kemudian melakukan pelbagai operasi, dan akhirnya melakukan atau mengembalikan semula hasilnya; 1. Panggil Conn.SetAutOcommit (palsu) untuk memulakan transaksi; 2. Melaksanakan pelbagai operasi SQL, seperti memasukkan dan mengemaskini; 3. Panggil Conn.Commit () jika semua operasi berjaya, dan hubungi conn.rollback () jika pengecualian berlaku untuk memastikan konsistensi data; Pada masa yang sama, cuba-dengan-sumber harus digunakan untuk menguruskan sumber, mengendalikan pengecualian dengan betul dan menutup sambungan untuk mengelakkan kebocoran sambungan; Di samping itu, adalah disyorkan untuk menggunakan kolam sambungan dan menetapkan mata simpan untuk mencapai rollback separa, dan menyimpan urus niaga sesingkat mungkin untuk meningkatkan prestasi.

Gunakan kelas dalam pakej Java.Time untuk menggantikan kelas lama dan kelas kalendar; 2. Dapatkan tarikh dan masa semasa melalui LocalDate, LocalDateTime dan Tempatan Tempatan; 3. Buat tarikh dan masa tertentu menggunakan kaedah (); 4. Gunakan kaedah tambah/tolak untuk meningkatkan dan mengurangkan masa; 5. Gunakan zoneddatetime dan zonid untuk memproses zon waktu; 6. Format dan parse date string melalui DateTimeFormatter; 7. Gunakan segera untuk bersesuaian dengan jenis tarikh lama apabila perlu; pemprosesan tarikh di java moden harus memberi keutamaan untuk menggunakan java.timeapi, yang memberikan jelas, tidak berubah dan linear

Pra-formancetartuptimemoryusage, quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless scenarios.tyvelopecosyste,

NetworkPortsandFireWallSworkTogethertoenableCommunicationWileensuringsecurity.1.networkportsarevirtualendpointsNumbered0-655 35, Withwell-KnownportsLike80 (http), 443 (https), 22 (ssh), dan25 (smtp) identitispecificservices.2.portsoperateovertcp (boleh dipercayai, c

Koleksi Sampah Java (GC) adalah mekanisme yang secara automatik menguruskan ingatan, yang mengurangkan risiko kebocoran ingatan dengan menuntut semula objek yang tidak dapat dicapai. 1.GC menghakimi kebolehcapaian objek dari objek akar (seperti pembolehubah stack, benang aktif, medan statik, dan lain -lain), dan objek yang tidak dapat dicapai ditandakan sebagai sampah. 2. Berdasarkan algoritma penandaan tanda, tandakan semua objek yang dapat dicapai dan objek yang tidak ditandai. 3. Mengamalkan strategi pengumpulan generasi: Generasi Baru (Eden, S0, S1) sering melaksanakan MinorGC; Orang tua melakukan kurang tetapi mengambil masa lebih lama untuk melakukan MajorGC; Metaspace Stores Metadata kelas. 4. JVM menyediakan pelbagai peranti GC: SerialGC sesuai untuk aplikasi kecil; ParallelGC meningkatkan throughput; CMS mengurangkan

Memilih jenis htmlinput yang betul dapat meningkatkan ketepatan data, meningkatkan pengalaman pengguna, dan meningkatkan kebolehgunaan. 1. Pilih jenis input yang sepadan mengikut jenis data, seperti teks, e -mel, tel, nombor dan tarikh, yang secara automatik boleh menyemak dan menyesuaikan diri dengan papan kekunci; 2. Gunakan HTML5 untuk menambah jenis baru seperti URL, Warna, Julat dan Carian, yang dapat memberikan kaedah interaksi yang lebih intuitif; 3. Gunakan pemegang tempat dan sifat -sifat yang diperlukan untuk meningkatkan kecekapan dan ketepatan pengisian bentuk, tetapi harus diperhatikan bahawa pemegang tempat tidak dapat menggantikan label.

GradleisthebetterChoiceFormostNewProjectSduetoitSsuperiorflexibility, Prestasi, danModernToolingSupport.1.Gradle'sGroovy/KOT lindslismoreconciseandexpressivethanmaven'sverbosexml.2.GradleOutPerformsMaveninBuildSpeedWithIncrementalcompilation, BuildCac

Defer digunakan untuk melaksanakan operasi tertentu sebelum fungsi pulangan, seperti sumber pembersihan; Parameter dinilai dengan serta-merta apabila menangguhkan, dan fungsi-fungsi dilaksanakan mengikut urutan terakhir (LIFO); 1. Pelbagai penahanan dilaksanakan dalam urutan terbalik pengisytiharan; 2. Biasanya digunakan untuk pembersihan yang selamat seperti penutupan fail; 3. Nilai pulangan yang dinamakan boleh diubah suai; 4. Ia akan dilaksanakan walaupun panik berlaku, sesuai untuk pemulihan; 5. Elakkan penyalahgunaan menangguhkan gelung untuk mengelakkan kebocoran sumber; Penggunaan yang betul boleh meningkatkan keselamatan kod dan kebolehbacaan.
