【Java】异常处理

1、异常概述

在程序中,可能产生没有预料的各种情况,或者超出可控的范围环境因素。

异常是一个在程序执行期间发生的事件,它中断了环境正在执行的程序的正常指令流。

例:

public class Test
{
    public static void main(String[] args){
        int result=3/0;
        System.out.println(result);
    }
}

程序报出算数异常:

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at Test.main(Test.java:4)

系统不再继续执行下去,提前结束,这就是所说的异常。

2、处理异常

可以使用在Java中捕获异常的方法。

异常产生后,如果不做任何处理,程序就会被终止,不再执行下面的语句。

可以通过捕获异常语句来处理:
异常捕获结构由三部分组成,try、catch、finally,try是存放是可能发生异常的语句,catch程序块在try语句块之后,用来激发被捕获的异常,finally语句块是异常处理结构最后执行的语句。

try{
  //程序代码块
}
catch(Exceptiontype1 e){
  //语句块
}
...
finally{
  //程序块
}

(1)try-catch

public class Test {
    public static void main(String[] args){
        try{
            String str="fan";
            System.out.println(str+"年龄是");
            int age=Integer.parseInt("20L");
            System.out.println(age);
        }catch(Exception e){
            e.printStackTrace();
        }
        System.out.println("program over");
    }
}
fan年龄是
java.lang.NumberFormatException: For input string: "20L"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at Test.main(Test.java:6)
program over

Integer.parseInt():将一个字符串转化成一个整数,如果字符串不是整数形式,就会抛出异常。

上面例子中,先执行try语句块中的代码,当执行到:

int age=Integer.parseInt("20L");

发生异常,程序转接到catch代码块中执行,输出异常信息。

最后继续执行后面的代码。

异常处理常用以下三个函数来获取相关信息:

getMessage():输出错误的性质;

toString():给出异常类型与性质;

printStackTrace():指出异常的类型,性质,栈层次及出现在程序中的位置。

(2)finally

完整的异常处理语句一定要包含finally语句,无论程序中有无异常发生,都会执行finally语句;

下面四种情况不会执行finally语句块:

在finally语句中发生异常;

在前面的代码中使用了System.exit退出程序;

程序所在的线程死亡;

关闭CPU;

3、Java中比较常见的异常

所有的类都是Throwable类的子类,Throwable类派生了两个类,分别是Exception和Error类。

Error类:用来描述java系统中的内部错误以及资源耗尽的错误,这些错误比较严重。

Exception:非致命性质类,可以通过捕获处理程序继续执行。还可以分为:IOException和RuntimeException异常;

  • 算术异常类:ArithmeticExecption
  • 空指针异常类:NullPointerException
  • 类型强制转换异常:ClassCastException
  • 数组负下标异常:NegativeArrayException
  • 数组下标越界异常:ArrayIndexOutOfBoundsException
  • 违背安全原则异常:SecturityException
  • 文件已结束异常:EOFException
  • 文件未找到异常:FileNotFoundException
  • 字符串转换为数字异常:NumberFormatException
  • 操作数据库异常:SQLException
  • 输入输出异常:IOException

4、自定义异常

使用Java中异常类可以描述在编程时出现的大部分异常情况,除此之外,用户只需继承Exception类即可定义异常类。

在程序中使用自定义异常步骤:

  • 创建自定义异常类
  • 在方法中通过throw关键字抛出异常
  • 进行下一步
public class MyException extends Exception {//创建自定义异常,继承Exception类
    public MyException(String ErrorMessage){  //构造方法
        super(ErrorMessage);                 //父类构造方法
    }
}
public class Tran {
    static int avg(int num1,int num2) throws MyException{
        if(num1<0||num2<0){
            throw new MyException("不可以使用负数");
        }
        if(num1>100||num2>100){
            throw new MyException("数值太大了");
        }
        return (num1+num2)/2;
    }
    public static void main(String[] args){
        try{
            int result=avg(103,105);
            System.out.println(result);
        }catch (MyException e){
            System.out.println(e);
        }
    }
}
MyException: 数值太大了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式职场

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值