一、异常
-
Throwable 所有的异常的父类或者是间接父类,必须是Throwable子类或者是自身的异常才需要进行处理(语言中所有错误或异常的父类)
-
Error 表示非常严重的异常一般都是由JVM抛出的(错误)异常,这种异常不需要进行处理,避免这种异常的发生
-
Exception 表示不是非常严重的异常,不许进行处理
-
RuntimeException 表示是运行时的异常
-
异常的分类
**编译时异常:**在编时期,发生的异常,就是编译时的异常
**运行时异常:**在程序运行期间,发生的异常,就是运行时的异常 -
jvm处理异常
A.在执行代码的时候,发生异常
B.将异常信息封装Throwable类中
C.如果自身不处理,会返回给调用者,一层一层往上进行抛出
D.如果对异常不处理,则由jvm来进行处理
E.打印堆栈信息(异常信息)终止程序 -
语法:
try{
} catch{
}finally{
//不管怎样都会执行finally方法,除非exit(0)等强制停止程序(杀死JVM虚拟机)运行
//(return不行)遇到会先执行finally,再执行return语句
**作用:**关闭IO流执行
};try{ //每个catch如果符合的都会一 一执行
}catch{
}catch{};try{
}finally{};//两者互不影响 -
执行的流程
第一种情况:没有发生异常,执行try中的代码
第二种情况: A.如果发生与声明的异常不匹配,则由jvm类处理 B.如果匹配,则执行 catch的代码
匹配:发生的异常是声明异常本身或者是异常的父类都是可以匹配的 -
说明:
A.在jdk1.7之后,如果声明多个异常, 可以使用 | 将多个异常进行连接,exception异常不用连接多个连接,因为就是父类
B.声明的异常范围越小越好,便于开发人员解决问题
二、解决异常的三种throw、throws、try catch
- 第一种:throw 写在方法中,如果是(如:RuntimeException)运行时异常可以不用声明(throws)异常,直接抛出
package qf22020226;
public class Demo02 {
public static void main(String[] args){
double divide = divide(10.0, 5.0);
System.out.println(divide);
}
public static double divide(double a,double b){
if(b<0){
throw new ArithmeticException("分母不能为空");
}
return a/b;
}
}
- 第二种:throws 声明方法上,用来声明,给调用者进行处理
package qf22020226;
public class Demo02 {
public static void main(String[] args){
double divide = divide(10.0, 5.0);
System.out.println(divide);
}
public static double divide(double a,double b)throws ArithmeticException{
return a/b;
}
}
- 第三种:使用try catch 处理过程中处理异常
package qf22020226;
public class Demo02 {
public static void main(String[] args) {
double a = 10.0;
double b = 5.0;
double sum = 0;
try {
sum = a/b;
} catch (Exception e) {
System.out.println("分母不能为空");
}
System.out.println(sum);
}
}
- throw 与 throws 的比较:
三、自定义异常类
- 重写父类方法(目的传异常信息给父类)声明的异常的范围必须是父类声明异常的子类以及其本身 ,异常声明的范围不能大于父类的范围
- 步骤: A.定义一个类来继承 Throwable 或者是其子类,调用父类的有参构造 传递异常信息
- 代码图解:
package qf22020226;
public class Demo02 {
public static void main(String[] args) throws MyException {
//方法1
double divide = divide(10.0, 0);
System.out.println(divide);
//方法2
try {
System.out.println(divide(50.0,0));
}catch (MyException myException){
myException.printStackTrace();
}
}
public static double divide(double a, double b) throws MyException {
if(b < 0){
throw new MyException("分母不能为零");
}
return a/b;
}
}
class MyException extends Exception{
public MyException(String message) {
super(message);
}
}
四、集合
-
用于存储数据的容器
-
集合与数组之间的比较
A. 集合只能存引用数据类型 数组既可以基本数据类型,也可以存引用数据类型
B.集合的长度是不固定的,数组的长度是固定的
C.集合分类:单列集合:集合中的每一个元素都是独立的单元
双列集合:集合找那个的元素都是以组为单位,以键值对的方式进行存储