序言:異常的處理——-(存在異常——>解決方案處理)
1.異常:程序中出現無法執行的代碼段。
package com.Example.Charpter07;
/**
* @author Administrator
* @date : 2017年4月2日 上午11:47:01
* @function : 瞭解異常
*/
public class Introduction {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
int c=1/0;
System.out.println(c);//可能出現異常的語句
} catch (Exception e) {
// TODO: handle exception
//異常匹配成功後的異常處理
e.printStackTrace();
}finally{
System.out.println("異常處理結束");
}
}
}
控制檯消息:
因爲在數學處理中,0作爲被除數,結果爲無窮大!在內存中怎麼表示????當然就是內存被佔滿。後續程序當然無法繼續執行;
總結:異常分爲:(1)程序執行時出現的錯誤;(2)JVM出現的錯誤;
2.解決異常方案
一般情況下就是直接限定好初步條件,防止出現問題;
這樣極大的佔用了資源,使得程序運行效率變低;
Java提供了自己的異常處理機制,try——catch語句;
try {
int c=1/0;
System.out.println(c);//可能會出現異常的語句
} catch (Exception e) {
// TODO: handle exception
//異常匹配成功後的異常處理
e.printStackTrace();
}finally{
System.out.println("異常處理結束");//異常處理的統一出口;
}
具體的底層數據流動:
step1.
try的代碼體中是可能出現異常的代碼段;
step2.
出現異常java自己實例化異常類去和catch中異常類匹配,再進去具體代碼段執行異常處理;
step3.
finally是異常處理的統一出口;
3.異常類
Error:是指JVM中的錯誤,程序所不能解決的;
Exception:程序中出現的錯誤;
4.catch語句體中需要注意的點
catch是相當於捕獲異常;一般可以直接使用Exception捕獲異常;
打印錯誤信息的時候就是
//第一種方法
System.out.println(e);
//第二種方法
e.printStackTrace();
5.throws和throw關鍵字
1.throws關鍵字
package com.Example.Charpter07;
public class ThrowsDemo {
public void errorDemo() throws Exception{
System.out.println("出現異常"+(1/0));
}
public static void main(String[] args) {
ThrowsDemo throwsdemo=new ThrowsDemo();
try{
throwsdemo.errorDemo();
}catch(Exception e){
e.printStackTrace();
}
}
}
個人理解:此處可能存在異常,在方法體中定義try—catch語句好像沒有看見到吧,這塊存有疑問!try—-catch語句在方法體中直接使用!(個人猜測,是異常類需要實例化),所以通過標識throws需要在主方法中添加Java的異常處理機制。
2.throw關鍵字
手動拋出異常但是有時候有些錯誤在jvm看來不是錯誤,比如說
很正常的整形變量賦值,但是在我們眼中看來就不正常,誰的年齡會是負的呢。所以我們需要自己手動引發異常,這就是throw的作用
int age = 0;
age = -100;
if(age<0)
{
Exception e = new Exception();//創建異常對象
throw e;//拋出異常
}
System.out.println(age);
6.自定義異常類