java錯誤,java錯誤僅當顯式請求注釋處理

本文目錄一覽:

java中錯誤(error)和異常(exception)有什麼主要區別?

1.如圖Exception 和 Error都繼承自Throwable類,由jdk api文檔中對該類的描述可以知道它是異常處理機制的基本組成類型。可以由虛擬機拋出或者編碼者自行拋出(throw)

jdk8中文發翻譯Throwable類的描述:Throwable類是Java語言中所有錯誤和異常的Throwable類。 只有作為此類(或其一個子類)的實例的對象由Java虛擬機拋出,或者可以由Java throw語句拋出。 類似地,只有這個類或其子類可以是catch子句中的參數類型。

2.Exception 和 Error 體現了 Java 平台設計者對不同異常情況的分類。Exception 是程序正常運行中,可以預料的意外情況,可能並且應該被捕獲,進行相應處理。

3.Error 是指在正常情況下,不大可能出現的情況,絕大部分的 Error 都會導致程序(比如 JVM 自身)處於非正常的、不可恢復狀態。既然是非正常情況,所以不便於也不需要捕獲,常見的比如 OutOfMemoryError 之類,都是 Error 的子類。

4.Exception 又分為可檢查(checked)異常和不檢查(unchecked)異常,可檢查異常在源代碼里必須顯式地進行捕獲處理,這是編譯期檢查的一部分。前面我介紹的不可查的 Error,是 Throwable 不是 Exception。

如何處理這些異常?

在現實編程中我們一般使用 try-with-resources 和 multiple catch來進行一些異常處理(便利的特性),在編譯時期,會自動生成相應的處理邏輯,比如,自動按照約定俗成 close 那些擴展了 AutoCloseable 或者 Closeable 的對象。

try-with-resources 是一種處理Closeable實現類關閉資源的一種寫法,簡單寫了一個例子可以發現其實這就是一中語法,這種語法可以自動編譯幫忙編譯最後關閉流的操作:

public static void main(String[] args) {

try (BufferedReader br = new BufferedReader(new FileReader(“a”));

BufferedWriter writer = new BufferedWriter(new FileWriter(“a”))) {

// Try-with-resources

} catch (IOException e) {// Multiple catch

// Handle it

}

}

編譯後class

public static void main(String[] args) {        try {

BufferedReader br = new BufferedReader(new FileReader(“a”));

Throwable var2 = null;            try {

BufferedWriter writer = new BufferedWriter(new FileWriter(“a”));

Object var4 = null;                if (writer != null) {                    if (var4 != null) {                        try {

writer.close();

} catch (Throwable var15) {

((Throwable)var4).addSuppressed(var15);

}

} else {

writer.close();

}

}

} catch (Throwable var16) {

var2 = var16;                throw var16;

} finally {                if (br != null) {                    if (var2 != null) {                        try {

br.close();

} catch (Throwable var14) {

var2.addSuppressed(var14);

}

} else {

br.close();

}

}

}

} catch (IOException var18) {

;

}

}

異常處理的兩個基本原則

盡量不要捕獲類似 Exception 這樣的通用異常,而是應該捕獲特定異常

這是因為在日常的開發和合作中,我們讀代碼的機會往往超過寫代碼,軟體工程是門協作的藝術,所以我們有義務讓自己的代碼能夠直觀地體現出盡量多的信息,而泛泛的 Exception 之類,恰恰隱藏了我們的目的。另外,我們也要保證程序不會捕獲到我們不希望捕獲的異常。比如,你可能更希望 RuntimeException 被擴散出來,而不是被捕獲。

不要生吞(swallow)異常。這是異常處理中要特別注意的事情,因為很可能會導致非常難以診斷的詭異情況。

如果我們不把異常拋出來,或者也沒有輸出到日誌(Logger)之類,程序可能在後續代碼以不可控的方式結束。沒人能夠輕易判斷究竟是哪裡拋出了異常,以及是什麼原因產生了異常。

在寫程序時可以通過Objects類(jdk提供),或者斷言等提前判斷問題,如空指針異常的一些值的處理Objects. requireNonNull(filename);而不是使用之後有問題再系統拋出異常,這可能就會不直觀的找到問題所在。即:Throw early, catch late 原則

