package com.example.demo;
import org.junit.Test;
/**
* @Description Java异常处理机制
* @Auther gf.x
* @Date 2020/4/6 13:51
*/
public class ExceptionTest {
//1、异常的分类
public static void main(String[] args) {
/**
* 那为什么会有这两种异常的分类(为什么UncheckedException异常不需要手动处理,而CheckedException异常需要手动处理):
* 因为UncheckedException这种异常经常发生比较频繁,JRE会自动对这种异常做处理(自动new出相应的异常对象,自动进行捕获)
*/
//这种就是 UncheckedException(没有检查) 异常:没有被编译器检查过
int i = 10/0; //编译阶段不用手动处理,但是运行时会出现异常(所以这种异常也成为运行时异常)
try {
//这种就是 CheckedException(检查过的) 异常:被编译器检查过
Thread.sleep(3000); //编译阶段就要手动处理的异常
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//2、NullPointerException空指针异常
@Test
public void test() {
/**
* java.lang.NullPointerException:空指针异常
* 大部分情况下发生的空指针异常都是下面原因造成的:对象是null,调用了对象的方法或属性
*
* 如果一个地方发生了空指针异常;
* 1. 那就看这个地方都有哪些对象
* 2. 这些对象是否为null
* 3. 若无法避免对象为null,那就添加判断防止空指针异常的发生
*/
Computer computer = null;
if (computer != null) {
computer.start(); //对象是null,调用了对象的方法或属性
}
}
class Computer {
void start() {
System.out.println("电脑启动了!");
}
}
//3、ArithmeticException运算异常
@Test
public void test1() {
int b = 0;
if (b != 0) {
int i = 10/b;
} else {
System.out.println("不能用0做除数!");
}
}
//4、ClassCastException类型转换异常
public void test2(Object obj) {
if (obj instanceof Computer) {
Computer computer = (Computer) obj;
}
}
//5、NumberFormatException数字转换异常
@Test
public void test3() {
String s = "1234badl"; //如果 s = "1234" 就不会出现异常
//java.lang.NumberFormatException: For input string: "1234badl"
Integer i = new Integer(s); //For input string: "1234badl" 是异常的描述
}
//6、ArrayIndexOutOfBoundsException数组索引越界异常
//一般处理异常都是先做一些判断
}