轉(zhuǎn)發(fā)請注明出處:
安卓猴的博客(http://sunjiajia.com)
本節(jié)課程將學(xué)習(xí)以下內(nèi)容:
- 什么是異常
- 異常的分類
- try...catch...finally結(jié)構(gòu)的使用方法
- throw的作用
- throws的作用
什么是異常
含義:
- 在面向?qū)ο蟮氖澜缰校惓R彩菍ο螅?/li>
- 我們自己的話說劝贸,Java程序在正常運行中姨谷,出現(xiàn)的一些意外,被稱為異常映九。
- 定義:中斷了正常指令流的事件梦湘;
- 異常和語法錯誤是不同的東西;
- 語法錯誤在編譯的時候就會報錯;而異常是在運行的時候拋出來的捌议。
格式:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Demo5.main(Demo.java:3)
例子1:
這個例子它報上面格式中的錯誤哼拔。
class Demo{
public static void main(String[] args) {
int i = 1 / 0;
}
}
異常的分類
- 所有的異常都是Throwable的直接子類;
- 有2個這樣的類Exception和Error瓣颅;
- Error是JVM在運行是產(chǎn)生的錯誤倦逐,一旦產(chǎn)生它,JVM就會直接關(guān)閉宫补;
- Error也有各種子類檬姥;
- Exception就是我們學(xué)習(xí)的異常,它也有很多子類守谓,我們將在開發(fā)中遇到穿铆;
- Exception分為兩大類:運行時異常和編譯時異常;
- 異常被捕捉后,程序可以正常運行和編譯斋荞。
try...catch...finally結(jié)構(gòu)的使用方法
格式:
try {
// 有可能出現(xiàn)異常的代碼荞雏,如果語句2出現(xiàn)異常,那么其后面的語句不再執(zhí)行平酿,
// 直接跳入catch體凤优。
語句1;
語句2蜈彼;
...
} catch(Exception e) {
// Exception e是JVM產(chǎn)生的異常對象筑辨;
// 在這里捕捉異常;
e.printStackTrace(); //打印異常信息幸逆;
} finally {
// 無論是否捕捉到了異常棍辕,都會執(zhí)行。有時也稱為異常的出口
語句还绘;
}
例子2:(請動手)
class Demo{
public static void main(String[] args) {
try {
System.out.println("Hello Monkey!");
// 有可能出現(xiàn)異常的代碼
int i = 1 / 0;
} catch(Exception e) {
e.printStackTrace();
} finally {
// 無論是否捕捉到了異常楚昭,都會執(zhí)行。有時也稱為異常的出口
System.out.println("Hello Android!");
}
}
}
throw和throws
例子3:(請動手)
1.新建一個User.java的源文件:
class User {
private int age;
private int money;
public void setAge(int age) {
if (age < 0) {
// 生成一個異常對象
RuntimeException e = new RuntimeException("年齡不能為負數(shù)拍顷!");
// 拋出這個異常
throw e;
}
this.age = age;
}
// throws的用法抚太,對象在使用這個函數(shù)時,必須要捕捉異常昔案。
public void setMoney(int money) throws Exception {
this.money = money;
}
}
2.新建一個Demo01.java的源文件:
class Demo01 {
public static void main(String[] args) {
User user01 = new User();
//年齡怎么會有負數(shù)呢尿贫?因此我們要捕捉這個異常。
user01.setAge(-20);
try {
user01.setMoney(2000);
} catch (Exception e) {
e.printStackTrace();
System.out.println("2000太少踏揣!");
}
}
}