Java入门教程十一(异常处理)

在程序设计和运行的过程中,发生错误是不可避免的。尽管 Java 语言的设计从根本上提供了便于写出整洁、安全代码的方法,并且程序员也尽量地减少错误的产生,但是使程序被迫停止的错误的存在仍然不可避免。为此,Java 提供了异常处理机制来帮助程序员检查可能出现的错误,以保证程序的可读性和可维护性

异常(Exception)

异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行的程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类。错误可能产生于程序员没有预料到的各种情况,或者超出程序员可控范围的环境,例如用户的坏数据、试图打开一个不存在的文件等。为了能够及时有效地处理程序中的运行错误,Java 专门引入了异常类

异常原因

一、Java 内部错误发生异常,Java 虚拟机产生的异常。

二、编写的程序代码中的错误所产生的异常,例如空指针异常、数组越界异常等。这种异常称为未检査的异常,一般需要在某些类中集中处理这些异常。

三、通过 throw 语句手动生成的异常,这种异常称为检査的异常,一般用来告知该方法的调用者一些必要的信息。

Java 通过面向对象的方法来处理异常。在一个方法的运行过程中,如果发生了异常,则这个方法会产生代表该异常的一个对象,并把它交给运行时的系统,运行时系统寻找相应的代码来处理这一异常。我们把生成异常对象,并把它提交给运行时系统的过程称为拋出(throw)异常。运行时系统在方法的调用栈中查找,直到找到能够处理该类型异常的对象,这一个过程称为捕获(catch)异常。

异常类型

在 Java 中所有异常类型都是内置类 java.lang.Throwable 类的子类,即 Throwable 位于异常类层次结构的顶层。Throwable 类下有两个异常分支 Exception 和 Error

Throwable 类是所有异常和错误的超类,下面有 Error 和 Exception 两个子类分别表示错误和异常。其中异常类 Exception 又分为运行时异常和非运行时异常,这两种异常有很大的区别,也称为不检查异常(Unchecked Exception)和检查异常(Checked Exception)

Exception 类用于用户程序可能出现的异常情况,它也是用来创建自定义异常类型类的类。

Error 定义了在通常环境下不希望被程序捕获的异常。Error 类型的异常用于 Java 运行时由系统显示与运行时系统本身有关的错误。堆栈溢出是这种错误

运行时异常都是 RuntimeException 类及其子类异常,如 NullPointerException、IndexOutOfBoundsException 等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生

非运行时异常是指 RuntimeException 以外的异常,类型上都属于 Exception 类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如 IOException、ClassNotFoundException 等以及用户自定义的 Exception 异常,一般情况下不自定义检查异常。表 1 列出了一些常见的异常类型及它们的作用

常见的异常类型

Exception   异常层次结构的根类
RuntimeException    运行时异常,多数 java.lang 异常的根类
ArithmeticException 算术谱误异常,如以零做除数
ArraylndexOutOfBoundException   数组大小小于或大于实际的数组大小
NullPointerException    尝试访问 null 对象成员,空指针异常
ClassNotFoundException  不能加载所需的类
NumberF ormatException  数字转化格式异常,比如字符串到 float 型数字的转换无效
IOException I/O 异常的根类
F ileN otF oundException    找不到文件
EOFException    文件结束
InterruptedException    线程中断
IllegalArgumentException    方法接收到非法参数
ClassCastException  类型转换异常
SQLException    操作数据库异常

异常处理

异常处理通过 5 个关键字来实现:try、catch、throw、throws 和 finally。try catch 语句用于捕获并处理异常,finally 语句用于在任何情况下(除特殊情况外)都必须执行的代码,throw 语句用于拋出异常,throws 语句用于声明可能会出现的异常。在方法中用 try catch 语句捕获并处理异常,catch 语句可以有多个,用来匹配多个异常。
对于处理不了的异常或者要转型的异常,在方法的声明处通过 throws 语句拋出异常,即由上层的调用方法来处理

try{
    //逻辑程序块
}
catch(ExceptionType1 e){
    //处理代码块1
}
catch (ExceptionType2 e){
    //处理代码块2
    throw(e);    //再抛出这个"异常"
}
finally{
    //释放资源代码块
}

自定义异常

如果 Java 提供的内置异常类型不能满足程序设计的需求,可以设计自己的异常类型。自定义异常类必须继承现有的 Exception 类或 Exception 的子类来创建,其语法形式为

