# 大数据学习笔记第9天 - 异常、IDE #
## 01 回顾 作业
...
## 02 异常分类 异常捕获
异常体系
常见异常
异常的处理
自定义异常类及使用
常见的异常:被0除,空指针,索引越界等;
异常的体系:
Throwable
Error
通常出现重大问题,如虚拟机崩溃或者内存溢出等;
这些异常不用处理,也处理不了
Exception
在运行时出现的异常情况,可以通过try catch finally处理
Exception和Error的子类名都是以父类名作为后缀
图exception01.jpg
图exception02.jpg
图exception03.jpg
图exception04.jpg
图exception05.jpg
图exception06.jpg
图exception07.jpg
图exception08.jpg
演示实例:当除数为0时,java.lang.ArithmeticException: / by zero
*E:\01\01 Java\day09\code\ExceptionDemo01.java*
[code]
public class ExceptionDemo01{
public static void main(String[] args){
int i = 2 / 0; //编译时不报错,运行时异常
}
}
[/code]
图2018-08-28_224801.png
演示实例:捕获异常
图2018-08-28_230630.png
*E:\01\01 Java\day09\code\TryDemo.java*
[code]
/*
try...catch捕获异常
*/
public class TryDemo{
public static void main(String[] args){
try{
int num = 1/0;
}catch(ArithmeticException e){
System.out.println("发生了算术异常");
}catch(NullPointerException e){
System.out.println("发生了空指针异常");
}finally{
System.out.println("一定会被执行后的代码");
}
System.out.println("异常处理之后的代码");
}
}
[/code]
如果程序没有捕获到异常,将不会往下执行,如下所示:
[code]
/*
try...catch捕获异常
*/
public class TryDemo{
public static void main(String[] args){
try{
//超出索引范围的异常
int[] arr={1,2,3};
int i=arr[3];
}catch(ArithmeticException e){
System.out.println("发生了算术异常");
}catch(NullPointerException e){
System.out.println("发生了空指针异常");
}
//java.lang.ArrayIndexOutOfBoundsException
/*
catch(Exception e){
System.out.println("发生了未知异常");
}
*/
finally{
System.out.println("一定会被执行后的代码");
}
System.out.println("异常处理之后的代码");
}
}
[/code]
图2018-08-28_231342.png
## 03 finally执行流程面试题
catch块中常见的处理方法:
- 由于捕获的异常都是Throwable类的子类对象,所以完全可以调用Throwable中定义的方法。
- getMessage() 获取异常信息,返回字符串。
- toString() 获取异常类名和异常信息,返回字符串。
- printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void。
- printStackTrace(PrintStream s) 通常用该方法将异常内容保存在日志文件中。
图2018-08-28_235800.png
实例:
*E:\01\01 Java\day09\code\TryDemo2.java*
[code]
public class TryDemo2{
public static void main(String[] args){
try{
int[] arr={1,2,3};
int i=arr[3];
}catch(Exception e){
String message = e.getMessage();
System.out.println(message);
System.out.println();
e.printStackTrace();
System.out.println();
String message2 = e.toString();
//java.lang.ArrayIndexOutOfBoundsException: 3
System.out.println(message2);
}finally{
System.out.println("一定会被执行后的代码");
}
System.out.println("异常处理之后的代码");
}
}
[/code]
图2018-08-29_002005.png
面试题:finally的执行流程
*E:\01\01 Java\day09\code\FinallyTest.java*
[code]
public class FinallyTest{
public static void main(String[] args){
int num = test();
System.out.println("test()方法的返回值是:" + num);
}
public static int test(){
try{
System.out.println("进入了test()方法");
int i=1/0;
return 1;
}catch(Exception e){
System.out.println("该程序发生了异常");
return 2; //暂时挂起,等执行完finally再执行
}finally{
System.out.println("finally里的语句");
return 3; //一般不会再finally中定义return,提前终止程序
}
}
}
[/code]
图2018-08-29_001407.png
## 04 throws throw关键字区别
## 05 自定义异常类及使用
## 06 自定义异常类练习
## 07 方法重写时异常处理的细节
## 08 包简介 定义格式
## 09 访问权限演示
## 10 修饰符总结
## 11 jar包的制作和使用
## 12 eclipse基本操作
## 13 子类实现抽象类 接口的快速方法
## 14 使用第三方jar包
## 15 项目的导入