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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值