<class><自定义异常名><extends><Exception>

自定义异常类一般包含两个构造方法:一个是无参的默认构造方法,另一个构造方法以字符串的形式接收一个定制的异常消息,并将该消息传递给超类的构造方法。

public class MyException extends Exception
{
    public MyException()
    {
        super();
    }
    public MyException(String str)
    {
        super(str);
    }
}
//使用
throw new MyException("异常信息!");

原文地址:https://www.cnblogs.com/lilinfeng/p/10995746.html

时间: 2024-08-01 20:47:08

Java入门教程十一(异常处理)的相关文章

Java入门教程总目录

Java入门教程总目录 持续更新中... 1.Java常识汇总 2.Java框架对比 2.Java技术路线 3.Java编码规范 Java环境变量配置 5.枚举 12.定时任务

RabbitMQ入门教程(十一):消息属性Properties

原文:RabbitMQ入门教程(十一):消息属性Properties 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/78698364 分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 简介 发送消息可以为消息指定一些参数 Delivery mode: 是否持久化,1 - Non-persistent,2 -

Go语言入门教程(十一)

原创: IT干货栈 Hello,各位小伙伴大家好,我是小栈君,昨天讲了关于go语言的函数的定义和自定函数的部分种类,我们今天接着上期所讲的内容继续进行分享. 一.函数之无参有返回值 有返回值的函数,必须有明确的终止语句,否则会引发编译错误.所以在有返回值的函数中需要使用关键字 return . 他可以是一个或者多个返回值.官方建议:最好命名返回值,因为不命名返回值,虽然使得代码更加简洁了,但是会造成生成的文档可读性差. //方式1 func Test01() int { return 250 }

Java入门教程八(面向对象)

对象概念 一切皆是对象.把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作.一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的.对象之间通过相互作用传递信息,实现程序开发.对象有以下特点:对象具有属性和行为.对象具有变化的状态.对象具有唯一性.对象都是某个类别的实例. 三大特性 封装 封装是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用. Java 语言的基本封装单位是类.由于类的用途是封装

Java入门教程三(流程控制)

概述 程序有 3 种结构:顺序结构.选择结构和循环结构.分别为:if elseswitch case,while与do while,for, foreach,return,break ,continue if else if 选择结构是根据条件判断之后再做处理的一种语法结构.默认情况下,if 语句控制着下方紧跟的一条语句的执行.不过,通过语句块,if 语句可以控制多个语句. public static void main(String[] args) { int a=1,b=2; if(a>b)

Java入门教程五(数字和日期处理)

Java 提供了处理相关问题的类,包括 Math 类.Random 类.BigInteger 类.Date 类等. Math类 Math 类封装了常用的数学运算,提供了基本的数学操作,如指数.对数.平方根和三角函数等.Math 类位于 java.lang 包 静态常量 Math 类中包含 E 和 PI 两个静态常量,其中 E 用于记录 e 的常量,而 PI 用于记录圆周率的值. System.out.println(Math.E); //2.718281828459045 System.out.

Java入门教程七(数组)

数组是最常见的一种数据结构,它是相同类型的用一个标识符封装到一起的基本类型数据序列或者对象序列.数组使用一个统一的数组名和不同的下标来唯一确定数组中的元素.实质上,数组是一个简单的线性序列,因此访问速度很快 一维数组 一组相同类型数据的线性集合,一旦声明了数组的大小,就不能再修改. 创建 数据类型[] 数组名; 数据类型既可以是基本数据类型,也可以是引用数据类型 String[] name; Person[] persons; 分配空间 分配空间就是要告诉计算机在内存中为它分配几个连续的位置来存

java入门教程:开发环境之jdk搭建【Windows10】_环境变量配置

Java是由Sun公司于1995年5月推出的高级程序设计语言. Java是跨平台语言,可运行于Windows.Linux.Mac OS等多个平台,以及其他多种UNIX版本的系统. 本文将给大家讲解Java开发环境JDK的搭建,更多精彩内容敬请期待! 第一步:下载JDK安装包 首先下载Java开发工具包JDK.下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 点击下载,如图所示: 同意协议,然后点击下载W

Webpack入门教程十一

60.htmlwebpackplugin插件的配置-title的使用,修改webpack.config.js文件,修改的内容如下 var webpack = require('webpack'); var HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry:  __dirname + "/app/Greeter.js", output: { path: __dirname + &quo