Java:什么是异常?一篇让你明白异常

目录

1.什么是异常?

2.为什么需要异常处理

3.异常处理的类型

  3.1 try-catch方式

  3.2 处理多种异常

  3.3 异常捕获的原理

  3.4 异常处理的方式throws

4.Exception下常用的api方法

5.finally关键字

6.throw关键字

7.自定义异常


1.什么是异常?

异常就是程序在运行时出现意外,而导致程序无法正常往下执行(终止)。

2.为什么需要异常处理

异常处理的目的就是想让程序继续执行

public class Test {
    public static void main(String[] args) {
        int a=10;
        int b=0;
        System.out.println("开始计算===============");
        int result=a/b;
        System.out.println("结束计算==============");
    }
}

 我们发现上面再14行发生异常,而导致14行以下的内容都无法正常执行。从而导致程序再14终止了。我们应该处理这种异常。能让程序继续执行

3.异常处理的类型

Java中提供了两种异常处理的方式:

  1.  try{可能发生异常的代码}catch(异常类型 对象){捕获异常}finally{异常的出口 }
  2. 抛出异常throws

3.1 try-catch方式

public class Test {
    public static void main(String[] args) {
        int a=10;
        int b=0;
        System.out.println("开始计算===============");
        try {
            int result = a / b;
        }catch (ArithmeticException e){
            System.out.println("捕获算术异常");
        }
        System.out.println("结束计算==============");
    }
}

 处理完异常后我们的程序可以继续执行了。

3.2 处理多种异常

public class Test {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        String c1=scanner.next();
        System.out.print("请输入二个数字:");
        String c2=scanner.next();
        System.out.println("开始计算===============");
        try {
            int a=Integer.parseInt(c1);
            int b=Integer.parseInt(c2);
            int result = a / b;
        }catch (ArithmeticException e){
            System.out.println("捕获算术异常");
        }catch (NumberFormatException e){
            System.out.println("格式化转化异常");
        }
        System.out.println("结束计算==============");
    }
}

try后面可以跟多个catch捕获。不同的catch捕获不同的异常。但是这样会先的比较麻烦。

3.3 异常捕获的原理

这些异常有一个公共的父类,异常的根类是Throwable, Throwable下有两个子类:

  • Exception: 异常类,我们程序员可以处理的异常。一般使用该异常就了。
  • Error: 错误类。这种异常程序员无法处理。比如内存溢出。

根据多态,在异常捕获时可以使用Exception异常来捕获

 注意:如果你使用多个catch,范围大的必须放在范围小的后面。

 3.4 异常处理的方式throws

把异常抛出,使用再方法名()后面. 抛给了方法调用者。

 public static void main(String[] args) throws Exception {//JVM
            fun();//方法调用者

    }
    public static void fun() throws Exception{
        int a=10;
        int b=0;
        int c=a/b;
    }

 如果我们抛出的异常为RuntimeException下的异常。不要强制调用者处理。

4.Exception下常用的api方法

getMessage():获取异常信息。

toString():获取异常信息以及异常种类。

printStackTrace():打印异常信息以及异常种类和异常发生的位置。

5.finally关键字

 使用异常处理中,作为最终执行的代码,不管有没有异常都会执行finally中代码。后期使用在资源关闭中。

如果执行了return,finally也会被执行,因为return语句执行了,方法直接返回到调用处,但是在返回之前,会执行finally块中的代码

public class Test02 {
    public static void main(String[] args) {
        int c = fun();
        System.out.println("c========" + c);
    }

    public static int fun() {
        int a = 10;
        int b = 2;
        int c = a / b;
        try {
            return c;
        } catch (Exception e) {
            System.out.println("异常");
        } finally {
            c = 15;
            System.out.println("finally~~~~~~~");
//          return c;
        }
        return 0;
    }
}

 注意: try{}可以finally单独使用try{}finally{}:没有捕获异常

6.throw关键字

我们前面讲解的异常,都是程序自己产生的异常对象。 我们也可以自己定义异常对象。并把该异常对象抛出。

class Student{
     private String name;
     private Integer age;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age){
        if(age<=0){
//            System.out.println("年龄有误");//只能在控制看到 不允许出现sout语句
            throw new RuntimeException("年龄有误");
        }
        this.age = age;
    }
}

7.自定义异常

当系统提供的异常类型无法满足客户需求时,程序员可以自己定义异常类型。目的可以达到见名知意。

创建一个异常类并继承RuntimeException:

public class AgeException extends RuntimeException {
	//创建一个构造函数
    public AgeException(String msg){
        super(msg);
    }
}

使用自定义的异常类:

  • 27
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值