Exception异常处理

要养成一个好习惯,在最后一个catch上去捕获最大的Exception,以防止程序出现一个未捕获的异常导 致程序退出。还要注意的是,若捕获的异常中有父子类关系的,一定是子类异常在上,父类异常在下。
例1:

package day03;
/**
 * java异常捕获机制中的try-catch
 * @author Administrator
 *
 */
public class ExceptionDemo1 {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try{
            String str = "a";
            System.out.println(str.length());
            System.out.println(str.charAt(0));
            System.out.println(Integer.parseInt(str));//a不能转换为int
        }catch(NullPointerException e){
            System.out.println("出现了一个空指针!");
        }catch(StringIndexOutOfBoundsException e){
            System.out.println("下标越界了!");
        /*
         * 要养成一个好习惯,在最后一个catch上去捕获最大的Exception,以防止程序出现一个未捕获的异常导 致程序退出。还要注意的是,若捕获的异常中有父子
         * 类关系的,一定是子类异常在上,父类异常在下。
         */ 
        }catch(Exception e){
            System.out.println("反正就是出了个错!");
        }
        System.out.println("程序结束了");
    }
}

运行结果:

程序开始了
1
a
反正就是出了个错!
程序结束了

例2:finally示例:

package day03;
/**
 * finally面试题
 * @author Administrator
 *
 */
public class ExceptionDemo3 {
    public static void main(String[] args) {
        System.out.println(test("0")  + "," +test(null) + "," +test(""));
    }

    @SuppressWarnings("finally")
    public static int test(String str){
        try {
            return '0'-str.charAt(0);
        } catch (NullPointerException e) {
            return 1;
        } catch (Exception e){
            return 2;
        } finally{
            return 3;
        }
    }
}

运行结果:

3,3,3

例3:自定义exception示例。
自定义人类年龄不合法:
地异步写一个类继承至Exception,并重写父类的方法:

package day03;

public class IllegalAgeException extends Exception {

    /**
     *  该异常表示年龄不合法
     */
    private static final long serialVersionUID = 1L;

    public IllegalAgeException() {
        super();
        // TODO Auto-generated constructor stub
    }

    public IllegalAgeException(String message, Throwable cause) {
        super(message, cause);
        // TODO Auto-generated constructor stub
    }

    public IllegalAgeException(String arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

    public IllegalAgeException(Throwable cause) {
        super(cause);
        // TODO Auto-generated constructor stub
    }

}

第二步:新建一个Person人用户,设置年龄:

package day03;
/**
 * 描述一个用户信息
 */
public class Person {
    private int age;

    public int getAge() {
        return age;
    }
    /**
     * 通常,方法中使用throw抛出什么异常,方法 声明的时候就要使用throws定义该异常的抛出。
     * 方法上若使用throws声明了某些异常的抛出时,那么外界在调用该方法的时候就有一个强制要求,必须处理这些异常。
     * 处理的手段有两种: 1.try-catch捕获该异常。2.接着向外抛出。 
    * 需要注意,当我们使用throw抛出的不是RuntimeException及其子类异常时,就必须处理这个异常。
     * @param age
     * @throws IllegalAgeException 
     */
    public void setAge(int age) throws IllegalAgeException{
        if(age<0||age>100){throw new IllegalAgeException("不符合人类年龄");}
        this.age = age;
    }
}

第3步:使用自定义的异常测试:

package day03;

public class TestPerson {
    public static void main(String[] args){
        Person p = new Person();
        try {
            p.setAge(1000);
        } catch (IllegalAgeException e) {
            e.printStackTrace();
        }//这里会抛出异常。
        System.out.println("他的年龄是:"+p.getAge());
    }
}

运行结果:

day03.IllegalAgeException: 不符合人类年龄
    at day03.Person.setAge(Person.java:30)
    at day03.TestPerson.main(TestPerson.java:7)
他的年龄是:0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值