JavaSE之异常处理,javase异常处理
分享于 点击 14693 次 点评:248
JavaSE之异常处理,javase异常处理
目录
1.什么是异常
2.异常分类
3.常见的异常类型(面试的时候常问到)
4.异常处理方式
4.1.Java处理异常的5个关键词:
4.2.异常处理方式
4.3.异常处理原则
5.程序调试
1.什么是异常
异常就是非正常情况导致程序的执行流程发生改变。
2.异常分类
Java异常继承图如下(自己画出来):
说明:
- Error:错误,用代码处理不了,一般是虚拟机出现了问题
- Exception:异常,用代码可以处理
- 运行时异常:RuntimeException及其子类,开发过程中遇到的最多。编译可以通过,在运行期出现问题导致程序中断。
- 非运行时异常(受检异常):Exception及其部分子类。编译期出现的问题,这个必须处理否则编译不通过。
3.常见的异常类型(面试的时候常问到)
Excepiton | 异常层次结构的根类 |
常见异常类型 | 说明 |
ArithmeticException | 算术错误情形,比如零作为除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问null对象的成员(空指针异常) |
ClassNotFoundException | 不能加载所需的类 |
InputMismatchException | 欲得到的数据类型与实际输入类型不匹配 |
IIIegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式化异常,如把“abc”转换成数字 |
4.异常处理方式
4.1.Java处理异常的5个关键词:
- try:执行可能产生异常的代码
- catch:捕获处理异常
- finally:无论是否发生异常,代码总能执行
- throws:声明方法可能要抛出的各种异常
- throw:手动抛出异常
4.2.异常处理方式
1)try-catch
语法:
try{
//可能会出现异常的代码
}catch(异常类类型 对象名){
//处理异常
}
说明:
- 没有异常:try执行,catch不执行
- 异常类型匹配:try执行,catch执行
- 异常类型不匹配:try执行,catch不执行
2)多重catch处理
编写顺序(从上到下):
- 由普通异常到特殊异常;
- 由子类异常到父类异常。
3)try-catch-finally
语法:
try{
//可能会出现异常的代码
}catch(异常类类型 对象名){
//处理异常
}finally{
//一定会执行的代码,不管前面是什么异常,还是使用return关键词
}
说明:
- System.exit(0):关闭虚拟机,这是唯一一种情况finally块不执行的情况。
- 几种组合方式
- try-catch
- try-finally
- try-catch-finally
示例:
import java.util.InputMismatchException;
import java.util.Scanner;
public class TestExcepiton3 {
public void a(){
Scanner input = new Scanner(System.in);
int n1,n2,n3;
System.out.println("输入两个数字:");
try {
n1 = input.nextInt();
n2 = input.nextInt();
n3 = n1 / n2;
System.out.println(n3);
} catch (ArithmeticException e) {
System.out.println(("出错了,请与管理员联系"));
}catch (InputMismatchException e) {
System.out.println(e);//展示异常对象的描述信息
System.out.println(e.getMessage());//异常的消息
e.printStackTrace();//堆栈轨迹信息
}catch (Exception e) {
System.out.println(e);
}finally{
System.out.println("其他代码……");
}
}
public static void main(String[] args) {
new TestExcepiton3().a();
}
}
4)throws关键词声明异常
通过throws关键词可以抛出多个异常,多个异常之间用逗号隔开,结果会把异常抛给调用者。调用者的处理方式:
- 受检异常:调用者必须处理
- 运行异常:调用者非必须处理
5)throw关键词抛出异常
手动抛出异常,如果抛出的是运行时异常,可以不用throws声明,但若是受检异常,则必须throws声明。
6)自定义异常类
如何自定义异常类?
- 继承系统定义的异常类;
- 重写父类的方法。
- public String getMessage();
- public void printStackTrace();
- public String toString();
示例:
class AgeException extends RuntimeException{
String smessage;
public AgeException(String smessage) {
this.smessage = smessage;
}
@Override
public String getMessage() {
return "getMessage:" + smessage;
}
@Override
public void printStackTrace() {
System.out.println("printStackTrace:" + smessage);
}
@Override
public String toString() {
return "toString:" + smessage;
}
}
class Person{
private String sex;
public String getSex() {
return sex;
}
public void setSex(String sex) {
/*if (sex.equals("男") && sex.equals("女")) {
this.sex = sex;
} else {
throw new Exception("输入的不符合要求,必须输入男或女");
}*/
if (sex.equals("男") && sex.equals("女")) {
this.sex = sex;
} else {
throw new AgeException("输入的不符合要求,必须输入男或女");
}
}
}
public class TestPerson {
public static void main(String[] args) {
Person p = new Person();
try {
p.setSex("lala");
} catch (AgeException e) {
e.printStackTrace();
System.out.println(e);
System.out.println(e.getMessage());
}
}
}
4.3.异常处理原则
- 只用于处理非正常的情况;
- 避免过大的try;
- 使用多重catch;
- 不要忽略catch块中的异常;
- 改正代码;
- 文档声明。
5.程序调试
程序调试步骤如下:
- 分析错误,设置断点;
- 启动调试(debug);
- 单步运行(F5单步跳入,F6单步跳过);
- 观察变量;
- 发现问题;
- 修正代码,重新运行;
- 解决问题。
相关文章
- 暂无相关文章
用户点评