相信作為程序員的我們在對程序進行編譯過程中經常會遇到錯誤,或者在運行過程中出現錯誤,在這里主要跟大家談談經常遇到的一些異常與錯誤,以及解決辦法。
異常是指程序在編譯或運行過程出現的錯誤。
在java.lang包中Throwable包含了所有的異常。
Error (錯誤) 和Exception(異常)
(1)Error(錯誤)
一旦發生無法修復,但可以避免發生。
常見錯誤類:
IOError:I/O錯誤,當發生嚴重的I/O錯誤時,拋出此錯誤。
VirtualMachineError:虛擬機錯誤,當 Java 虛擬機崩潰或用盡了它繼續操作所需的資源時,拋出該錯誤。
StackOverflowError:棧內存滿了,當應用程序遞歸太深而發生堆棧溢出時,拋出該錯誤。
OutofMemoryError:堆內存滿了,因為內存溢出或沒有可用的內存提供給垃圾回收器時,Java 虛擬機無法分配一個對象,這時拋出該異常。
以上是一些常見的錯誤,在Error類中還有一些別的錯誤(參照文件Java.lang.Throwable.Error).
(2)Exception(異常)
一旦發生,可以捕獲並處理,不會導致程序終止,有時可以避免有時無法避免。
異常的分類:
1.編譯時異常(需要強制處理) 2.運行時異常(不需要強制處理)
常見的異常有:
IOException:輸入輸出流異常
FileNotFoundException:文件找不到的異常
ClassNotFoundException:類找不到的異常
DataFormatException:數據格式化異常
NoSuchFieldException:沒有匹配的屬性異常
NoSuchMethodException:沒有匹配的方法異常
SQLException:資料庫操作異常
TimeoutException:執行超時異常
常見的運行時異常:
RuntimeException:運行時異常
NullPointerException:空指針異常
:數組越界異
ClassCastException:類型轉換異常
IllegalArgumentException:非法的參數異常
InputMismatchException:輸入不匹配
以上是常見的一些異常,另外還有別的異常,參見文件:Java.lang.Throwable.Exception
既然我們常常會遇到一些異常,那我們如何來處理這些異常就是一個急需解決的事情。
(1) 如何處理編譯時異常?
方法一:將需要處理的代碼塊放在一個try...catch...中
try{
//需要處理異常的代碼
}catch(XXXException ef){
ef.printStackTrace();
}
我們方法一就是要將我們不確定的代碼放入try......catch中,先進行try一下,如果沒有異常,則不會觸發catch,沒有輸出,一旦出現異常,那麼catch就會工作,在catch中捕獲異常信息,根據異常信息進行補救措施。
如以下代碼:
從結果可以看出,我們在輸入數據的時候出現錯誤,這樣通過自定義異常能夠讓我們更直接快速的找到運行或編譯時的異常。
在上述中我們分別提到了三種throw,分別是Throwable,Throws以及throw,那麼到底三者有什麼區別?
Throwable:是指在在Java.lang包中的一個類,其包含了所有的異常和錯誤,其中類Error和Exception 是它
的子類。
Thows:是指在解決編譯時異常,將方法中異常拋給上一級,在方法後面要加Throw Exception來進行拋。
throw:是指在自定義異常時,如果方法出現異常,那麼將作為引用方法的對象拋出。即拋出異常。
希望對您有所幫助!~
2. java編譯異常有哪幾個
編譯異常是Exception下除了RuntimeException及其子類以外的所有子類
Java提供了兩類主要的異常:RuntimeException和CheckedException.
checked 異常也就是我們經常遇到的IO異常,以及SQL異常都是這種異常。對於這種異常,JAVA編譯器強制要求我們必需對出現的這些異常進行catch。所以,面對這種異常不管我們是否願意,只能自己去寫一大堆catch塊去處理可能的異常。
runtime exception,也稱運行時異常,我們可以不處理。當出現這樣的異常時,總是由虛擬機接管。比如:我們從來沒有人去處理過NullPointerException異常,它就是運行時異常,並且這種異常還是最常見的異常之一。
不管是不是RuntimeException 只要有異常 而且你還沒try / catch 那他一定會中斷執行 非RuntimeException 在編譯的時候 編譯器會幫你檢查 有沒有正確、完整的try / catch 如果沒有 編譯不過 RuntimeException 在編譯的時候 不檢查
參考自:http://m.blog.csdn.net/blog/zhou1216141078/12921609
3. java的異常分類有哪些
異常的分類:Throwable包含了錯誤(Error)和異常(Excetion兩類)。Exception又包含了運行時異常(RuntimeException, 又叫非檢查異常)和非運行時異常(又叫檢查異常)。
Error是程序無法處理了, 如果OutOfMemoryError、OutOfMemoryError等等, 這些異常發生時, java虛擬機一般會終止線程。
運行時異常都是RuntimeException類及其子類,如 NullPointerException、IndexOutOfBoundsException等, 這些異常是不檢查的異常, 是在程序運行的時候可能會發生的, 所以程序可以捕捉, 也可以不捕捉. 這些錯誤一般是由程序的邏輯錯誤引起的, 程序應該從邏輯角度去盡量避免。
檢查異常是運行時異常以外的異常, 也是Exception及其子類, 這些異常從程序的角度來說是必須經過捕捉檢查處理的, 否則不能通過編譯. 如IOException、SQLException等。
4. java中到底有沒有編譯時異常,我老師說編譯時異常時不存在的有的只是編譯錯誤
你可以簡單的理解一下,你再編譯的時候編譯器都不能通過的,就比如明顯的語法錯誤。你老師說的就是這種。一般意思就是平常說異常都是運行時異常。在編譯時候報出來的大紅X都是錯誤了的東西,這時候你eclipsse都不能運行你這個.java
5. java異常問題
列印
Exception in method
After the method call
異常分兩種:
1:編譯時被檢查的異常,只要是Exception及其子類都是編譯時被檢測的異常。
2:運行時異常,其中Exception有一個特殊的子類RuntimeException,以及RuntimeException的子類是運行異常,也就說這個異常是編譯時不被檢查的異常。
而RuntimeException的優先順序比Exception 要高,所以在System.out.print(s.charAt(3));出錯時,優先被RuntimeException處理掉了,而處理掉了異常,異常就被消耗了,上面就不需要捕獲處理了,上面的調用便可以正常的運行下去。所以"After the method call"被列印
6. java 編譯異常
錯誤代碼:400 400錯誤是由於不正確的請求造成的,說明正在搜索的網頁可能已經刪除、更名或暫時不可用。 錯誤代碼:401.1 401.1錯誤是由於登陸失敗造成的,說明沒有許可權查看該目錄或網頁。 錯誤代碼:401.2 401.2錯誤是由於伺服器配置問題而導致登陸失敗,由於伺服器端腳本未能正確發送 WWW 身份驗證頭文件欄位。如果要通過 Active Server Pages 腳本完成此項任務,可以使用"Response"對象的"AddHeader"方法來要求客戶端用特定身份驗證方法訪問資源。 錯誤代碼:401.3 401.3錯誤是由於資源上的 ACL 導致未被授權而無權訪問網頁或目錄。 錯誤代碼:401.4 401.4錯誤是由於篩選器導致授權失敗。如果Web 伺服器安裝了篩選器程序以檢查連接到伺服器的用戶。該篩選器程序能夠禁止通過連接到伺服器的身份驗證來訪問資源。 錯誤代碼:401.5 401.5錯誤是由於 ISAPI/CGI 應用程序導致授權失敗。如果所要訪問的 Web 伺服器地址上安裝了 ISAPI 或 CGI 程序用於在繼續執行之前檢驗用戶證書。該程序能夠禁止通過連接到伺服器的身份驗證證書來訪問資源。 錯誤代碼:403.1 403.1錯誤是由於"執行"訪問被禁止而造成的,若試圖從目錄中執行 CGI、ISAPI 或其他可執行程序,但該目錄不允許執行程序時便會出現此種錯誤。 錯誤代碼:403.2 403.2錯誤是由於"讀取"訪問被禁止而造成的。導致此錯誤是由於沒有可用的默認網頁並且沒有對目錄啟用目錄瀏覽,或者要顯示的 HTML 網頁所駐留的目錄僅標記為"可執行"或"腳本"許可權。 錯誤代碼:403.3 403.3錯誤是由於"寫入"訪問被禁止而造成的,當試圖將文件上載到目錄或在目錄中修改文件,但該目錄不允許"寫"訪問時就會出現此種錯誤。 錯誤代碼:403.4 403.4錯誤是由於要求SSL而造成的,您必須在要查看的網頁的地址中使用"https"。 錯誤代碼:403.5 403.5錯誤是由於要求使用 128 位加密演算法的 Web 瀏覽器而造成的,如果您的瀏覽器不支持128位加密演算法就會出現這個錯誤,您可以連接微軟網站進行瀏覽器升級。 錯誤代碼:403.6 403.6錯誤是由於IP 地址被拒絕而造成的。如果伺服器中有不能訪問該站點的 IP 地址列表,並且您使用的 IP 地址在該列表中時您就會返回這條錯誤信息。 錯誤代碼:403.7 403.7錯誤是因為要求客戶證書,當需要訪問的資源要求瀏覽器擁有伺服器能夠識別的安全套接字層 (SSL) 客戶證書時會返回此種錯誤。 錯誤代碼:403.8 403.8錯誤是由於禁止站點訪問而造成的,若伺服器中有不能訪問該站點的 DNS 名稱列表,而您使用的 DNS 名稱在列表中時就會返回此種信息。請注意區別403.6與403.8錯誤。 錯誤代碼:403.9 403.9錯誤是由於連接的用戶過多而造成的,由於Web 伺服器很忙,因通訊量過多而無法處理請求時便會返回這條錯誤。 錯誤代碼:403.10 403.10錯誤是由於無效配置而導致的錯誤,當您試圖從目錄中執行 CGI、ISAPI 或其他可執行程序,但該目錄不允許執行程序時便會返回這條錯誤。 錯誤代碼:403.11 403.11錯誤是由於密碼更改而導致無權查看頁面。 錯誤代碼:403.12 403.12錯誤是由於映射器拒絕訪問而造成的。若要查看的網頁要求使用有效的客戶證書,而您的客戶證書映射沒有許可權訪問該 Web 站點時就會返回映射器拒絕訪問的錯誤。 錯誤代碼:403.13 403.13錯誤是由於需要查看的網頁要求使用有效的客戶證書而使用的客戶證書已經被吊銷,或者無法確定證書是否已吊銷造成的。 錯誤代碼:403.15 403.15錯誤是由於客戶訪問許可過多而造成的,當伺服器超出其客戶訪問許可限制時會返回此條錯誤。 錯誤代碼:403.16 403.16錯誤是由於客戶證書不可信或者無效而造成的。 錯誤代碼:403.17 403.17錯誤是由於客戶證書已經到期或者尚未生效而造成的。 錯誤代碼:404.1 404.1錯誤表明所訪問 Web 站點的 IP 地址不接受對埠(請求的來源埠)的請求。一般來說,404.1 錯誤只會出現在具有多個 IP 地址的計算機上。如果在特定 IP 地址/埠組合上收到客戶請求,而且在特定的埠上 IP 地址並沒有設置為偵聽,則 IIS 將返回 404.1 HTTP 錯誤。例如,如果一台計算機有兩個 IP 地址,而只將其中一個 IP 地址配置為在埠 80 上偵聽,則其它 IP 地址從埠 80 收到的任何請求都將導致 IIS 返回 404.1 錯誤。只應在服務級設置這一錯誤,因為只有當伺服器上使用多個 IP 地址時它才返回給客戶。 錯誤代碼:404b 404b錯誤是由於無法找到文件而造成的,通常是由於正在搜索的網頁可能已經刪除、更名或暫時不可用。 錯誤代碼:405 405錯誤是由於資源被禁止而導致的網頁地址不正確,因此要尋找的網頁無法顯示。 錯誤代碼:406 406錯誤是由於瀏覽器無法打開正在尋找的資源而導致的錯誤。 錯誤代碼:407 407錯誤是由於代理伺服器必須先驗證身份,然後才處理請求。 錯誤代碼:410 410錯誤要尋找的網頁已被永久刪除而導致的,這意味著資源永遠無法使用。 錯誤代碼:412 412錯誤是由於要查看的網頁設置有先決條件,因此該請求無法完成。一般是網頁中有一個或多個請求標題欄位中具有先決條件,這些欄位經伺服器測試後被認為是"FALSE"。客戶端為當前資源的 meta 信息(頭文件欄位數據)設置了先決條件,以便防止請求的方法被用於指定資源外的其他資源。 錯誤代碼:414 414錯誤是由於請求的 URI 太長,伺服器拒絕處理請求而造成的。一般的可能性有: 1)客戶端錯誤地將 POST 請求轉換為帶有長查詢信息的 GET 請求。 2)或者是客戶端遇到重定向問題(例如,重定向 URL 的前綴指向自身的後綴)。 3)伺服器遭到客戶端的攻擊,該客戶端試圖利用那些使用定長緩沖來讀取或控制請求 URI 的伺服器上的安全漏洞。 錯誤代碼:500 500錯誤是由於內部伺服器錯誤造成的。 錯誤代碼:500.11 500.11錯誤是由於伺服器關閉而造成的資源無法訪問,Web 站點關閉期間無法處理請求。 錯誤代碼:500.12 500.12錯誤是由於應用程序重新啟動而造成的資源暫時無法訪問,Web站點重新啟動期間無法處理請求。 錯誤代碼:500.13 500.13錯誤是由於伺服器太忙而造成的,此時無法處理請求。通訊量超出 Web 站點的能力。 錯誤代碼:500.14 500.14錯誤是由於應用程序無效而造成的,部分 Web 站點不可用。Web 站點應用程序配置存在問題,無法處理請求。 錯誤代碼:500.15 500.15錯誤是由於請求了不不允許請求的 global.asa而造成的,你可以編輯"地址"欄中的網址,刪除 global.asa,然後按 Enter。來解決這個問題。 錯誤代碼:502 502錯誤是由於網關錯誤而造成的,當作為網關或代理的伺服器與上層內容伺服器聯絡時,收到無效的響應時就會出現502錯誤。 錯誤代碼:500-100.asp 500-100.asp錯誤是指ASP錯誤,默認情況下,"默認 Web 站點"及其所有應用程序都將 ASP 錯誤進程傳送到 500-100.asp 文件;但是,用戶創建的任何新 Web 站點或其應用程序都將 500.100 錯誤進程傳送到默認的(不是自定義的)錯誤文件。如果要為 .asp 文件開發附加的錯誤進程,可以將 500-100 錯誤映射到 .asp 文件,或者創建自己的錯誤進程 .asp 文件。 500-100.asp 文件處理 .asp 文件編譯和運行期間發生的任何錯誤。當發生 ASP 錯誤時,IIS 返回 500-100.asp 文件並附帶詳細的錯誤信息,如發生錯誤的行號和對錯誤的描述。 如果文件 500-100.asp 本身包含 ASP 錯誤,ASP 就不會返回另一個 500-100.asp 文件;這樣,報告錯誤時就好象根本沒有與 500-100 錯誤對應的自定義錯誤文件似的。 如果錯誤處理文件(默認是 500-100.asp)包含運行時錯誤,則只顯示此錯誤,而不考慮請求的 .asp 文件中的錯誤類型。如果錯誤處理文件有預處理和編輯錯誤,則在瀏覽器中顯示這兩種錯誤(即,顯示 500-100.asp 文件中的錯誤和請求的 .asp 文件中的錯誤)。 4.3. 枚舉聲明 java.lang.Thread.State 線程有以下幾種狀態:NEW(已創建但尚未開始執行)、RUNNABLE(正在Java虛擬機中執行)、BLOCKED(阻塞中:正等待獲得監控鎖)、WAITING(等待:無條件等候其他線程執行完畢,直到接收到喚醒通知)、TIMED_WAITING(限時等待:等候其他線程執行完畢,直到接收到喚醒通知或等待時間超過了時限)、TERMINATED(終止:線程已經退出)。4.4. 異常 java.lang.ArithmeticException 算術條件異常。譬如:整數除零等。 java.lang. 數組索引越界異常。當對數組的索引值為負數或大於等於數組大小時拋出。 java.lang.ArrayStoreException 數組存儲異常。當向數組中存放非數組聲明類型對象時拋出。 java.lang.ClassCastException 類造型異常。假設有類A和B(A不是B的父類或子類),O是A的實例,那麼當強制將O構造為類B的實例時拋出該異常。該異常經常被稱為強制類型轉換異常。 java.lang.ClassNotFoundException 找不到類異常。當應用試圖根據字元串形式的類名構造類,而在遍歷CLASSPAH之後找不到對應名稱的class文件時,拋出該異常。 java.lang.CloneNotSupportedException 不支持克隆異常。當沒有實現Cloneable介面或者不支持克隆方法時,調用其clone()方法則拋出該異常。 java.lang. 枚舉常量不存在異常。當應用試圖通過名稱和枚舉類型訪問一個枚舉對象,但該枚舉對象並不包含常量時,拋出該異常。 java.lang.Exception 根異常。用以描述應用程序希望捕獲的情況。 java.lang.IllegalAccessException 違法的訪問異常。當應用試圖通過反射方式創建某個類的實例、訪問該類屬性、調用該類方法,而當時又無法訪問類的、屬性的、方法的或構造方法的定義時拋出該異常。 java.lang.IllegalMonitorStateException 違法的監控狀態異常。當某個線程試圖等待一個自己並不擁有的對象(O)的監控器或者通知其他線程等待該對象(O)的監控器時,拋出該異常。 java.lang.IllegalStateException 違法的狀態異常。當在Java環境和應用尚未處於某個方法的合法調用狀態,而調用了該方法時,拋出該異常。 java.lang.IllegalThreadStateException 違法的線程狀態異常。當縣城尚未處於某個方法的合法調用狀態,而調用了該方法時,拋出異常。 java.lang.IndexOutOfBoundsException 索引越界異常。當訪問某個序列的索引值小於0或大於等於序列大小時,拋出該異常。 java.lang.InstantiationException 實例化異常。當試圖通過newInstance()方法創建某個類的實例,而該類是一個抽象類或介面時,拋出該異常。 java.lang.InterruptedException 被中止異常。當某個線程處於長時間的等待、休眠或其他暫停狀態,而此時其他的線程通過Thread的interrupt方法終止該線程時拋出該異常。 java.lang.NegativeArraySizeException 數組大小為負值異常。當使用負數大小值創建數組時拋出該異常。 java.lang.NoSuchFieldException 屬性不存在異常。當訪問某個類的不存在的屬性時拋出該異常。 java.lang.NoSuchMethodException 方法不存在異常。當訪問某個類的不存在的方法時拋出該異常。 java.lang.NullPointerException 空指針異常。當應用試圖在要求使用對象的地方使用了null時,拋出該異常。譬如:調用null對象的實例方法、訪問null對象的屬性、計算null對象的長度、使用throw語句拋出null等等。 java.lang.NumberFormatException 數字格式異常。當試圖將一個String轉換為指定的數字類型,而該字元串確不滿足數字類型要求的格式時,拋出該異常。 java.lang.RuntimeException 運行時異常。是所有Java虛擬機正常操作期間可以被拋出的異常的父類。 java.lang.SecurityException 安全異常。由安全管理器拋出,用於指示違反安全情況的異常。 java.lang. 字元串索引越界異常。當使用索引值訪問某個字元串中的字元,而該索引值小於0或大於等於序列大小時,拋出該異常。 java.lang.TypeNotPresentException 類型不存在異常。當應用試圖以某個類型名稱的字元串表達方式訪問該類型,但是根據給定的名稱又找不到該類型是拋出該異常。該異常與ClassNotFoundException的區別在於該異常是unchecked(不被檢查)異常,而ClassNotFoundException是checked(被檢查)異常。 java.lang.UnsupportedOperationException 不支持的方法異常。指明請求的方法不被支持情況的異常。
7. java什麼時候是編譯出錯,什麼時候會報異常呢
編譯錯時因為你寫的語法不正確,報異常有時候是程序自身的錯誤 大部分是你程序邏輯有錯誤
8. 有關Java的RuntimeException
如果一個新手去一家軟體公司面試,運行時異常與編譯時異常是有很大概率要被問到的,這些屬於基本概念。
1.RuntimeException,也就是運行時異常,表示你的代碼本身存在BUG,比如你提到的,數組下標越界,這個屬於代碼有問題,數組定義的長度不夠實際使用,不處理肯定會報錯,如果你操作某個模塊發現能正常運行,那隻是因為代碼還沒跑到這個錯誤的地方而已。。控制台一旦報RuntimeException,就必須要處理。。沒有例外的。而且,處理RuntimeException,不是try-catch能解決的。。try-catch在這里使用毫無意義。
2.不是RuntimeException,就是編譯時異常,異常只有這兩種了。比如你在處理文件流時的I/O問題,就屬於編譯時異常。這個時候用thr{}catch 來捕獲或者 throws即可。
3.error,就不在這里贅述了。
根據實際開發經驗的結論,純手敲。。希望採納
9. java 程序中的錯誤有三種類型分別是什麼
錯誤,分為編碼錯誤,運行錯誤,jvm內部錯誤。
編碼錯誤在eclipse等開發工具 中可虛信以喊數直觀的看到,這種錯誤比較少見。
運行錯誤,又稱運行時異常,這是代碼邏輯錯誤差滲輪導致的,發生這種錯誤時一定要靜下心,從程序入口處尋找錯誤誘因。
jvm內部錯誤屬於Java虛擬機內部錯誤,比較少見,發生這種錯誤時,建議重啟計算機。