异常Exception
1.简介
Throwable是所有异常类的父类;异常类分为Error和Exception两大类
异常:程序运行过程中发生的错误,即不正常的事,异常会中止程序运行,相当于感冒,阑尾炎,将异常处理掉,可以继续执行
Error:描述的是java运行系统内部错误和底层资源耗尽的错误,一般就是JVM错误,比较严重,仅仅靠应用层通过代码进行修改也不能恢复正常执行,致命性异常,相当于非典,艾滋,癌,必须修改源程序
Exception:非致命性异常,可以通过捕获处理后继续正常执行
运行时异常:程序运行时发生的异常 编译时期可以不处理 ---->抛出 捕获
非运行时异常:编译时异常 编译时期必须处理 ---->抛出 捕获
当异常情况发生,将导致程序异常终止,java的异常处理是运行时错误的处理和恢复。(保证程序不因出现异常而中止运行,必须要对出现的异常进行处理)
异常本身使用类描述,产生一个异常就代表该异常的对象被创建,并且在导致该错误的方法中被引发(throw,或称为抛出),可以充分发挥类的可扩展和可重用的优势。
2.异常的常用分类:
方法名 |
说明 |
ArithmeticException |
算术错误,例如:零作除数 |
IndexOutOfBoundsException |
下标越界 |
NullPointerException |
访问 null 对象成员 |
ClassNotFoundException |
不能加载所需的类 |
InputMismatchException |
欲得到的数据类型与实际输入类型不匹配 |
IllegalArgumentException |
方法接收到非法参数 |
ClassCastException |
对象强制类型转换出错 |
SQLException |
数据库操作异常 |
ParseException |
解析异常 |
3. 异常处理方式
使用逻辑判断可以起到防止程序异常终止的作用,但是这种程序逻辑与错误处理一起混用,使程序难以维护和调试;对于极少数情况发生的错误,每次运行都要进行判断,降低程序的性能。
1. 默认处理机制:控制台打印异常信息,程序异常终止
2. 五个关键字:try catch finally(捕获异常) throw throws(抛出异常)
捕获异常常用的的三种格式:try语句不能单独写 后面必须跟上catch或者finally
1.try{
//可能会发生异常的代码,和发生异常后不能执行的代码
}catch(异常类型 异常名){//异常处理函数:异常类型限定该函数所能处理的异常类型
//发生异常后,所进行的异常处理
}
a. 没有发生异常,程序正常执行,得到result
b. 发生异常,程序就会执行对应catch的代码块
c. 当发生异常的类型和catch函数所能处理的异常类型不匹配,catch函数不能处理异常
2.try{
}catch(异常类型 异常名){//异常处理函数:异常类型限定该函数所能处理的异常类型
//对异常所进行的处理
}finally{
//无论异常发生与否,都执行此处代码
}
3.try finally只捕获不处理
当发生异常后,会按照顺序查看每个catch语句,并执行第一个与异常类型匹配的catch语句;其他语句忽略。捕获异常时先捕获子类,再父类(先小后大,先具体后概括)
三种格式的两种处理:
1.分别捕获,分别处理
2.一个try,多个catch
try{
//发生多个异常的代码和发生异常不能执行的代码
}catch(异常类型1 ex){
//对发生异常类型1的处理
}catch(异常类型2 ex){
//对发生异常类型2的处理
}
...
finally{
}
4. 自定义异常类
自定义异常类使开发人员更加方便地定义程序出错位置且更加详细地描述异常信息,例如:
1.创建一个类继承Exception
public class SexException extends RuntimeException{/*异常常用方法:toString()getMessage()printStackTrace()*/public SexException() {super();// TODO Auto-generated constructor stub}
2.在当前创建的类中定义有参的构造方法,并在构造方法中调用父类构造方法
public SexException(String message) {super(message);// TODO Auto-generated constructor stub}@Overridepublic String getMessage() {// TODO Auto-generated method stubreturn super.getMessage();}@Overridepublic String toString() {// TODO Auto-generated method stubreturn super.toString();}public class Person {//自定义异常private String name;private String sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) throws SexException{if(sex.equals("男")||sex.equals("女")){this.sex=sex;}else{//无法解决这个异常 抛出异常throw new SexException("性别错误");}this.sex = sex;}@Overridepublic String toString() {return "Person [name=" + name + ", sex=" + sex + "]";}}
3.在程序中使用自定义异常类即可
import java.util.*;
1. 继承Exception
public class MyException extends Exception{
public MyException(String msg) {
2.构造方法中调用父类构造方法
super(msg);
}
}
class Demo {
public static void main(String args[]) throws Exception {
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
if((age<0)||(age>100))
3.使用自定义异常类
throw new MyException("输入的年龄非法");
}
}
5. 子类重写父类方法时,可以抛出运行时异常,但是抛出的编译异常必须是父类的子集。
异常Exception相关推荐
- spring boot 异常(exception)处理
spring boot 异常(exception)处理 参考文章: (1)spring boot 异常(exception)处理 (2)https://www.cnblogs.com/jinbuqi/ ...
- ASP.NET MVC 异常Exception拦截
ASP.NET MVC 异常Exception拦截 参考文章: (1)ASP.NET MVC 异常Exception拦截 (2)https://www.cnblogs.com/xyb0226/p/92 ...
- Struts2环境下Tomcat启动异常:Exception starting filter struts2,报了一个java.lang.ClassNotFoundException
Struts2环境下Tomcat启动异常:Exception starting filter struts2,报了一个java.lang.ClassNotFoundException 参考文章: (1 ...
- Python编程基础:第二十九节 异常Exception
第二十九节 异常Exception 前言 实践 前言 我们在写代码时不可避免地会出错,这时候编译器便会抛出异常并中断程序的执行.针对这种情况,我们可以采用异常处理的方式捕捉程序中的异常信息,并将异常信 ...
- Java中的异常 Exception
Java中的异常 Exception java.lang.Exception类是Java中所有异常的直接或间接父类.即Exception类是所有异常的根类. 比如程序: public class Ex ...
- java异常 子类_Java异常 Exception类及其子类(实例讲解)
C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象. Java异常处理通过5个关键字try.ca ...
- java经常会出现异常的是,“Java异常Exception”总结
1. 异常(Exception). 2.Java中的异常分为两大类: a) Checked exception (非 Runtime Exception) 非运行时异常 b) Unchecked ...
- PL/SQL 08 异常 exception
--PL/SQL错误 编译时 运行时 --运行时的出错处理 EXCEPTION --异常处理块 DECLARE - BEGIN - EXCEPTION WHEN OTHERS THE ...
- java exception子类_Java异常 Exception类及其子类(实例讲解)
C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象. Java异常处理通过5个关键字try.ca ...
- 我的女朋友漏电了–论C++中的失败(failure),缺陷(bug)和异常(exception)
先做个广告置入,如果喜欢这篇文章,你可以到 zhaoyan.website/blog 去查看于此类似的C/C++文章. 我承认有点标题党了,不过这真的是一篇写软件的文章,所以如果你已经抽出了一张面巾纸 ...
最新文章
- 博士补贴125万,硕士70万本科21万,浙江某地人才(简直是抢人)新政!
- [PHP] debug_backtrace()可以获取到代码的调用路径追踪
- python切片语法-Python切片详解
- 教你精确计算 I2C 上拉电阻阻值
- 面试篇------性能测试+调优
- 克罗伊茨内(Keutznaer)的 7月28日
- JDK8与JDK11
- 目瞪口呆,4款1M不到的实用软件,颠覆你的认知
- WIFI模块AP和STA模式分别是什么意思
- 蓝桥杯B组 杨辉三角
- WebIM 网页聊天工具
- 一定要讲给孩子们的20个小故事
- LEADTOOLS V20,史无前例荣耀归来!!!
- 经验总结1—数据核对
- java实现第八届蓝桥杯平方十位数
- UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\xa0‘ in position 21: illegal multibyte sequ
- 修改注册表来修改文件关联
- Java 方式实现词云显示
- 国产CPU整体性能和发展情况一览表
- 分享一下自己新入职前端工作三个月的心得
热门文章
- WORD系列教程-多级编号制作合同
- uni-app开发h5点击跳转到h5,微信小程序跳转到h5
- 个性化推荐的十大挑战
- mysql 列显示出来_MySQL 显示列
- PCI总线 DMA burst 基本概念
- 2022年上海二级建造师模拟考试题及答案
- Linux:TFTP服务器搭建
- 我国智慧城市场景中物联网终端评测与认证体系研究
- Android学习-运用手机多媒体-通知使用技巧、调用摄像头拍照、从相册中选取照片、播放音频和视频文件(MediaPlayer、VideoView)
- 有关ISE14.7中IMPACT报错Can not find cable, check cable setup 解决方法之一