希望對您有所幫助!~

java中常見的幾種異常

1、空指針異常類:NullPointerException

調用了未經初始化的對象或者是不存在的對象。經常出現在創建圖片,調用數組這些操作中,比如圖片未經初始化,或者圖片創建時的路徑錯誤等等。對數組操作中出現空指針, 即把數組的初始化和數組元素的初始化混淆起來了。

數組的初始化是對數組分配需要的空間,而初始化後的數組,其中的元素並沒有實例化, 依然是空的,所以還需要對每個元素都進行初始化(如果要調用的話)。

2、數據類型轉換異常:java.lang.ClassCastException

當試圖將對某個對象強制執行向下轉型,但該對象又不可轉換又不可轉換為其子類的實例時將引發該異常,如下列代碼。

Object obj = new Integer(0);

String str = obj;

3、沒有訪問許可權:java.lang.IllegalAccessException

當應用程序要調用一個類,但當前的方法即沒有對該類的訪問許可權便會出現這個異常。對程序中用了Package的情況下要注意這個異常。

4、方法的參數錯誤:java.lang.IllegalArgumentException

比如g.setColor(int red,int green,int blue)這個方法中的三個值,如果有超過255的也會出現這個異常,因此一旦發現這個異常,我們要做的,就是趕緊去檢查一下方法調用中的參數傳遞是不是出現了錯誤。

5、數組下標越界異常:java.lang.IndexOutOfBoundsException

查看調用的數組或者字元串的下標值是不是超出了數組的範圍,一般來說,顯示(即直接用常數當下標)調用不太容易出這樣的錯,但隱式(即用變數表示下標)調用就經常出錯了。

還有一種情況,是程序中定義的數組的長度是通過某些特定方法決定的,不是事先聲明的,這個時候先查看一下數組的length,以免出現這個異常。

6、文件已結束異常:EOFException

當程序在輸入的過程中遇到文件或流的結尾時,引發異常。因此該異常用於檢查是否達到文件或流的結尾

7、文件未找到異常:FileNotFoundException

當程序試圖打開一個不存在的文件進行讀寫時將會引發該異常。該異常由FileInputStream,FileOutputStream,RandomAccessFile的構造器聲明拋出,即使被操作的文件存在,但是由於某些原因不可訪問,比如打開一個只讀文件進行寫入,這些構造方法仍然會引發異常。

8、字元串轉換為數字異常:NumberFormatException

當試圖將一個String轉換為指定的數字類型,而該字元串確不滿足數字類型要求的格式時,拋出該異常.如現在講字元型的數據「123456」轉換為數值型數據時,是允許的。

但是如果字元型數據中包含了非數字型的字元,如123#56,此時轉換為數值型時就會出現異常。系統就會捕捉到這個異常,並進行處理。

9、指定的類不存在: java.lang.ClassNotFoundException

這裡主要考慮一下類的名稱和路徑是否正確即可,通常都是程序試圖通過字元串來載入某個類時可能引發異常。比如:調用Class.forName;或者調用ClassLoad的finaSystemClass;或者LoadClass;

10、實例化異常:java.lang.InstantiationException

當試圖通過Class的newInstance方法創建某個類的實例,但程序無法通過該構造器來創建該對象時引發。Class對象表示一個抽象類,介面,數組類,基本類型 。該Class表示的類沒有對應的構造器。

java 程序運行錯誤怎麼辦?

看是發生了什麼錯誤,大多數錯誤都可以通過改寫原編碼來解決。

程序的錯誤可以抽象分為三類:語法錯誤、運行錯誤和邏輯錯誤。

1、語法錯誤

是指由於編程中輸入不符合語法規則而產生的。程序編譯就通不過,程序不能運行起來。此類錯誤最簡單,調試起來比較容易

例如:表達式不完整、缺少必要的標點符號、關鍵字輸入錯誤、數據類型不匹配、循環語句或選擇語句的關鍵字不匹配等。通常,編譯器對程序進行編譯的過程中,會把檢測到的語法錯誤以提示的方式列舉出來,又稱為編譯錯誤。

語法錯誤的調試,則可以由集成開發環境提供的調試功能來實現,在程序進行編譯時,編譯器會對程序中的語法錯誤進行診斷。

