使用异常和不使用异常的区别
我们用1/0作测试,加上异常处理之后,程序的返回值是0,并且可以往下继续执行。
不使用try-catch处理异常的话,程序的返回值是1,而且不继续往下执行了
一、异常机制
1. 什么是异常
程序在运行过程中遇到的一些“意外”,例如文件找不到、文件格式不对、网络连接失败、用户输入不符合要求等等影响程序健壮性的“意外”。之前需要我们程序员把这些意外都想到,然后用if语句的形式写下来,如果出现以外,则对用户输出cout"文件找不到",然后让用户重新输入(写一个循环)。异常机制就是java已经把这些能想到的意外都封装好了,我们不用自己再去写if--cout了,直接调用异常处理就行。
2. 异常体系结构
分类:
- Error
- Exception
- 运行时异常:编译时检查不出来,运行时才会发现和预期结果不一样
- 数组越界
- 空指针
- 除数为0
- 非运行时异常:编译时就会报错,必须要处理。
- ClassNotFound
- FileNotFound
- I/O类异常
- SQL类异常
3. java异常处理机制
1. 作用?
一般程序遇到没有处理过的异常就停止了,java的异常处理机制就是让程序遇到异常后处理一下这个异常,使得程序正常运行下去。
2. 5个关键字
5个关键字:try、catch、finally、throw、throws
3.try-catch-finally 捕获异常
一般try-catch-finally连着使用,举个栗子。 下面代码的a/b可能会发生错误,比如用户让b=0的时候(在以前没有异常机制的时候,我们一般会写if(b==0) cout"被除数不能为零!",但是现在我们上面都不用写,直接try-catch)
加上try-catch-finally捕获异常
PS01:try和catch是必须项。finally处理善后工作,可写可不写。无论被try监控的区域异常与否都会进入finally代码块,所以finally中通常用来处理I/O流、资源、Scanner、数据库等的关闭工作(无论是否异常都要关掉这些东西)。
PS02: 多个catch捕获多个异常,把大的放后面(throwable是最大,包括所有error和exception)
PS03:快捷键:选中被try监控的区域,按Ctrl+Alt+T
4. throw 和 throws抛出异常
run()
{
4. 自定义异常
一般java给出的内置的异常就够用了,如果开发大型项目可能会涉及到自定义异常。
自定义异常需要继承Exception类。
1) 自定义异常类MyException.java
package com.example.demo04;
/**
* 自定义异常:数值大于10为异常
*/
public class MyException extends Exception{
public int detail;
public MyException(int a){
this.detail=a;
}
@Override
public String toString() {
return "MyException{" +
"异常=>" + detail +
'}';
}
}
2)测试类
package com.example.demo04;
public class Main {
public static void test(int a) throws MyException {
//大于10,异常
if(a>10){
throw new MyException(a); //抛出自定义异常
}
//不异常
System.out.println("参数"+a+" is OK");
}
public static void main(String[] args) {
try {
test(12); //12>10,抛出异常
} catch (MyException e) {
System.out.println(e);
}
}
}