Java之异常处理
在我们编程时经常会出现各种各样的错误和问题,对于那些编译通过但是运行出现的错误我们一般称为:异常
异常的概念
异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
程序运行——>遇到异常——>程序中断运行
异常处理
Java编程语言使用异常处理机制为程序提供了错误处理的能力
Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws
try—catch块
try-catch的结构如下:
try {
// 代码段(此处不会产生异常)
} catch (异常类型 ex) {
// 对异常进行处理的代码段
}
对于try-catch捕获异常课分三种情况:
①没有捕获异常
则程序将不执行catch内的代码
②捕获到异常且匹配catch内异常类型
程序捕获到异常,且匹配catch中的异常类型,则会执行相应catch内的语句,并在执行完catch内语句后继续执行程序
catch块内的处理语句
①用户自定义输出语句
System.err.println(“出现异常”);
②调用方法输出异常信息
catch语句块的数量可以有多个,因此当触发多种异常时:
①排列catch 语句的顺序:先子类后父类
②发生异常时按顺序逐个匹配
③只执行第一个与异常类型匹配的catch语句
常见异常类型
算数异常:ArithmeticException
空指针异常:NullPointerException
数组越界异常:ArrayIndexOutOfBoundsException
索引越界异常:IndexOutOfBoundsException
类型转换异常:ClassCastException
输入类型不匹配:InputFormatException
输入输出异常:IOException
SQL异常:SQLException
非法参数异常:IllergalArgumentException
数字格式化异常:NumberFormatException
类未找到异常:ClassNotFoundException
finally块
常常会在try-catch后面加上finally块,无论产不产生异常finally中的语句必定会执行,因此finally常用于关闭资源,其使用形式如下:
try {
// 代码段(此处不会产生异常)
} catch (异常类型 ex) {
// 对异常进行处理的代码段
}finally{
//执行语句
}
// 验证try-catch-finally的执行顺序
int a = 6;
int b = 0;
try{
int c = a / b;
}catch(ArithmeticException e)(
System.err.println("分母不能为0");
return;
}finally{
System.err.println("欢迎下次使用!");
}
// 程序执行结果为:分母不能为0
// 欢迎下次使用
throws声明异常
throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开
对于throws抛出的异常,有两种处理方式:
①调用者处理异常
②调用者继续声明异常,其中main()方法声明的异常有Java虚拟机处理
抛出异常
除了系统自动抛出异常外,有些异常需要程序员自行抛出
可以利用throw和throws声明抛出异常
Throwable是java所有异常的父类,其中Error:仅靠程序本身无法恢复的严重错误 ,Exception:由Java应用程序抛出和处理的非严重错误
// 默认年龄为0-100岁,超出则抛出异常
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age)throws Exception {
if(age>=0&&age<=100){
this.age = age;
}else{
throw new Exception("年龄必须在1到100之间!");
}
}
public void print(){
System.out.println(this.name+"今年"+this.age+"岁");
}
}
// 测试类
public class Test {
public static void main(String[] args) {
Person person = new Person();
person.setName("李四");
try {
person.setAge(120);
person.print();
}catch (Exception e){
e.printStackTrace();
}
}
}
自定义异常
自定义异常步骤如下:
// 自定义年龄异常
public class AgeException extends Exception {
public AgeException() {
}
public AgeException(String message) {
super(message);
}
}
// person类
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age)throws AgeException {
if(age>=0&&age<=100){
this.age = age;
}else{
throw new AgeException("年龄必须在1到100之间!");
}
}
public void print(){
System.out.println(this.name+"今年"+this.age+"岁");
}
}
// 测试类
public class Test {
public static void main(String[] args) {
Person person = new Person();
person.setName("李四");
try {
person.setAge(101);
person.print();
}catch (AgeException e){
e.printStackTrace();
}
}
}
处理异常的原则
①异常处理与性能
②异常只能用于非正常情况
③不要将过于庞大的代码块放在try中
④在catch中指定具体的异常类型
⑤需要对捕获的异常做处理
谢谢观看!!希望喜欢的朋友关注,点赞。作者会继续发布Java面向对象编程教程!!
转载于: https://blog.csdn.net/jiandanbuguo/article/details/107595663
向彪-blockchain: 进我的收藏夹吧~