首页 > 编程语言 >JAVA——异常

JAVA——异常

时间:2024-07-08 12:28:39浏览次数:18  
标签:语句 JAVA try finally catch Java 异常

异常Exception

概念

异常也就是非正常情况,比如使用空的引用、数组下标越界、内存溢出错误等,这些都是意外的情况,背离我们程序本身的意图。

Java提供了异常对象描述这类异常情况。

Java提供了异常机制来进行处理,通过异常机制来处理程序运行期间出现的错误。通过异常机制,可以更好地提升程序的健壮性。

可以将异常通俗的理解为“陷阱”,程序运行出现异常,就是掉到陷阱了。

注意:

Java异常是描述在一块代码中发生的异常情况(也就是错误)的对象。

 异常处理基本流程

第一种情况:

try{

}

catch(…){

}

大部分设计良好的catch子句,应当能够分辨出异常情况,然后继续执行,就好像错误根本没有发生一样。

异常处理过程:

(1)当执行过程中遇到异常时,系统会抛出异常(对象)

(2)catch()块捕获异常并处理。

(3)没有被捕获的异常最终都将由默认处理程序进行处理。默认处理程序会显示一个描述异常的字符串,输出异常发生点的跟踪栈,并终止程序。

提示:

l  由try保护的语句必须使用花括号括起来(即,它们必须位于一个块中)。不能为单条语句使用try。catch块也不能省略花括号。

l  try块中发生异常之后直接进入catch块,执行完catch块后也不会再返回到try块。因此,try块中发生异常之后的语句都不会再执行。

第二种情况:多条catch子句

try{

}

catch(…){

}

catch(…){

}

提示:

l  try及其catch语句构成了一个单元。catch子句的作用域被限制在由之前try语句指定的那些语句。

l  执行了一条catch语句之后,会忽略其他catch语句,并继续执行try/catch块后面的代码。

l  当使用多条catch语句时,要重点记住异常子类必需位于它的所有超类之前。

第三种情况:finally

try(){

}

/*可以有多个catch块*/

finally{

}

提示:

l  不管是否有异常抛出,都会执行finally块。

l  最多只能有一个finally块。

l  对于关闭文件句柄、以及释放资源,finally子句都是很有用的。

第四种情况:

try(){

}

catch(…){

}

catch(…){

}…

finally{

}

提示:

每个try语句至少需要有一个catch子句或一个finally子句。

 嵌套的try语句

一条try语句可以位于另外一条try语句中。

如果内层的try语句没有为特定的异常提供catch处理程序,执行流程就会跳出该try语句,检查外层try语句的catch处理程序,查看异常是否匹配。这个过程会一直继续下去,直到找到了一条匹配的catch语句,或直到检查完所有的try语句。如果没有找到匹配的catch语句,则Java运行时系统会处理该异常。

提示:

当涉及方法调用时,可以能会出现不那么明显的try语句嵌套。

 异常类型

  异常继承体系

Error一般指与JVM相关的错误,如系统崩溃、虚拟机错误、动态链接失败等。

Exception有一个重要子类RuntimeException。所有RuntimeException类及其子类的实例被称为运行时(Runtime)异常。对于您编写的程序而言,这种类型的异常是自动定义的,包括除零和无效数组索引这类情况。

运行时异常之外,称为非运行时异常/编译异常。

Throwable重写了(由Object定义的)toString()方法,从而可以返回一个包含异常描述的字符串。可以使用println()语句显示这个描述。

 异常分类

Java的异常分为两大类:checked异常和unchecked异常。

l  unchecked异常(非检查异常),也称运行时异常(RuntimeException),比如常见的NullPointerException、IndexOutOfBoundsException。对于运行时异常,java编译器不要求必须进行异常捕获处理或者抛出声明,由程序员自行决定。运行异常

l  checked异常(检查异常),也称非运行时异常(运行时异常以外的异常就是非运行时异常)。Java认为Checked异常都是可以被处理(修复)的异常,所以Java程序必须显式处理Checked异常,否则无法通过编译。编译异常

含义:checked异常是指程序员比较进行检查,必须进行处理。

对于Checked异常的处理方式有如下两种:

l  当前方法明确知道如何处理该异常,则应该使用try…catch块来捕获该异常,然后在对应的块中修复该异常。

l  当前方法不知道如何处理这种异常,则应该在定义该方法时声明抛出该异常。

常用异常

unchecked异常 运行时异常

要求:看到异常类名,要知道表示哪种错误,知道属于哪类异常

java.lang包中定义的unchecked异常

异  常

含  义

ArithmeticException

算术错误,例如除零

ArrayIndexOutOfBoundsException

数组索引越界

ArrayStoreException

使用不兼容的类型为数组元素赋值

ClassCastException

无效的转换

EnumConstantNotPresentException

试图使用未定义的枚举值

IllegalArgumentException

使用非法实参调用方法

IllegalMonitorStateException

非法的监视操作,例如等待未锁定的线程

IllegalStateException

