Q1,錯誤和例外有什么區別?
錯誤是在運行時發生的不可恢復的情況,如OutOfMemory錯誤,這些JVM錯誤無法在運行時修復,盡管可以在catch塊中捕獲錯誤,但是應用程式的執行將停止并且無法恢復,
而例外是由于輸入錯誤或人為錯誤等原因而發生的情況,例如,如果指定的檔案不存在,則將拋出FileNotFoundException,否則,如果嘗試使用null參考,則會發生NullPointerException,在大多數情況下,有可能從例外中恢復(可能是通過向用戶提供輸入正確值的反饋等),
Q2,您如何處理Java例外?
Java中有五個關鍵字用于處理例外:
- try
- catch
- finally
- throw
- throws
Q3,Checked Exception和Unchecked Exception有什么區別?
檢查例外
- 擴展Throwable類的類(RuntimeException和Error除外)被稱為檢查例外,
- 被檢查的例外在編譯時被檢查,
- 示例:IOException,SQLException等,
未經檢查的例外
- 擴展RuntimeException的類稱為未檢查的例外,
- 未檢查的例外不會在編譯時檢查,
- 例如:ArithmeticException,NullPointerException等,
Q4,關鍵字final,finally和finalize有什么目的?
final:**
Final用于對類,方法和變數施加限制,不能繼承final類,不能覆寫final方法,并且不能更改final變數值,讓我們看下面的示例,以更好地理解它,
class FinalVarExample {
public static void main( String args[]){
final int a=10; // Final variable
a=50; //Error as value can't be changed
}
}
finally
最后用于放置重要代碼,無論是否處理例外,都將執行該代碼,讓我們看下面的示例,以更好地理解它,
class FinallyExample {
public static void main(String args[]){
try {
int x=100;
}catch(Exception e) {
System.out.println(e);
}finally {
System.out.println("finally block is executing");
}
}
}
finalize
Finalize用于在垃圾回收之前就執行清理處理,讓我們看下面的示例,以更好地理解它,
class FinalizeExample {
public void finalize() {
System.out.println("Finalize is called");
}
public static void main(String args[]){
FinalizeExample f1=new FinalizeExample();
FinalizeExample f2=new FinalizeExample();
f1= NULL;
f2=NULL;
System.gc();
}
}
Q5,throw和throws有什么區別?
| throw | throws |
|---|---|
| 引發用于顯式引發例外, | 引發用于宣告例外, |
| 已檢查的例外不能僅通過throw傳播, | 可以使用throws傳播檢查的例外, |
| 引發后跟一個實體, | 投擲之后是上課, |
| 在方法中使用了throw, | 拋出與方法簽名一起使用, |
| 您不能拋出多個例外 | 您可以宣告多個例外,例如public void method()引發IOException,SQLException, |
Q6,什么是Java中的例外層次結構?
層次結構如下:
Throwable是所有Exception類的父類,例外有兩種型別:檢查的例外和UncheckedExceptions或RunTimeExceptions,兩種型別的例外都擴展了Exception類,而錯誤又進一步分為虛擬機錯誤和斷言錯誤,
Q7,如何創建自定義例外?
要創建您自己的例外,請擴展Exception類或其任何子類,
- class New1Exception extends Exception {} //這將創建Checked Exception
- 類NewException擴展了IOException {} //這將創建Checked例外
- 類NewException擴展了NullPonterExcpetion {} //這將創建UnChecked例外
Q8,Java例外類的重要方法有哪些?
例外及其所有子類均未提供任何特定方法,并且所有方法均在基類Throwable中定義,
- String getMessage() –此方法回傳Throwable訊息字串,并且可以在通過其建構式創建例外時提供該訊息,
- String getLocalizedMessage()–提供此方法,以便子類可以重寫它以向呼叫程式提供特定于語言環境的訊息,此方法的可拋出類實作僅使用getMessage()方法即可回傳例外訊息,
- Synchronized Throwable getCause() –此方法回傳例外原因,或者回傳null id,原因未知,
- String toString() –此方法以String格式回傳有關Throwable的資訊,回傳的String包含Throwable類的名稱和本地化訊息,
- void printStackTrace() –此方法將堆疊跟蹤資訊列印到標準錯誤流,此方法已多載,我們可以傳遞PrintStream或PrintWriter作為引數,以將堆疊跟蹤資訊寫入檔案或流,
Q9,行程和執行緒之間有什么區別?
| Process | Thread | |
|---|---|---|
| 定義 | 程式的執行實體稱為行程, | 執行緒是行程的子集, |
| 通訊 | 行程必須使用行程間通信與同級行程進行通信, | 執行緒可以直接與其行程中的其他執行緒通信, |
| 控制 | 行程只能控制子行程, | 執行緒可以對同一行程的執行緒行使相當大的控制權, |
| 變化 | 父行程中的任何更改都不會影響子行程, | 主執行緒中的任何更改都可能影響該行程其他執行緒的行為, |
| 記憶 | 在單獨的記憶體空間中運行, | 在共享記憶體空間中運行, |
| 受控制于 | 行程由作業系統控制, | 執行緒由程式中的程式員控制, |
| 依存關系 | 流程是獨立的, | 執行緒是依賴的, |
Q10,什么是finally塊?有沒有什么情況下最終將不會執行?
最終塊是始終執行一組陳述句的塊,它始終與try塊相關聯,無論是否發生任何例外,
是的,如果程式通過呼叫System.exit()或導致致命錯誤(導致行程中止)退出,則最終將不會執行,
Q11,什么是同步?
同步是指多執行緒,同步的代碼塊一次只能由一個執行緒執行,由于Java支持執行多個執行緒,因此兩個或多個執行緒可以訪問相同的欄位或物件,同步是使所有并發執行緒在執行中保持同步的過程,同步避免了由于共享記憶體視圖不一致而導致的記憶體一致性錯誤,當一個方法被宣告為已同步時,執行緒將保持該方法物件的監視器,如果另一個執行緒正在執行同步方法,則該執行緒將被阻塞,直到該執行緒釋放監視器,

