java 语法错误是异常吗,JAVA异常处理语句
00-1010 1.例外2的概念。例外3的架构。异常的处理3.1抛出异常3.2.1throws3.2.2try-catch3.3异常4的处理过程。自定义异常
00-1010程序执行过程中的异常行为在Java中称为异常。
常见的例外如下:
目录
Throwable:是异常系统的顶级类。它有两个重要的子类,错误和异常。
例外:我们常说的例外就是例外。这样的问题可以通过代码来处理,让程序继续运行下去。
错误:指Java虚拟机无法解决的严重问题。这种问题比较严重。一旦发生,就很难修复,就像一个人得了不治之症。
系统的异常结构图大致如下:
根据异常发生的时间,异常可以分为编译时异常(检查异常)和运行时异常(未检查异常)。
RuntimeException及其子类是运行时异常。
注意:写代码的语法错误不能称为异常。
00-1010关于处理异常的两个想法:
LBYL:操作前做充分的检查。
EAFP:先操作,遇到问题再处理。
异常处理的核心思想是EAFP。
00-1010首先要做的是找出异常点的位置。
关键词:投掷
语法如下:
抛出新的xxxException(异常的原因)比如写一个方法来获取数组的元素。
public static int getElement(int[]arr,int index){ if(arr==null){ throw new nullpointerexception(数组为空);} if(index 0 index=arr . length){ throw new arrayindexoutofBoundsException(非法下标);} return arr[索引];}
注意:
Throw必须在方法内部抛出。抛出的对象必须是异常类或其子类。如果是RuntimeException类或其子类(即运行时异常),可以交给JVM处理。如果是编译时异常,需要自己处理,否则代码无法通过编译异常。一旦抛出,下面的代码就不会再执行了。
00-1010主要有两种方式:投和试接。
1.异常的概念
抛出是为了声明一个异常。当方法抛出编译时异常时,它使用throws将异常抛出给方法的调用方进行处理。也就是说,当前方法不处理异常,提醒方法的调用方处理异常。
语法如下:
返回值方法名称()引发异常类型1,异常类型2{.}
这种用法在本文介绍常用于比较和克隆对象的接口时已经出现过。
链接原始抽象类和接口
使用说明:
抛出位置是,在方法的参数列表后声明的异常必须是异常类或其子类抛出。其后可以有多个例外,用逗号分隔。如果存在父子关系,调用方在声明父类时必须处理异常,或者继续使用throws抛出throws,这与Throws非常相似。他们之间的区别需要注意。
Throwthrows在方法中使用。
在方法声明之后
一次抛出只能抛出一个异常。
它后面可以跟多个异常类名。
-align:center">抛出的异常由方法内的语句处理
抛出的异常由方法的调用者处理
执行throw是一定出现了某种异常
表示有出现异常的可能性,并不一定就会出现这些异常
3.2.2try-catch
try-catch就是真正的对异常进行处理,语法如下:
try { //可能出现异常的代码放在此处} catch(xxxException e) { //若try抛出的异常被catch捕获到,在此处进行处理}
try后面可以有多个catch,catch括号中可以写多个异常类型,中间使用隔开
还是以上面的获取数组元素的方法为例,对其进行修改:
public static int getElement(int[] arr,int index) { return arr[index]; }//main方法中使用try-catchpublic static void main(String[] args) { int[] arr=new int[]{1,2,3,4,5}; try { getElement(null,1); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("下标越界"); } catch(NullPointerException e) { System.out.println("空数组"); } }
注意:
try块内抛出异常位置之后的代码不会被执行
try抛出的异常需要被catch捕获才能处理,如果抛出的异常没有被捕获,则会继续向外抛出,直至JVM中断程序
如果异常之间具有父子关系,一定是子类异常在前先被捕获,父类异常后被捕获
使用try-catch后只会打印自己代码块内的信息,上图中也可以看到,想要异常信息尽可能完整,可使用printStackTrace()方法
此外还有一个关键字:finally
这个关键字需要记住的是:不管程序是否发生异常,finally中的语句都会被执行
基于此特点,所以finally一般是用来进行一些资源清理的扫尾工作
还有,不建议在finally中放入return语句,比如下面代码
public static int fc() { try { retrun 1; } catch(ArithmeticException e) { System.out.println("算数异常"); } finally { return 10; } }
结果返回的是10,try中的1因为fianlly的存在是无法返回的
3.3异常的处理流程
在JVM中有一块内存空间叫做"虚拟机栈" ,这块空间是专门用来存储方法之间的调用关系的,这种调用关系用调用栈来描述
当代码中出现异常而又没有对应的处理方式的时候,就会沿着调用栈向上传递,直到传递到JVM终止程序
异常的处理流程如下:
优先执行try中的代码抛出异常若catch捕获到异常,则处理异常,否则向上传递如果一直到 main 方法也没有合适的代码处理异常, 就会交给 JVM 来进行处理, 此时程序就会异常终止
4.自定义异常
虽然Java本身就已经有很多异常类,但在实际的开发中仍然会遇到一些Java中没有包含的异常,此时就需要自定义异常
具体实现方式如下:
自定义一个类,继承Exception(编译时异常)或RunTimeException(运行时异常)类里面实现一个带有String类型参数的构造方法,String是为了说明出现异常的原因到此这篇关于JavaSE详细讲解异常语法的文章就介绍到这了,更多相关Java异常内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。