零基础入门学习JAVA课堂笔记 ——DAY08
异常
1.什么是异常?
Exception
-
异常是指程序在运行过程中出现的不期而至的各种状况
-
异常发生在程序运行期间,它影响了正常程序执行流程
通俗易懂的表达就是,程序在发生意料之外或者拿到的不是想要的时候导致程序不能往下执行的情况就叫异常。
在Java编程学习中我们也经常会碰到许许多多的异常
package pro;
public class Test {
public static void main(String[] args){
int[] sum = new int[3];
System.out.println(sum[3]); //ArrayIndexOutOfBoundsException!!
System.out.println(11/0);//ArithmeticException
}
}
3.异常的简单分类
- 检查性异常
- 在编译的时候能发现的异常
- 运行时异常
- 编译时发现不了的异常只会在运行时出错
- 错误:不是异常
- 脱离程序员控制的问题,错在代码中通常被忽略
4.异常处理框架
Java中把异常当中对象来处理,提出异常处理框架的思想
RuntimeException:一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能的考虑避免这类异常的发生
Error和Exception的区别:Error错误是灾难性的致命的错误,当JVM遇到此类错误时,JVM一把会选择终止线程;而Exception通常情况下可以被程序处理的,并且在程序中应该尽可能的去处理这些异常
5.Java的异常处理机制
- 抛出异常
- 处理异常
异常处理的五个关键字:try、catch、finally、throw、throws
package pro;
public class Test {
public static void main(String[] args){
int[] sum = new int[3];
try { //监控资源区域
System.out.println(sum[3]);
}catch (ArrayIndexOutOfBoundsException e){ //catch 异常捕获
System.out.println("亲,您的数组越界了");
}finally{ //finally 无论怎么样都会执行 处理善后工作
System.out.println("end.");
}
}
}
异常处理也支持多个catch形式
try {
}catch (){ //异常3
}catch(){ //异常2
}catch(){ //异常1
}finally{
}
如上代码,程序在没捕获到异常3就会捕获异常2,如果还没捕获异常2就会捕获异常1;因此,我们应该把大的异常写下面小的异常写下面(范围大小)
6.主动抛出异常
我们可以在try监控区域,通过throw直接抛出异常
package pro;
public class Test {
public static void main(String[] args){
new Test().test(1,0);
}
public void test(int a,int b){
if(b == 0){
throw new ArithmeticException();
}
}
}
在方法中捕获了异常我们可以通过throws从方法中抛出到上一级
package pro;
public class Test {
public static void main(String[] args){
try {
new Test().test(1,0);
} catch (ArithmeticException e) {
System.out.println("出错啦!!!");
}
}
public void test(int a,int b) throws ArithmeticException{
if(b == 0){
throw new ArithmeticException();
}
}
}
7.自定义异常
使用Java内置的异常类可以描述在编程时出现的大部分的异常情况。
大Java还是给程序员提供了自定义异常类,只需要继承Exception即可
自定义一个异常类
package pro;
public class MyException extends Exception{
int a = 10;
public MyException(int b){
this.a = b;
}
//返回异常信息到catch的e
public String toString(){
return "Hello Wrold!!";
}
}
通过异常类自定义异常
package pro;
public class Test {
public static void main(String[] args){
try {
new Test().test(5,21);
}catch (MyException e){
System.out.println("lala:"+e);
}
}
public void test(int a,int b) throws MyException{
if(b != 10){
throw new MyException(a);
}
}
}