1. 程式人生 > >Java異常(一)

Java異常(一)

error: 數組下標 發生 str 最簡 integer heap throwable 提示

*************************如何處理異常********************************


try{

//可能出現錯誤的代碼

}catch(異常類的類名 e){

//處理錯誤的代碼

}


演示代碼:


package com.chapter10;

//演示如何處理異常
public class TestTryCatch {
public static void main(String[] args) {

String[] friendsArr = { "tom", "john", "jenni" };

try{
for (int i = 0; i < 4; i++) {
System.out.println(friendsArr[i]);//當訪問下標為3的元素的時候 報錯 程序終止
}
}catch(ArrayIndexOutOfBoundsException e){

e.printStackTrace();//打印棧軌跡 最最簡單 最最偷懶的方式
System.out.println("數組下標越界了");
}

//處理完錯誤以後 程序就是一個正常的程序了 就可以往下繼續運行
System.out.println("here");
}




}

處理錯誤的時候 最簡單的、最最偷懶的方式 就是只打印棧軌跡,不推薦..因為之前我們看到了

即使不做任何處理,虛擬機默認的處理方式就是打印棧軌跡...至少應該有一個良好的提示...

註意: Java中的異常處理不能從根本上修正錯誤,只是一個良好的提示作用,如果能幫我們

把4-->3 這不叫異常處理,這是人工智能..

*************************異常的分類(一個圖)********************************

本章重點: 一個圖、5個關鍵字

一個圖:

Throwable(可拋出物 java中所有異常類的基類)

Error Exception

RuntimeException Others(CheckedException)

Error: 非常嚴重的錯誤..程序員在程序這個層次修改不了,例如硬件崩潰、操作系統崩潰、虛擬機崩潰...
開車時, 地震了...

Exception: 不太嚴重的錯誤。程序員可以通過修改程序來完成...


*************************Error 非常嚴重的錯誤******************************************


Error: 非常嚴重的錯誤..程序員在程序這個層次修改不了,例如硬件崩潰、操作系統崩潰、虛擬機崩潰...
開車時, 地震了...


內存溢出(內存不夠用)


一.棧溢出

StackOverflowError


遞歸


棧深度: 棧能容納方法調用的方法的個數...


演示代碼:


package com.chapter10.error;

//演示棧溢出
public class TestStackOverflowError {

private int sum;

public void test(){

if(sum<=17000){
sum++;
test();
System.out.println("test方法被調用了");
}
}

public static void main(String[] args) {
TestStackOverflowError t = new TestStackOverflowError();
t.test();
}
}


二.堆溢出


OutOfMemoryError: Java heap space


long[] longArr = new long[125000000];

三.方法區


OutOfMemoryError: permgen space


當項目比較大的時候 同時使用n多類文件 類文件把方法區占滿 會報方法區溢出

可以通過修改 MyEclipse下的myeclipse.ini 配置文件調整堆、方法區、棧的默認大小


*************************Exception 異常*****************************************

不太嚴重的錯誤,程序員可以通過修改代碼來完成

具體又分為兩種:


1.RuntimeException

運行時異常 運行的時候發生的錯誤 可以處理也可以不處理 就像開車中 遇見的小石子

2.Others(CheckedException)


檢查性異常 編譯時的異常 必須被處理 不處理編譯不通過 就像開車中汽車拋錨

*************************RuntimeException ******************************************


運行時異常 運行的時候發生的錯誤 可以處理也可以不處理 就像開車中 遇見的小石子


五種常見的運行時異常(面試題)


1. 數組下標越界 ArrayIndexOutOfBoundsException


2. 算數異常 ArithmeticException


3. 空指針異常 NullPointerException (重點)

什麽時候會出現空指針異常

(1) 在null上調用方法


(2) null上訪問屬性

4. 類轉換異常 ClassCastException

5. 數字格式化異常 NumberFormatException

演示代碼:


package com.chapter10.exception.runtimeException;

//演示五種常見的運行時異常
public class TestRuntimeException {

public static void main(String[] args) {
//1. 數組下標越界 ArrayIndexOutOfBoundsException
//2. 算數異常 ArithmeticException

/*int a = 10/0;
System.out.println(a);*/
//3.空指針異常 NullPointerException (重點)
//什麽時候會出現空指針異常?
//(1) 在null上調用方法
//Student s = new Student();
//s.study();

//(2) null上訪問屬性
/*Student s = null;
System.out.println(s.sno);*/
//4. 類轉換異常 ClassCastException
/*Person student = new Student();

Teacher teacher = (Teacher)student;*/

//5.數字格式化異常 NumberFormatException

try{
int a = Integer.parseInt("11");
System.out.println(a);
}catch(NumberFormatException e){
e.printStackTrace();
System.out.println("數字格式化異常");
}

System.out.println("here");

}
}


**************************Others(CheckedException)******************************


檢查性異常、編譯期的異常,必須被處理,不處理編譯不通過..就像開車時汽車拋錨


處理方式有兩種:


1. 使用try..catch 明確的處理


駕駛員自己會修

2. 使用throws 拋出給調用者處理

讓別人修,讓修理工修

檢查性異常體現了java程序的健壯性...


***************************演示檢查性異常的特點**************************

沒有出現異常的情況

演示代碼


package com.chapter10.exception.checkedException;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

//演示檢查性異常
//必須被處理 不處理編譯不通過 就像開車中汽車拋錨
//處理完畢以後 程序才能編譯通過
public class TestCheckedException {

public static void main(String[] args) {

//讀文件

try{
FileInputStream fis = new FileInputStream("d:\\jidi16\\aaa.txt");
System.out.println("aaa");
}catch(FileNotFoundException e){
e.printStackTrace();
System.out.println("文件沒有找到");
}

System.out.println("here");

}
}


***************************出現了異常並且捕獲了**************************

拋出-捕獲機制


註意: 不會回到錯誤發生的地方,繼續往下執行

***************************不能有過大的try塊**************************

Java異常(一)