public class Application {
public static void main(String[] args) {
/*
* Java 中程序执行过程中产生的错误分为两种:error 和exception
* error 是外部环境导致的错误,例如: JVM 内存不足,硬盘炸了等等...
* 这个级别的错误不需要程序进行处理
* exception 是代码产生的错误,例如:空指针,索引越界...
* 这个级别的错误需要我们处理
*/
// Exception 异常
// 当我们程序产生问题的时候,系统会抛出exception,高速我们错误的原因
//需要我们捕获处理,如果不捕获处理,程序将直接被杀死
//通过try-catch-finally 处理异常 跳过
try{
//可能产生一次行的代码写在try 中
//一旦某行代码产生异常,就立刻跳转到catch进行处理
//try 中的后续代码不再执行
int a = 10 / 0;//错误的逻辑 不处理异常的话,程序会在这里结束
// / by zero 处理了一场,程序继续向下执行
String b = null;
int c = b.length();
}catch (ArithmeticException e) {//处理除以0的异常
//处理异常的代码 写在 catch中
//如果try中的代码没有产生异常,这里的代码不会执行
//如果try中的代码会产生多个异常,就需要多个catch分别处理,一个catch处理一个异常
}catch (NullPointerException e) {//处理空指针异常
}
finally {
//这里的代码 无论是否产生异常都会执行
//应用场景不多
}
System.out.println("测试");
//exception 分为:受检异常和非受检异常
//受检异常:Exception 是代码中必须处理的异常,如果不处理,编译就会出错,不能通过
// 使用 try - catch进行处理
//非受检异常:RuntimeException 是代码可选处理异常,不处理也可以编译,
// 但是一旦出现问题,程序就会被杀死。例如:空指针,索引越界
// 可以通过合理的代码逻辑避免产生问题
// 在编程中,我们可以通过自定义异常告诉用户某个操作失败的原因
// 例如:通过自定义异常告诉用户登录失败的原因
// 自定义受检异常:自定义类继承 Exception类,生成五个构造方法 即可
// 自定义非受检异常:自定义类继承 RuntimeException 类 ,生成五个构造方法 即可
//1、创建AccountNotExistsException 和PassswrodErrorException两个自定义异常类
//2、修改 UserService 中 login方法 增加throw
//3、修改 UserServiceImpl 中 login 方法 抛出异常
//4、修改 UserController 中 调用 login的代码处理异常
}
}
异常练习 与 Map练习 一起写在下一个博客
详见:
Java 小练习—用户注册登录