前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java学习之路:29.异常处理

java学习之路:29.异常处理

作者头像
花狗Fdog
发布2020-10-28 10:54:10
4770
发布2020-10-28 10:54:10
举报
文章被收录于专栏:花狗在Qt

一.异常概述

学习Java时,常常会遇到编译程序后,提示出现异常,异常时一个在程序执行期间发生的事件,它中断了正在执行的程序的正常指令流。 例如下面的代码:

代码语言:javascript
复制
public class Exceptiontest {
    public static void main(String[] args) {
        int num=3/0; 
        System.out.println(num); 
    }
}

运行结果提示算术异常:

在这里插入图片描述
在这里插入图片描述

程序运行过程中发生了异常,系统不再执行下去,提前结束,这就是异常。 Java语言是一门面向对象的编程语言,因此,异常在Java语言中也是作为类的实例的形式出现的。当某一方法中发生错误时,这个方法就会创建一个对象,并且把它传递给正在运行的系统,这个对象就是异常对象。通过异常处理机制,可以将非正常情况下的处理代码与程序的主逻辑分离,即在编写代码主流程的同时在其他方法处理异常。 常见的异常如下。

二.常见异常

异常类

说明

ClassCastException

类型转换异常

ClassNotFoundException

没找到相应类异常

ArithmeticException

算术异常

ArrayIndexOutOfBoundsException

数组下标越界异常

ArrayStoreException

数组中包含不兼容的值抛出的异常

SQLException

操作数据库异常类

NullPointerException

空指针异常

NoSuchFieldException

字段未找到异常

NoSuchMethodException

方法未找到抛出的异常

NumberFormatException

字符串转换为数字抛出的异常

NegativeArraySizeException

数组元素个数为负数抛出的异常

StringIndexOutOfBoundsException

字符串索引超出范围抛出的异常

IOException

输入输出异常

IllegalAccessException

不允许访问某类异常

InstantiationException

当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常。

EOFException

文件已结束异常

FileNotFoundException

文件未找到异常

三.捕捉异常

Java语言的异常捕捉结构由try,catch,finally三个部分构成,其中try语句块中存的是可能发生异常的Java语句,catch程序块在try语句块之后,用来激发被捕捉的异常,finally语句块是异常处理结构的最后执行部分,无论try语句块中的代码如何退出,都将执行finally语句块,异常处理器大致分为 try-catch 语句块和 finally 语句块。

1. try-catch 语句块

将代码稍稍改动:

代码语言:javascript
复制
public class Exceptiontest {
    public static void main(String[] args) {
        int num=3/0; 
        System.out.println(num); 
        System.out.println("继续运行"); 
    }
}

运行可知,一旦出现异常会终止出现运行。

在这里插入图片描述
在这里插入图片描述

在添加了异常处理tyr-catch语句块之后:

代码语言:javascript
复制
public class Exceptiontest { 
    public static void main(String[] args) {
    try {
        int num=3/0; 
        System.out.println(num); 
        }catch(Exception e) {
            e.printStackTrace();
        }     
    System.out.println("继续运行"); 
    }
}

运行结果可以看出,程序仍然输出最后的提示信息,没有因为异常而终止。

在这里插入图片描述
在这里插入图片描述

Exception是try代码块传递给catch代码块的变量类型,e是变量名,catch代码块中的语句“e.printStackTrace()方法用于指出异常的类型,性质,栈层次已经出现在程序中的位置。”另外两个方法如下: getMessage() : 输出错误性质 toString() : 给出异常的类型与性质。

2.finally 语句块

完整的异常处理语句一定要包含finally语句,无论程序中有无异常发生,并且无论之间的try-catch 语句块是否顺序执行完毕,都会执行finally语句。 在以下4种特殊情况下,finally块不会被执行:

在finally语句中发生了异常 在前面的代码中使用了System.exit()退出程序 程序所在的线程死亡 关闭CPU

四.自定义异常

除了内置的异常类,用户也可以自定义异常,只需要继承Exception类即可。 步骤如下: 1.创建自定义异常类。 2.在方法中通过throw关键字抛出异常对象。

3.如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕捉并处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。

4.在出现异常的调用者中捕捉并处理异常。

例如:

代码语言:javascript
复制
//创建自定义异常类
class MyException extends Exception{
    public MyException(String ErrorMessage) {
    super(ErrorMessage); 
    }
}

//在方法中通过throw关键字抛出异常对象

public class Exceptiontest {
    static int avg(int number1,int number2) throws MyException{
    if (number1 < 0 || number2 < 0) {
        throw new MyException("不可以使用负数"); 
    }
    if (number1 > 100 || number2 > 100) {
        throw new MyException("数值太大了"); 
    }
    return (number1 + number2); 
    }
    public static void main(String[] args) {
        try {
            int num =avg(155,155); 
            System.out.print(num); 
        }catch(MyException e) {
         System.out.println(e);
        } 
    }
}

运行结果:

在这里插入图片描述
在这里插入图片描述

五.在方法中抛出异常

1.使用throws关键字抛出异常

throws 关键字通常被应用在声明方法时,用来指定方法可能抛出的异常,多个异常可使用逗号分隔。 如:

代码语言:javascript
复制
int avg(int number1,int number2) throws MyException{
//   。。。。。。
}

使用throws关键字将异常抛给上一级后,如果不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码。

2.使用throw关键字抛出异常

throw关键字通常用于方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即终止,他后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法的声明中指名要抛出的异常,如果要捕捉throw抛出异常,则必须使用try-catch语句块。 如:

代码语言:javascript
复制
if (number1 < 0 || number2 < 0) {
         throw new MyException("不可以使用负数"); 
     }

若有错误,欢迎指正批评,欢迎批评。 每文一句:生活不能等别人来安排,要自已去争取和奋斗;而不论其结果是喜是悲,但可以慰藉的是,你总不枉在这世界上活了一场。——路遥《平凡的世界》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.异常概述
  • 二.常见异常
  • 三.捕捉异常
    • 1. try-catch 语句块
      • 2.finally 语句块
      • 四.自定义异常
      • 五.在方法中抛出异常
        • 1.使用throws关键字抛出异常
          • 2.使用throw关键字抛出异常
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档