- package org.lgc.ex;
- import java.util.Scanner;
- public class Demo6 {
- //方法得到一个年龄并返回(年龄必须是18在30之间)
- public int getAge() throws MyAgeException{
- int age = 18;
- Scanner in = new Scanner(System.in);
- age = in.nextInt();
- if(age >38 || age < 18){
- //引发自定义异常
- throw new MyAgeException(age);
- }
- return age;
- }
- //异常处理方法
- public static void main(String[] args) throws MyAgeException {
- Demo6 obj = new Demo6();
- try {
- int age = obj.getAge();
- } catch (MyAgeException e) { System.err.println(e.getMessage());
- System.err.println(e);
- e.printStackTrace();
- }
- //在抛
- //int age = obj.getAge();
- System.out.println("会执行吗?");
- }
- }
- package org.lgc.ex;
- public class MyAgeException extends Exception {
- int age;
- public MyAgeException(int age){
- this.age = age;
- }
- public String toString(){
- return "年龄不合要求"+age;
- }
- }
第五章 异常(Exception)
在程序中出现的错误:1.语法错误(易) 2.逻辑错误(难) 3.运行时错误(中)(异常)
一. 异常
a) 运行时发生了错误称之为异常(Exception)
b) 知道哪里可能会发生异常,我们应该对他进行相应的处理。(异常处理)
c) 异常发生后,程序会直接终止,将控制权交给OS。
d) 异常发生后,之前的一些资源不会自动释放。
二. Throwable类
a) Error(错误):为内部错误,因此在正常情况下不期望用户的程序捕获它们
b) Exception(异常):程序中出现的异常,都应该去处理。
三. 异常关键字
a) try:监控可以引发异常的代码。
b) catch:捕获并处理异常。
c) finally:不管有没有异常都要做的事情。(释放资源)
d) throw:自己手动的引发一个异常。
使用:写在方法的里面
void 方法名(){
throw new 异常类型( ); //抛出的非运行时异常必须要马上进行try、catch或throws抛异常
}
e) throws:由方法抛出异常,交给调用方法的地方去处理异常。
使用:写在方法的声明,写在( )和{ } 之间的
void 方法名( ) throws 异常类型{
}
四. 基本异常语法
try{
//可能引发异常的代码
}catch(异常类型 引用){ //当程序发生异常后,会自动的生成一个异常的对象,此时这个对象就存储在“引用”中
//对异常的处理
}finally{
//释放资源(不管有无异常都会做的)
}
try,catch和finally都不能单独使用。且try必须出现,
组合方式有:try和catch,try和finally,try、catch和finally
五. 多重异常
try{
}catch(异常类型1 引用){
}catch(异常类型2 引用){
}catch(异常类型3 引用){
}…….
注意:catch中的异常类型父类必须放在后面。
六. 嵌套异常
try{
try{
}
catch(异常类型 1引用){
}
}catch(异常类型2 引用){
}
注意:内层的异常如果没有被捕获,那么会交给外层的catch去捕获
七. 自定义异常
注意:自定义异常必须继承Exception或它的子类。
通常会重写toString方法,方便输出。