Java异常处理

目录

一、含义

二、异常分类

三、异常处理

1.   捕获异常

2.   抛出异常

 四、自定义异常类


一、含义

程序运行期间发生的不期而至的各种意外状况。例如文件找不到、网络连接失败等。

二、异常分类

Throwable类下的直接子类:Error、Experience。

 

Error:代表程序运行时Java系统内部的错误,与程序设计者操作无关,无需捕获处理。

RuntimeException:Java编译器不会检查,无需捕获处理。

编译时异常:编译器会强制要求进行处理。

三、异常处理

1.   捕获异常

try{

        //可能出现异常的代码

}catch (异常类型 变量名) {

        //处理异常的方式

}

        …

finally{

        //一定会执行的代码

}

示例:

public class Demo2 {
    public static void main(String[] args) {
        System.out.println(0 / 0);
    }
}

运行结果:

如上抛出了ArithmeticException,处理异常用try-catch-finally即可。

public class Demo2 {
    public static void main(String[] args) {
        try {
            System.out.println(0 / 0);//出现异常的代码
        }catch (ArithmeticException e){
            System.out.println("除数不能为0!");
            e.printStackTrace();//将异常的跟踪栈信息输出
        }
        finally {
            System.out.println(0 / 2);//无论是否抛出异常,finally都会执行
        }
    }
}

 运行结果:

2.   抛出异常

如果不知道怎么处理捕获的异常,要用throws再次抛出,交给当前方法的上一层调用者,如此不断抛出,直至处理或最终交给JVM。

(1)throw 语句

throw  异常对象;

import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("a=");
        int a = scanner.nextInt();
        System.out.print("b=");
        int b = scanner.nextInt();
        double result = division( a, b );
        System.out.println(result);
    }
    public static double division(int a, int b){
        if (b==0){
            throw new ArithmeticException();
        }
        double result = a / b;
        return result;
    }
}

运行结果:

 (2)throws 语句

(修饰符)(返回值类型)(方法名)(参数列表)throws Exception1,...{...}

import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) throws ArithmeticException {
        Scanner scanner = new Scanner(System.in);
        System.out.print("a=");
        int a = scanner.nextInt();
        System.out.print("b=");
        int b = scanner.nextInt();
        double result = a / b;
        System.out.println(result);
    }
}

运行结果:

 四、自定义异常类

很多时候有些项目会出现特有问题(未被Java所描述并封装成类),可将这些特有的问题自定义为异常类。

  • 自定义异常类都是运行时异常,继承Exception类或RuntimeException类。
  • 必须通过throw手动自行抛出
  • 至少定义两个构造方法,即无参构造和带String的有参构造,用来描述异常信息。

示例:

import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) {
        NumberTest numberTest = new NumberTest();
        Scanner scanner = new Scanner(System.in);
        System.out.print("b=");
        int b = scanner.nextInt();
        try{
            numberTest.number(b);
        }catch (NumberException e) {
            e.printStackTrace();//打印自定义异常信息
        }
    }
}
class NumberException extends Exception{//继承Exception
    public NumberException(){//空参构造

    }
    public NumberException(String message) {//带参构造
        super(message);
    }
}
class NumberTest {
    public void number(int b) throws NumberException {
        if( b < 0 )
            throw new NumberException("数为负数");//抛出异常对象
        else
            System.out.println(b);
    }
}

运行结果:

         number()方法用throw抛出自定义异常NumberException,number()方法本身不处理该异常,继续向上一层抛出。main()调用number()方法,编译器会强制要求main()方法处理NumberException,并打印自定义异常跟踪栈信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值