Java学习笔记

coreJava_12——异常

2018-09-08  本文已影响64人  panda_Hi

/*
承认差距,沉心静气……
(笔者最近就要找工作了,java的框架之类的还没学好,最近可能更的不及时。忙完这阵子我会再系统的整理一下这个coreJava系列,以及一些再面试和项目中的经验跟大家分享)
*/

简书现在竟然要求绑定微信才可以发表,考虑换地方了

一、理解异常

1、所有异常类的祖先类为java.lang.Throwable类。它有两个直接的子类:

2、通过例子可以更好的理解

某天天气很好,小明骑车去山里游玩

3、异常声明和处理——try...catch

--格式:
try{
可能出现问题的代码
}catch(异常名 变量名){
针对问题的处理
}
catch(异常名 变量名){
针对问题的处理
}

4、异常声明和处理——throws和throw

5、throws与throw区别(面试中常见):

throws
throw
例:
public class ExceptionDemo1 {

    public static void main(String[] args) {
        ExceptionDemo1 ed = new ExceptionDemo1();
        try {
            ed.method2();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("已处理异常...");
        }

    }

    public void method2() throws Exception {    //throws是用在方法声明后边
        int a = 10;
        int b = 0;
        if (b == 0) {
            // throw ArithmeticException; //错误写法,throw抛出的不是名称
            throw new Exception();// 抛出异常对象
        } else {
            System.out.println(a / b);

        }
    }
}

5、异常处理原则

如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这时用throws。
区别:后续程序需要继续运行,就用try;反之,则用throws。

6、finally

public class FinallyDemo2 {
    private static int a=0;
    public static void main(String[] args) {
        System.out.println(TestTheReturn());//输出30
        System.out.println("the current value of a is: "+ a);//输出40
    }
    public static int TestTheReturn() {
        a = 10;
        try {
            System.out.println(a/0);
            a = 20;
        } catch (ArithmeticException e) {
            a = 30;
            return a;//#1
            //return a执行到这里,不是return a了,而是return 30,这个返回路径已经形成
            //但是发现后边还有finally语句,因此执行finally语句的内容,a=40,
            //返回到原来的路径,继续执行return 30。
        }finally {
            a = 40;
            //return a; //#2
        }
        return a;//与#2处的return不能同时存在,跟该语句地位相同,冲突。
        //对#1处而言,已经有返回了;所以此处return语句并不执行
    }
}

7、自定义异常

有些异常,Java中没有对应的异常,需要我们自定义来进行相关的异常处理。如,检查用户输入是否符合要求等。
自定义异常分为两种

//自定义异常类
package exception;
//也可以是继承自RuntimeException
//public class MyException extends RuntimeException
public class MyException extends Exception{
    //提供构造方法,用于逐层向上传递提示信息,message
    //可通过查看api参考写法。
    public MyException() {
    }
    public MyException(String message) {
        super(message);
    }
}

//检查异常类
package exception;

public class Teacher {
    public void check(int score) throws MyException {

        if (score > 100 || score < 0) {
            throw new MyException("分数必须在0——100之间");
        }else {
            System.out.println("分数没有问题");
        }
    }

}

//测试类
package exception;

import java.util.Scanner;

public class Student {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入成绩:");
        int score = scanner.nextInt();
        
        Teacher t = new Teacher();
        try {
            t.check(score);
        } catch (MyException e) {
            e.printStackTrace();
        }
    }
}

8、小结一下

异常的注意事项

上一篇 下一篇

猜你喜欢

热点阅读