Q12,我們可以在單個try塊下寫入多個catch塊嗎?
是的,我們可以在單個try塊下包含多個catch塊,但是方法應從特定到一般,讓我們通過一個編程示例來理解這一點,
public class Example {
public static void main(String args[]) {
try {
int a[] = new int[10];
a[10] = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Arithmetic exception in first catch block");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Array index out of bounds in second catch block");
} catch (Exception e) {
System.out.println("Any exception in third catch block");
}
}
}
Q13,Java例外類的重要方法有哪些?
方法在基類Throwable中定義,Java例外類的一些重要方法如下所述,
- String getMessage() –此方法回傳有關例外的訊息String,可以通過其建構式提供訊息,
- public StackTraceElement [] getStackTrace()–此方法回傳一個陣列,其中包含堆疊跟蹤中的每個元素,索引0處的元素表示呼叫堆疊的頂部,而陣列中的最后一個元素表示呼叫堆疊底部的方法,
- 同步的Throwable getCause() –此方法回傳Throwable物件表示的例外原因或null ID,
- String toString() –此方法以String格式回傳資訊,回傳的字串包含Throwable類的名稱和本地化訊息,
- void printStackTrace() –此方法將堆疊跟蹤資訊列印到標準錯誤流,
Q14,什么是Java中的OutOfMemoryError?
OutOfMemoryError是java.lang.Error的子類,通常在我們的JVM記憶體不足時發生,
Q15,什么是執行緒?
執行緒是可以由調度程式獨立執行的最小編程指令,在Java中,所有程式都將至少具有一個執行緒,該執行緒稱為主執行緒,當程式開始執行時,此主執行緒由JVM創建,主執行緒用于呼叫程式的main(),
Q16,創建執行緒的兩種方法是什么?
在Java中,可以通過以下兩種方式創建執行緒:
- 通過實作Runnable介面,
- 通過擴展執行緒
Q17,Java中有哪些不同型別的垃圾收集器?
Java中的垃圾收集程式,可以幫助進行隱式記憶體管理,由于在Java中,可以使用new關鍵字動態創建物件,一旦創建物件,該物件將消耗一些記憶體,一旦作業完成,并且不再有物件的參考,使用垃圾回收的Java將破壞該物件并釋放其占用的記憶體,Java提供了四種型別的垃圾收集器:
- 串行垃圾收集器
- 并行垃圾收集器
- CMS垃圾收集器
- G1垃圾收集器
歡迎關注 Java架構師社區公眾號.
本文轉載自Java架構師必看 ,更多內容點擊查看!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/174663.html
標籤:Java
上一篇:SpringBoot整合Elasticsearch游標查詢(scroll)
下一篇:Python網路爬蟲快速上手教程