环境或应用程序处于不正确的状态

IllegalThreadStateException

请求的操作与当前线程状态不兼容

IndexOutOfBoundsException

某些类型的索引越界

NegativeArraySizeException

使用负数长度创建数组

NullPointerException

非法使用空引用

NumberFromatException

字符串到数字格式的无效转换

SecurityException

试图违反安全性

StringIndexOutOfBounds

试图在字符串边界之外进行索引

TypeNotPresentExcepton

未找到类型

UnsupportedOpetationException

遇到一个不支持的操作

常用的checked异常  编译

IOExeption            //输入、输出异常

FileNotFoundException   //文件不存在异常

SQLException          //SQL异常

java.lang包中定义的Checked异常(了解)

异  常

含  义

ClassNotFoundException

未找到类

CloneNotSupportedException

试图复制没有实现Cloneable接口的对象

IllegalAccessException

对类的访问被拒绝

InstantiationException

试图为抽象类或接口创建对象

InterruptedException

一个线程被另一个线程中断

NoSuchFieldException

请求的字段不存在

NoSuchMethodException

请求的方法不存在

ReflectiveOperationException

与反射相关的异常的子类(该异常是由JDK 7新增的)

标签:语句,JAVA,try,finally,catch,Java,异常
From: https://blog.csdn.net/weixin_59369438/article/details/140145047

相关文章

  • Java——面试题
    1、JDK和JRE有什么区别?JDK(JavaDevelopmentKit),Java开发工具包JRE(JavaRuntimeEnvironment),Java运行环境JDK中包含JRE,JDK中有一个名为jre的目录,里面包含两个文件夹bin和lib,bin就是JVM,lib就是JVM工作所需要的类库。2、==和equals的区别是什么?对于基本类型,==比较的......
  • 从零开始学Java(超详细韩顺平老师笔记梳理)03——各类运算符、标识符关键字、进制转换、
    文章目录前言一、运算符(算术、关系、逻辑、赋值、三元)1.算术运算符2.关系运算符(比较运算符)3.逻辑运算符4.赋值运算符5.三元运算符TernaryOperator二、运算符优先级三、标识符规范与关键字1.标识符命名规则和规范2.关键字3.保留字四、键盘输入五、进制介绍转换,......
  • doc转docx(java-python)
    本文功能借助python实现的doc转docx,调研了一下开源的工具或者类库转换效果不理想,所以选择python 1./resources/convert.py(py文件放到resources下)importargparsefromdoc2docximportconvertdefconvert_doc_to_docx(docFilePath,docxFilePath):convert(docFi......
  • Java核心技术学习笔记(四)
    一、Java有几种文件拷贝方式Java有多种比较典型的文件拷贝实现方式,比如:利用java.io类库,直接为源文件构建一个FileInputStream读取,然后再为目标文件构建一个FileOutputStream,完成写入工作。publicsaticvoidcopyFileByStream(Filesource,Filedes)throwsIOException{......
  • java-spring boot光速入门教程(超详细!!)
    目录一、引言1.1初始化配置1.2整合第三方框架1.3后期维护1.4部署工程1.5敏捷式开发二、SpringBoot介绍springboot2.1搭建一个springboot工程2.2使用idea创建项目2.3在线创建姿势2.4项目的目录结构2.5项目的运行方式2.6yml文件格式2.7多环境配置2......
  • Java笔试|面试 —— 对多态性的理解
    谈谈对多态性的理解:一个事物的多种形态(编译和运行时状态不一致性)实现机制:通过继承、重写和向上转型(Objectobj=new子类())来实现。1.广义上的理解子类对象的多态性,方法的重写;方法的重载;子类对象的多态性:编译时是父类对象,运行时是不确定的子类对象。(体现不一致性)......
  • Java核心技术学习笔记(三)
    一、谈谈Java反射机制,动态代理是基于什么原理?反射机制是Java语言提供的一种基础功能,赋予程序在运行时自省(introspect,官方用语)的能力。通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义。动态代......
  • Java核心技术学习笔记(一)
    面向对象三大特征封装:把客观的事物封装成抽象的类,有自己的属性及方法继承:是一种能力,可以使用现有类的功能,并可以再次基础上进行类功能的拓展1、多态:将子类传入父类的参数引用2、五大基本原则单一职责原则:一个类只做一件事,只有一个引起它变化的原因开放封闭原则:对拓展开放、......
  • Java核心技术学习笔记(二)
    1、字符串的不可变的体现:缓存:两个内容相同的字符串变量在字符串池中指向同一个字符串对象,保证修改其中一个,另一个不会改变安全性:敏感数据存储成字符串,保证数据唯一准确性线程安全:不可变性会自动使字符串成为线程安全的hashCode缓存:在String类中被重写,以方便缓存,确保返回相同的......
  • Java计算机毕业设计的软件推荐平台(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,软件应用已成为人们日常生活和工作中不可或缺的一部分。然而,面对海量的软件资源,用户往往难以快速找到符合自身需求的软件,同时......