网站名称推荐,营业执照解除异常收费多少钱,台州市建站公司,大专毕业设计怎么做一、异常概念
异常 #xff1a;指的是程序在执行过程中#xff0c;出现的非正常的情况#xff0c;最终会导致JVM的非正常停止。 注意: 在Java等面向对象的编程语言中#xff0c;异常本身是一个类#xff0c;产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的…一、异常概念
异常 指的是程序在执行过程中出现的非正常的情况最终会导致JVM的非正常停止。 注意: 在Java等面向对象的编程语言中异常本身是一个类产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。 异常机制其实是帮助我们找到程序中的问题异常的根类是 java.lang.Throwable 其下有两个子类
java.lang.Error:严重错误Error无法通过处理的错误只能事先避免好比绝症。java.lang.Exception 表示异常异常产生后程序员可以通过代码的方式纠正使程序继续运行是必须要 处理的。好比感冒、阑尾炎。
平常所说的异常指 java.lang.Exception Error 和 Exception 区别是什么 Error 类型的错误通常为虚拟机相关错误如系统崩溃内存不足堆栈溢出等编译器不会对这 类错误进行检测JAVA 应用程序也不应对这类错误进行捕获一旦这类错误发生通常应用程序会被终止仅靠应用程序本身无法恢复 Exception 类的错误是可以在应用程序中进行捕获并处理的通常遇到这种错误应对其进行处理使应用程序可以继续正常运行。 二、异常分类
我们平常说的异常就是指Exception因为这类异常一旦出现我们就要对代码进行更正修复程序。 异常(Exception)的分类:根据在编译时期还是运行时期去检查异常?
编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式 化异常)运行时期异常:runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报 错)。(如数学异常) 1必须处理的异常 IOException这是一个通用的输入输出异常表示在文件或网络操作中发生问题如文件未找到、文件无法读取、连接中断等。 FileNotFoundException指示尝试打开一个不存在的文件时引发的异常。 SQLException用于处理数据库操作中的异常如连接失败、SQL语法错误等。 ParseException通常与日期和时间处理相关表示解析日期或时间字符串时出现问题。 ClassNotFoundException表示在尝试加载类时找不到该类的异常。 2运行时异常【RuntimeException】 在Java中RuntimeException及其子类是非受检异常通常由编程错误、逻辑问题或其他不可预测的情况引发。以下是一些常见的RuntimeException及其子类 NullPointerException当尝试访问一个空对象null的成员方法、字段等时引发的异常。 ArrayIndexOutOfBoundsException当尝试访问数组元素时超出数组边界时引发的异常。 ArithmeticException表示在算术操作中发生异常如除以零。 IllegalArgumentException用于指示传递给方法的参数不符合预期值的异常。通常由程序员传递无效参数引发。 IllegalStateException表示对象的状态不适合执行特定操作时引发的异常。通常用于指示对象的状态转换错误。 ConcurrentModificationException在使用迭代器遍历集合时如果在迭代期间修改了集合的结构会引发此异常。 NumberFormatException通常在字符串转换为数字时出现格式错误时引发例如使用Integer.parseInt(abc)。 ClassCastException尝试将对象强制类型转换为不兼容的类型时引发的异常。 StackOverflowError表示应用程序的调用栈溢出通常是由于递归调用导致的。 OutOfMemoryError表示应用程序在尝试分配更多内存时已用尽所有可用内存。 UnsupportedOperationException通常由不支持的操作引发例如对不可修改的集合调用修改方法。 AssertionError通常在assert语句的断言条件失败时引发用于调试和测试。 NoSuchElementException通常与集合迭代器和枚举相关表示没有更多元素可供迭代时引发。 这些是Java中一些常见的RuntimeException及其子类。它们通常指示程序出现了问题需要通过改进代码来避免或处理这些异常以提高程序的健壮性和稳定性。虽然RuntimeException及其子类不需要显式地捕获或声明但程序员应该采取措施来避免它们的发生以减少潜在的错误和问题。 三、异常的处理 (1)throw 和 throws 声明处理异常
概述:使用throws关键字将问题标识出来, 表示当前方法不处理异常而是提醒给调用者, 让调用者来处理....最终会到虚拟机,虚拟机直接结束程序,打印异常信息。
声明处理异常格式
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ // 可以抛出一个,也可以多个}
*使用场景: 声明处理异常一般处理运行的时候不会出现异常的编译异常* throw 和 throws 的区别是什么
Java 中的异常处理除了包括捕获异常和处理异常之外还包括声明异常和拋出异常可以通过 throws 关键字在方法上声明该方法要拋出的异常或者在方法内部通过 throw 拋出异常对象。 throws 关键字和 throw 关键字在使用上的几点区别如下 throw 关键字用在方法内部只能用于抛出一种异常用来抛出方法或代码块中的异常受查异常 和非受查异常都可以被抛出。 throws 关键字用在方法声明上可以抛出多个异常用来标识该方法可能抛出的异常列表。 一个方法用 throws 标识了可能抛出的异常列表调用该方法的方法中必须包含可处理异常的代码否则也要在方法签名中用 throws 关键字声明相应的异常。 throw关键字的作用 在java中提供了一个throw关键字它用来抛出一个指定的异常对象。throw用在方法内用来抛出 一个异常对象将这个异常对象传递到调用者处并结束当前方法的执行。 throws关键字的作用 声明处理异常使用throws关键字将问题标识出来, 表示当前方法不处理异常而是提醒给调用者, 让调 用者来处理....最终会到虚拟机,虚拟机直接结束程序,打印异常信息。 (2)try-catch-finally 捕获处理异常
finally有一些特定的代码无论异常是否发生都需要执行。另外因为异常会引发程序跳转导致有 些语句执行不到。而finally就是解决这个问题的在finally代码块中存放的代码都是一定会被执行的。
finally代码块的语法格式:
try{// 可能会出现异常的代码}catch(异常的类型 变量名){// 处理异常的代码或者打印异常的信息}finally{// 无论异常是否发生,都会执行这里的代码(正常情况,都会执行finally中的代码,一般用来释放资源)}
执行步骤:
1.首先执行try中的代码,如果try中的代码出现了异常,那么就直接执行catch()里面的代码,执行完后会执 行finally中的代码,然后程序继续往下执行
2.如果try中的代码没有出现异常,那么就不会执行catch()里面的代码,但是还是会执行finally中的代码,然后程序继续往下执行 注意: 1. try和catch都不能单独使用,必须连用。 2. try中的代码出现了异常,那么出现异常位置后面的代码就不会再执行了 3. 捕获处理异常,如果程序出现了异常,程序会继续往下执行 声明处理异常,如果程序出现了异常,程序就不会继续往下执行 3获取异常信息
Throwable类中定义了一些查看方法:
public String getMessage() :获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。public String toString() :获取异常的类型和异常描述信息(不用)。public void printStackTrace() :打印异常的跟踪栈信息并输出到控制台。
包含了异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,都得使用printStackTrace。 在开发中呢也可以在catch将编译期异常转换成运行期异常处理。
public class Test {public static void main(String[] args) {/*Throwable获取异常信息的方法:- public String getMessage():获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。- public String toString():获取异常的类型和异常描述信息(不用)。- public void printStackTrace():打印异常的跟踪栈信息并输出到控制台。*/System.out.println(开始);try {System.out.println(1/0);// 报异常,产生一个异常对象}catch (ArithmeticException e){/*System.out.println(出现了异常);System.out.println(e.getMessage());System.out.println(e);System.out.println(e.toString());*/e.printStackTrace();}System.out.println(结束);}
}娱乐一下 四、异常的注意事项
运行时异常被抛出可以不处理。即不捕获也不声明抛出。如果父类的方法抛出了多个异常,子类覆盖(重写)父类方法时,只能抛出相同的异常或者是他的子集。父类方法没有抛出异常子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常只能捕获 处理不能声明抛出声明处理多个异常,可以直接声明这多个异常的父类异常 在try/catch后可以追加finally代码块其中的代码一定会被执行通常用于资源回收。 多个异常使用捕获又该如何处理呢
多个异常分别处理。多个异常一次捕获多次处理。多个异常一次捕获一次处理。
当多异常分别处理时捕获处理前边的类不能是后边类的父类 一般我们是使用一次捕获多次处理方式格式如下
try{编写可能会出现异常的代码}catch(异常类型A e){ 当try中出现A类型异常,就用该catch来捕获.处理异常的代码//记录日志/打印异常信息/继续抛出异常}catch(异常类型B e){ 当try中出现B类型异常,就用该catch来捕获.处理异常的代码//记录日志/打印异常信息/继续抛出异常}
注意【当多异常分别处理时捕获处理前边的类不能是后边类的父类】
这种异常处理方式要求多个catch中的异常不能相同并且若catch中的多个异常之间 有子父类异常的关系那么子类异常要求在上面的catch处理父类异常在下面的catch处理。 五、自定义异常【企业中常用的定义】 为什么需要自定义异常类 我们说了Java中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是 SUN没有定义好的,例如年龄负数问题,考试成绩负数问题.这些异常在JDK中没有定义过,此时我们根据自己业务的异常情况来定义异常类。 什么是自定义异常类:
在开发中根据自己业务的异常情况来定义异常类. 自定义一个业务逻辑异常: BusinessException
。一个注册异常类。 异常类如何定义
1. 自定义一个编译期异常: 自定义类 并继承于 java.lang.Exception 。2. 自定义一个运行时期的异常类:自定义类 并继承于 java.lang.RuntimeException 。
自定义一个运行时期的异常类:自定义类 并继承于java.lang.RuntimeException。