java高級語法3:異常和注解


異常

異常的概念

1567956906711
img
stackOverFlow:棧溢出

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

常見異常:

1567957129912

常見Error:

StackOverFlowError(棧溢出,在無限遞歸時常見)

OutOfMemoryError(內存溢出)

捕獲異常

1567957185923
1567957204561
注意,我們是不應該捕獲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中剩下的部分

1567957626133

拋出異常

throw exception

1567958104966
拋出異常后在調用位置去捕獲處理

main方法也可以拋出異常,但是拋出就直接甩到虛擬機了,程序中對其將無法處理,此時就直接結束程序的運行所以一般不這樣做

重寫方法不能拋出比被重寫方法范圍更大的異常類型,也就是說,子類不能拋出比父類更大范圍的異常

人工拋出異常:

1567958149640
1567958204506
用戶自定義異常類必須繼承現有異常類

JAVA提供的異常類一般是夠用的,只有特殊情況才需要自定義,情況少見


注解

關於注解,更好的方式是看這篇專業的文章:https://blog.csdn.net/javazejian/article/details/71860633

1568531966023
1567995858440
1567995905493
1568532709480
1567995982905
@Deprecated過時方法不是不能調用,只是顯示出來,便於選擇和之后的迭代

示例:

1568532297222
這些內容可以被抽取到dlc文件中

javadoc test1.java//抽取注解到文檔中

生成的文件們:

1568532400284
生成的文檔頁面(HTML):

1568532434656
1567996077532
1567996399302
@Target(ElementType.FIELD)//聲明這個注解類是給其他類的屬性做注解

@Rectention(RetentionPolicy.RUNTIME)//定義注解的生命周期

@Documneted//表示將注解寫到文檔中

@interface TestAnn{

? public int id() default 0;//default是默認值

public String desc() default "";

}

使用:

1567996338339
對一個屬性進行注解

1567996392412
注解可以用來替換配置文件的作用以簡化操作

示例,依然以之前使用配置文件來調用任意類的任意方法的例子為例:

1568534902021
1568535126089

1568535173886


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM