java 异常二、

* 编译时异常的抛出必须对其进行处理


* 运行时异常的抛出可以处理也可以不处理

throws和throw的区别
* a:throws
* 用在方法声明后面,跟的是异常类名
* 可以跟多个异常类名,用逗号隔开
* 表示抛出异常,由该方法的调用者来处理

public void setAge(int age) throws RuntimeException,AgeboundException{

.............}


* b:throw
* 用在方法体内,跟的是异常对象名
* 只能抛出一个异常对象名
* 表示抛出异常,由方法体内的语句处理

public void setAge(int age) throws RuntimeException {
if(age>0 && age<=150){
this.age=age;
}else{
throw new RuntimeException("年龄非法");
}

 ====================================================

/**
* * A:finally的特点
* 被finally控制的语句体一定会执行
* 特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))
* B:finally的作用
* 用于释放资源,在IO流操作和数据库操作中会见到
* C:案例演示
* finally关键字的特点及作用
*return语句相当于是方法的最后一口气,那么在他将死之前会看一看有没有finally帮其完成遗愿,如果有就将finally执行
*后在彻底返回
*/
public static void main(String[] args) {
try {
System.out.println(10/0);
} catch (Exception e) {
System.out.println("除数为零了");
System.exit(0); //退出jvm虚拟机 finally唯一不执行的情况是遇到 exit
return;
} finally {
System.out.println("看看我执行了吗");
}
}

=======================================================

public class Test1 {

    /**
     * * A:面试题1
            * final,finally和finalize的区别
            * final可以修饰类,不能被继承
            * 修饰方法,不能被重写
            * 修饰变量,只能赋值一次
            * 
            * finally是try语句中的一个语句体,不能单独使用,用来释放资源
            * 
            * finalize是一个方法,当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
        * B:面试题2
            * 如果catch里面有return语句,请问finally的代码还会执行吗?如果会,请问是在return前还是return后。
     */
    public static void main(String[] args) {
        Demo d = new Demo();
        System.out.println(d.method());
    }

}

class Demo {
    public int method() {
        int x = 10;
        try {
            x = 20;
            System.out.println(1/0);
            return x;
        } catch (Exception e) {
            x = 30;
            return x;
        } finally {
            x = 40;
            //return x;                    千万不要在finally里面写返回语句,因为finally的作用是为了释放资源,是肯定会执行的
                                        //如果在这里面写返回语句,那么try和catch的结果都会被改变,所以这么写就是犯罪
        }
    }
}

 

/**
* * A:Throwable的几个常见方法
* a:getMessage()
* 获取异常信息,返回字符串。
* b:toString()
* 获取异常类名和异常信息,返回字符串。
* c:printStackTrace()
* 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
* B:案例演示
* Throwable的几个常见方法的基本使用
*/

     */
    public static void main(String[] args) {
        try {
            System.out.println(1/0);
        } catch (Exception e) {            //Exception e = new ArithmeticException("/ by zero");      这里已创建异常对象 ,就能够直接调用异常类的方法
            //System.out.println(e.getMessage());        //获取异常信息
            //System.out.println(e);         //调用toString方法,打印异常类名和异常信息
            e.printStackTrace();        //jvm默认就用这种方式处理异常
        }
    }
原文地址:https://www.cnblogs.com/yimian/p/6537656.html