java学习--基础知识进阶第八天--笔记

今日内容
异常
递归

异常
什么是异常?
不正常,Java程序在编译或运行时出现的错误

异常的体系
Throwable
  |-Error:严重的错误,一般程序不能处理的问题,比如:服务器宕机、数据库崩溃、内存溢出
  |-Exception:非严重的错误
    |-编译时异常:在Exception类下除了RuntimeException类及其子类之外,在编译时期就出现的异常,在编译时期必须处理,否则编译出错
    |-运行时异常:包括RuntimeException类及其子类,在运行时期才会出现的异常,在编译时期不会出现,在编译时期可以处理也可以不处理,
        编译时期不处理不会报错

运行时异常:
  NullPointerException、ArrrayIndexOutOfBoundsException
  ArithmeticException、ConCurrentModificationException


JVM的异常处理方式
(1)将异常信息打印在控制台
(2)终止程序的运行

异常处理方式
方式一:捕获处理 try...catch...
try{

}catch(异常类型 变量名){

}catch(异常类型 变量名){

}
...


try{

} catch(异常类型 变量名){

} finally {

}

try{

} finally{

}


try: 用于存放有可能出现异常的代码
catch: 用于捕获和处理
finally: 最终的意思,用于释放资源,一定会执行的代码

方式二:抛出 throws
使用在方法声明上,可以抛出异常类名,而且可以抛出多个,多个之间用逗号隔开
throws抛出之后,异常交给调用者来处理

throw和throws的区别?
(1)使用的位置不同
throw使用在方法中
throws使用在方法的声明上
(2)抛出的内容不一样
throw抛出的是异常对象或者异常对象名,只能抛出一个
throws抛出的是异常类名,可以抛出多个
(3)作用不一样
throw用于制造一个异常,它不是异常处理的方式
throws用于处理异常,是异常处理的方式之一

处理多个异常
(1)使用多个try...catch...,一个处理一个异常
(2)使用一个try多个catch
try{

}catch(异常类型 变量名){

}catch(异常类型 变量名){

}
...

(3)JDK1.7的新特性 使用|
try {
// String s = null;
// System.out.println(s.length());

// int[] arr = new int[5];
// System.out.println(arr[8]);

System.out.println(2 / 0);
}
catch(ArrayIndexOutOfBoundsException | NullPointerException e) {
System.out.println("出错了");
}

注意:小括号写多个异常用|隔开,这多个异常直接只能是平级的异常,不能有子父类关系

Throwable类
常用方法
String getMessage():获取异常出现的原因
String toString():异常的类名和出现的原因
printStackTrace():异常的类名、出现的原因及其位置

自定义异常
为什么要自定义异常?
为了做到见名知义

如何自定义异常
自定义一个类继承RuntimeException或者Exception
自定义运行时异常,继承RuntimeException
自定义编译时异常,继承Exception

继承完之后,只要根据父类的构造方法生成几个自定义异常类的构造即可

自定义异常的使用
使用上和Java给我们提供的异常没有什么区别
如果使用自定义编译时异常,必须在编译时期进行处理(throws或者try...catch)
如果使用自定义运行时异常,在编译时期可以不处理,不处理不会编译报错

递归
什么是递归
方法自身调用自身

递归的注意事项
(1)递归要有出口
(2)方法调用不能过多

posted @ 2018-03-24 16:20  大橙有C  阅读(90)  评论(0编辑  收藏  举报