感谢你的路过,希望学生的笔记能给你一点微不足道的参考(1/100)
Java面向对象思维导图,[完整Java体系的链接]
目录标题
一,什么是异常?
生活:异常,不正常的意思。
程序:在程序中导致程序中断运行的一种指令流
注意:异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行.
二,异常体系?
父类Throwable
2.1Throwable存在两个子类:
(1)Error:表示的是错误,是JVM发出的错误操作,只能尽量避免,无法用代码处理。
(2)Exception:一般表示所有程序中的错误,所以一般在程序中将进行try…catch的处理。
2.2Throwable中的常用方法有什么:
public void printStackTrace() :打印异常的详细信息。
public String getMessage() :获取发生异常的原因。
public String toString() :获取异常的类型和异常描述信息。
三,异常该怎么分类?
3.1异常(Exception)的分类
(1)编译时期异常(受检异常):checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常)
(2)运行时期异常(非受检异常):runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。(如数学异常)
代码:
package com.java.YiChang;
/*
java.lang.Throwable:类是 Java 语言中所有错误或异常的超类。
Exception:编译期异常,进行编译(写代码)java程序出现的问题
RuntimeException:运行期异常,java程序运行过程中出现的问题
异常就相当于程序得了一个小毛病(感冒,发烧),把异常处理掉,程序可以继续执行(吃点药,继续革命工作)
Error:错误
错误就相当于程序得了一个无法治愈的毛病(非典,艾滋).必须修改源代码,程序才能继续执行
*/
public class Demo01Exception {
/**
* 异常分类
* @param args
*/
public static void main(String[] args){
/* //Exception:编译期异常,进行编译(写代码)java程序出现的问题
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//用来格式化日期
Date date = null;
try {
date = sdf.parse("1999 - 12 - 09");//把字符串格式的日期,解析为Date格式的日期
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);
*/
//RuntimeException:运行期异常,java程序运行过程中出现的问题
/*int[] arr = {1,2,3};
//System.out.println(arr[0]);
try {
//可能会出现异常的代码
System.out.println(arr[3]);
}catch(Exception e){
//异常的处理逻辑
System.out.println(e);
}*/
/*
Error:错误
OutOfMemoryError: Java heap space
内存溢出的错误,创建的数组太大了,超出了给JVM分配的内存
*/
//int[] arr = new int[1024*1024*1024];
//必须修改代码,创建的数组小一点
//int[] arr = new int[1024*1024];
System.out.println("后续代码");
}
}
3.2思考:为什么会产生异常?
图解:
代码:
package com.java.YiChang;
public class Demo02Exception {
/**
* 异常的产生过程解析(分析异常的怎么产生的,如何处理异常)
* @param args
*/
public static void main(String[] args) {
//创建int类型的数组,并赋值
int[] arr = {
1,2,3};
int e = getElement(arr,3);
System.out.println(e);
}
/*
定义一个方法,获取数组指定索引处的元素
参数:
int[] arr
int index
*/
public static int getElement(int[] arr,int index){
int ele = arr[index];
return ele;
}
}
四,异常的处理
4.1异常处理格式:
try{
// 有可能发生异常的代码段
}catch(异常类型1 对象名1){
// 异常的处理操作
}catch(异常类型2 对象名2){// 异常的处理操作
} …
finally{
// 异常的统一出口
}
4.2处理流程:
(1) 一旦产生异常,则系统会自动产生一个异常类的实例化对象。
(2) 那么,此时如果异常发生在try语句,则会自动找到匹配的catch语句执行,如果没有在try语句中,则会将异 常抛出.
(3)所有的catch根据方法的参数匹配异常类的实例化对象,如果匹配成功,则表示由此catch进行处理。
4.3Java异常处理的五个关键字:try、catch、finally、throw、throws
(1)抛出异常throw
为什么要有抛出异常throw?举个例子?
在编写程序时,我们必须要考虑程序出现问题的情况。比如,在定义方法时,方法需要接受参数。那么,当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不合法,就应该告诉调用者,传递合法的 数据进来。这时需要使用抛出异常的方式来告诉调用者。
作用:可以使用throw关键字在指定的方法中抛出指定的异常
使用格式:
throw new xxxException(“异常产生的原因”);
例子:
throw new NullPointerException(“要访问的arr数组不存在”);
throw new ArrayIndexOutOfBoundsException(“该索引在数组中不存在,已超出范围”);
抛出一个异常具体如何操作呢?
1. 创建一个异常对象。封装一些提示信息(信息可以自己编写)。
2. 需要将这个异常对象告知给调用者。怎么告知呢?怎么将这个异常对象传递到调用者处呢?通过关键字throw 就可以完成。throw异常对象。 throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。
注意:
如果产生了问题,我们就会throw将问题描述类即异常进行抛出,也就是将问题返回给该方法的调用者。那么对于调用者来说,该怎么处理呢?
一种是进行捕获处理
另一种就是继续讲问题声明出去,使用throws 声明处理
代码:
package com.java.YiChang;
/*
throw关键字
作用:
可以使用throw关键字在指定的方法中抛出指定的异常
使用格式:
throw new xxxException("异常产生的原因");
注意:
1.throw关键字必须写在方法的内部
2.throw关键字后边new的对象必须是Exception或者Exception的子类对象
3.throw关键字抛出指定的异常对象,我们就必须处理这个异常对象
throw关键字后边创建的是RuntimeException或者是 RuntimeException的子类对象,我们可以不处理,默认交给JVM处理(打印异常对象,中断程序)
throw关键字后边创建的是编译异常(写代码的时候报错),我们就必须处理这个异常,要么throws,要么try...catch
*/
public class Demo03Throw {
/**
* throw关键字
* @param args
*/
public static void main(String[] args) {
//int[] arr = null;
int[] arr = new int[3];
int e = getElement(arr,3);
System.out.println(e);
}
/*
定义一个方法,获取数组指定索引处的元素
参数:
int[] arr
int index
以后(工作中)我们首先必须对方法传递过来的参数进行合法性校验
如果参数不合法,那么我们就必须使用抛出异常的方式,告知方法的调用者,传递的参数有问题
注意:
NullPointerException是一个运行期异常,我们不用处理,默认交给JVM处理
ArrayIndexOutOfBoundsException是一个运行期异常,我们不用处理,默认交给JVM处理
*/
public static int getElement(int[] arr,int index){
/*
我们可以对传递过来的参数数组,进行合法性校验
如果数组arr的值是null
那么我们就抛出空指针异常,告知方法的调用者"传递的数组的值是null"
*/
if(arr == null){
throw new NullPointerException("传递的数组的值是null");
}
/*
我们可以对传递过来的参数index进行合法性校验
如果index的范围不在数组的索引范围内
那么我们就抛出数组索引越界异常,告知方法的调用者"传递的索引超出了数组的使用范围"
*/
if(index<0 || index>arr.length-1