java异常处理(throws 和 throw)

1、常见的异常类型
Exception异常层次结构的根类
ArithmeticException算数错误情形
ArrayIndexOutOfBoundsException数组下标越界
NullPointerException尝试访问null对象成员
ClassNotFoundException不能加载所需的类
InputMismatchException欲得到的数据类型与实际输入的类型不匹配
IllegalArgumentException方法接受到非法参数
ClassCastException对象强制类型转换出错
NumberFormatException数字格式转换异常
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input =new Scanner(System.in);
        System.out.println("请输入被除数:");
        try {
            int num1=input.nextInt();
            System.out.println("请输入除数:");
            int num2=input.nextInt();
            System.out.println(String.format("%d / %d = %d",
                    num1, num2, num1 / num2));
        }catch (Exception e) {
            System.err.println("出现错误:被除数和除数必须是整数,"+
        "除数不能为零。");
            System.out.println(e.getMessage());
    }
}

System.err.println();标准错误输出流,这种输出方式可以输出错误的消息,在控制台呈现红色。

System.out用于正常的输出,也就是程序真正想输出的内容。而System.err用于出错信息的输出,也就是你本来不期待看到的东西。

2、try-catch**、**try-catch-finally

try-catch-finally 程序块的流程大致分为两种情况:

  1. 如果try块中所有语句正常执行完毕,那么finally块就会被执行。
  2. 如果try语句在执行过程中碰到异常,无论这种异常能否被catch块捕获到,都将执行finally块中的代码。

try-catch-finally结构中try块是必须有的,catch和finally块为可选,但两者至少必须出现其中之一。

3、try-catch-catch-finally(多重catch块)

在写异常处理的时候,一定要把异常范围小的放在前面,范围大的放在后面,Exception这个异常的根类一定要刚在最后一个catch里面,如果放在前面或者中间,任何异常都会和Exception匹配的,就会报已捕获到…异常的错误。

4、try-catch-finally中包含return的情况

情况1:try{} catch(){}finally{} return; 顺序执行即可

情况2: try{ return; }catch(){return;} finally{} return; 程序执行try块中(有异常时执行catch(){})的return之前的代码后,然后执行finally块,最后执行try块(或者catch)中的return。此时程序已经返回,不再执行finally{}后面的return了。

情况3:try{return;} catch(){return;} finally{return;} return; 执行try 或者catch中的return语句之前,都会先执行finally语句, 如果finally中有return语句,那么程序就return了。

总结:如果finally存在的话,任何执行try 或者catch中的return语句之前,都会先执行finally语句, 如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,编译器把finally中的return实现为一个warning。

5、throws 和 throw

1、throws 声明异常
2、throw 抛出异常,throw(异常对象)

public class Test {
    // throws 声明异常
    public static void Test3() throws NumberFormatException{  
        String s = "abc";  
        System.out.println(Double.parseDouble(s));  
    }  
    
    public static void main(String[] args) {
        try {
            Test3();
        } catch (NumberFormatException e) {
            // 捕获异常
            System.err.println("非数据类型不能转换。");
        }
    }   
}

public class Test2 {
    public static void main(String[] args) {
        String s = "abc";  
        if(s.equals("abc")) {  
            // throw 抛出异常,throw(异常对象)
            throw new NumberFormatException();
        } else {  
            System.out.println(s);  
        }  
    }
}

throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。

而throw则是指抛出的一个具体的异常类型。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值