編譯診斷的語法錯誤分為3中:致命錯誤、錯誤和警告。

(1)致命錯誤:這個錯誤大多是編譯程序內部發生的錯誤,發生這類錯誤時,編譯被迫中止,只能重新啟動編譯程序,但是這類錯誤很少發生,為了安全,編譯前最好還是先保存程序。

(2)錯誤:這個錯誤通常是在編譯時,語法不當所引起的。例如:括弧不匹配,變數未聲明等。產生這類錯誤時,編譯程序會出現報錯提示,我們根據提示對源程序進行修改即可。這類錯誤是出現最多的。

(3)警告:是指被編譯程序懷疑有錯,但是不確定,有時可強行通過。例如:沒有加void聲明的主函數沒有返回值,double數據被轉換為float類型等。這些警告中有些會導致錯誤,有些可以通過。

常規解決方法:此類錯誤一般程序編譯系統會自動提示相應的錯誤地點和錯誤原因,比如哪一行代碼少了個括弧等諸如此類的提示,常見的錯誤,看懂直接改正即可,如果是看不懂原因,可以將錯誤提示信息輸入搜索引擎查找一下,一般都能找到具體的解決辦法。或者有些編程平台會本身提供一個本地或者在線的信息庫,提供詳細的錯誤原因和解決辦法,比如微軟的.NET開發平台。

2、運行錯誤

指程序在運行過程中出現的錯誤。程序通過語法錯誤檢測,但是運行的時候出現錯誤,導致程序被迫終止,此類錯誤有特定的發生條件,因此能夠準確的定位錯誤代碼段,因而調試也比較方便。

例如:除法運算時除數為0 、數組下標越界、文件打不開、磁碟空間不夠、資料庫連接錯誤等。

此類錯誤發生時,編譯平台一般也會提示相應的信息,對於常規的錯誤會有比較精確地提示,但有時提示的錯誤原因會比較模糊,但因為此類錯誤一般在程序運行時,只在特定的條件下才會發生,所以根據錯誤發生的條件,能夠大致判斷程序出錯的代碼段,結合錯誤的原因,也能比較方便的調試出錯誤。

3、邏輯錯誤

程序運行後,沒有得到設計者預期的結果,這就說明程序存在邏輯錯誤。這種錯誤在語法上是有效的,但是在邏輯上是錯誤的。

程序運行了,也沒有出錯,但是執行出來的結果不是用戶想要的,分為兩種情況:

A、       能夠看出錯誤:比如查詢工資大於5000的人員名單,卻出現了3000的;

B、       看不出錯誤,直到因緣際會發現程序肯定出錯了,後果很嚴重:比如進行一個符合大型運算,把某個常數輸入錯了,最後的結果人工無法判斷對錯,又以該結果進行其它的運算等等,最後發現錯了誤差過大,就得從頭排查錯誤。

java安裝錯誤1601?

當前發現出現java安裝出現1603錯誤的主要原因:最大可能:安裝路徑不是默認的安裝路徑,而是用戶自定義安裝的,並且安裝路徑有中文,一般就會出現這個錯誤。另外一個可能:電腦是32位系統,但是安裝的jdk64位的,也可能會出現這個問題。其餘可能:如安裝過程中內存不足,程序本身有缺陷等等都是可能的。解決辦法:重新安裝符合電腦位數的jdk(針對32位系統只能安裝32位的jdk);安裝jdk過程中,選擇安裝路徑不要出現中文。如果是內存不足的,可以換個磁碟安裝,如果還是安裝不上的話,建議重新下載jdk進行安裝。

java 程序中的三種錯誤類型分別是什麼?

錯誤,分為編碼錯誤,運行錯誤,jvm內部錯誤。

編碼錯誤在eclipse等開發工具 中可以直觀的看到,這種錯誤比較少見。

運行錯誤,又稱運行時異常,這是代碼邏輯錯誤導致的,發生這種錯誤時一定要靜下心,從程序入口處尋找錯誤誘因。

jvm內部錯誤屬於Java虛擬機內部錯誤,比較少見,發生這種錯誤時,建議重啟計算機。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/276071.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-17 19:38
下一篇 2024-12-17 19:38

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論