前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java【8】异常处理

Java【8】异常处理

作者头像
哲洛不闹
发布2020-07-02 14:33:11
5930
发布2020-07-02 14:33:11
举报
文章被收录于专栏:java一日一条

1、异常处理概述

三类程序错误:

编译错误–因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置;

  • 运行时错误–因为程序在执行时,运行环境发现了不能执行的操作
  • 逻辑错误–因为程序没有按照预期的顺序和逻辑执行。
  • 异常——程序运行时可能出现一些错误,比如试图打开一个根本不存在的文件等。如果置之不理,程序便会终止或直接导致系统崩溃,显然这不是我们希望看到的结果。

异常——程序运行时可能出现一些错误,比如试图打开一个根本不存在的文件等。如果置之不理,程序便会终止或直接导致系统崩溃,显然这不是我们希望看到的结果。

异常处理机制——当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。

★ 掌握和编写异常处理机制程序:找到异常出现的逻辑、使用完整的数据测试、形成有针对性的异常处理。

2、异常的分类

Throwable是所有异常的共同祖先,异常都是从Throwable继承而来的。Throwable有两个子类,Error和Exception。

① Error是错误,表示运行应用程序中出现了严重的错误,都是通过Error抛出的,一般是程序不能处理的系统错误。错误是没法处理的。

Error类包括一些不能被程序员处理的严重的系统错误类,共有12个直接子类,一般表示代码运行时 JVM(Java 虚拟机)出现的问题,如内存溢出、虚拟机错误、栈溢出等。这类错误与硬件有关,大多数错误与代码编写者执行的操作无关,通常由系统进行处理,程序本身无法捕获和处理。如:当JVM耗完可用内存时,将出现OutOfMemoryError。如Java虚拟机运行错误,将出现VirtualMachineError、类定义错误将出现NoClassDefFoundError等。这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。

② Exception是异常,表示程序运行时,程序本身可以捕获并且可以处理的错误。异常是可以被处理的!

常见的异常有:

输入输出异常:IOException

算术异常类:ArithmeticExecption

空指针异常类:NullPointerException

类型强制转换异常:ClassCastException

操作数据库异常:SQLException

文件未找到异常:FileNotFoundException

数组负下标异常:NegativeArrayException

数组下标越界异常:ArrayIndexOutOfBoundsException

违背安全原则异常:SecturityException

文件已结束异常:EOFException

字符串转换为数字异常:NumberFormatException

方法未找到异常:NoSuchMethodException

3、异常的捕获处理

finally{ }语句块无论是否发生异常,都将被执行。它是整个捕获异常组合语句的出口,可以用来“善后”,如:释放资源、关闭文件。它是可选的操作。

异常:程序运行时,程序本身可以捕获并且可以处理的错误。

异常分为:

①运行时异常(不受检异常),一般由程序逻辑错误引起。不要求必须处理,编译器不检查。它是JVM在运行期间可能出现的错误,如数组越界、空值对象引用。

②非运行时异常(受检异常),比如IOException,必须处理!处理方式有两种:一是try-catch捕获,二是使用throws语句抛出。否则无法编译。

使用throws语句抛出异常

使用try-catch语句捕获异常

★ 存在多个异常时:异常的产生是由语句中的异常顺序来决定的! 捕捉到第一个异常语句以后,就不会再执行该语句的后续语句了~

例如——下图代码,捕捉到数组定义时开辟的数量为负数,错误,抛出该错误,不再执行下面的语句,所以没有捕捉到除以0的错误。

try-catch-finally语句发生多重嵌套时,先去执行内层的语句;捕捉好内层的异常之后,再来执行靠外层的语句,捕捉异常。例如:

★ eclipse中写异常语句——

4、重新抛出异常

重新抛出异常包括throw和throws两种语句。

下图代码中:throw语句明确抛出了一个空指针异常,改变了程序的执行流程(它后面的语句执行不到!!!),程序跳转到相应的异常处理语句中执行。

代码语言:javascript
复制
throw new NullPointerException(参数);

何时抛出异常???

下面是 throws语句 ——

注意看这张图的概念:

5、定义新的异常类型

系统已经给定的那些异常适用于大部分情况,但还要特定的情况需要自己定义新的异常类型。

自定义异常类的步骤:

例子1:银行业务

新编写的一个异常类:BankException

银行类:Bank

主函数:

例子2:货船装载

6、异常编程例题

货船装载问题

代码语言:javascript
复制
import java.util.Scanner;
class DangerException extends Exception {
    //starts
     final String message = "超重";
   public String warnMess() {
       return message;
   }
    //end
}
class CargoBoat {
    int realContent;  //装载的重量
    int maxContent;   //最大装载量
    public void setMaxContent(int c) {
        maxContent = c;
    }
    public void loading(int m) throws DangerException {
      //starts
      realContent += m;
       if(realContent>maxContent) {
          throw new DangerException();
       }
       System.out.println("目前装载了"+realContent+"吨货物");
    //end
    }
}
public class Main {
    public static void main(String args[]) {
        CargoBoat ship = new CargoBoat();
        Scanner s=new Scanner(System.in);
        ship.setMaxContent(1000);
        int m=0;
        try{
            //starts
            while("".equals(s)==false)
            {m = s.nextInt();
                 ship.loading(m);
            }
            //end
        }
        catch(DangerException e) {
            //starts
            System.out.println(e.warnMess());
            System.out.println("无法再装载重量是"+m+"吨的集装箱");
            //end
        }
        finally {
            System.out.printf("货船将正点启航");
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java一日一条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4、重新抛出异常
  • 5、定义新的异常类型
  • 6、异常编程例题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档