異常
異常的概念


stackOverFlow:棧溢出
Exception分為檢查型異常和非檢查型異常。檢查型異常必須在源碼中進行捕獲處理,這是編譯檢查的一部分。除了RuntimeExceion及其子類之外的異常都是檢查型異常。非檢查型異常就是所謂的RuntimeExceion,類似NullPointerException,ArrayIndexOfBoundException就是非檢查型異常,通常是可以通過編碼避免的邏輯錯誤,具體根據需要判斷是否需要捕獲,編譯期不檢查(注意同樣的,運行時異常也是可以捕獲的),如果拋出了非檢查型異常,那就是編碼邏輯有問題,要解決。
常見異常:

常見Error:
StackOverFlowError(棧溢出,在無限遞歸時常見)
OutOfMemoryError(內存溢出)
捕獲異常


注意,我們是不應該捕獲Error,而不是不能捕獲Error:Error是正常情況下不大可能出現的情況,絕大部分的Error都會導致程序狀態不正常,不可恢復,既然是非正常情況,所以不便也不需要處理。但是既然Error也是繼承於Throwable的,說明它也是可以被捕獲的,只是我們通常不會這樣做而已:
/**
* @program: OJ
* @description:嘗試捕獲Error
* @author: JiaDing
* @create: 2020-03-29 17:30
**/
public class CatchError {
public static void main(String[] args) {
final String errorMessage="I'm an error,please catch me";
try{
throw new Error(errorMessage);
}catch (Throwable e){
e.printStackTrace();
}
System.out.println("捕捉完成");
}
}
在try中的代碼,報錯后就結束,不會執行try中剩下的部分

拋出異常
throw exception

拋出異常后在調用位置去捕獲處理
main方法也可以拋出異常,但是拋出就直接甩到虛擬機了,程序中對其將無法處理,此時就直接結束程序的運行,所以一般不這樣做
重寫方法不能拋出比被重寫方法范圍更大的異常類型,也就是說,子類不能拋出比父類更大范圍的異常
人工拋出異常:


用戶自定義異常類必須繼承現有異常類
JAVA提供的異常類一般是夠用的,只有特殊情況才需要自定義,情況少見
注解
關於注解,更好的方式是看這篇專業的文章:https://blog.csdn.net/javazejian/article/details/71860633





@Deprecated過時方法不是不能調用,只是顯示出來,便於選擇和之后的迭代
示例:

這些內容可以被抽取到dlc文件中
javadoc test1.java//抽取注解到文檔中
生成的文件們:

生成的文檔頁面(HTML):



@Target(ElementType.FIELD)//聲明這個注解類是給其他類的屬性做注解
@Rectention(RetentionPolicy.RUNTIME)//定義注解的生命周期
@Documneted//表示將注解寫到文檔中
@interface TestAnn{
? public int id() default 0;//default是默認值
public String desc() default "";
}
使用:

對一個屬性進行注解

注解可以用來替換配置文件的作用以簡化操作
示例,依然以之前使用配置文件來調用任意類的任意方法的例子為例:



