【Java异常】(简简单单拿捏)
【Java异常】(简简单单拿捏)
- 1. 异常的简单介绍
- 2. 异常的抛出
- 2.1 语法
- 3. 异常的处理
- 3.1 异常声明throws
- 3.2 try-catch捕获并处理
- 4. 例子(try-catch+自定义异常)
1. 异常的简单介绍
程序员在运行代码时会遇到很多异常,比如:数组越界异常,空指针异常。
我们可以将异常分为两个部分:
编译时异常 在程序编译时发生的异常 运行时异常 在程序运行时发生的异常
2. 异常的抛出
2.1 语法
throw new XXXException("异常产生的原因")
注意事项
- throw 必须写下方法体内部
- 抛出的对象必须是Exception或者Exception的子类对象
- 如果抛出的是RunTimeException 或者RunTimeException的子类,则可以不用处理,直接交给JVM处理
- 如果抛出的是编译时异常,用户必须处理,否则无法通过编译
- 异常一旦抛出,后续代码将不会执行
3. 异常的处理
异常的具体处理方式,主要有两种:异常声明throw以及try-catch捕获处理
3.1 异常声明throws
当方法抛出编译时异常,用户不想处理异常,此时就可以将异常借助throw抛出给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者处理异常。
声明的语法:
修饰符 返回值类型 方法名(参数列表)throw 异常类型1,异常类型2…{
}
例题
public class Main {
public static void func(String password) throws Exception{
//判断密码是否正确,不正确则抛出异常
if(!password.equals("llll")){
throw new Exception("密码错误");
}
}
public static void main(String[] args) throws Exception {
//异常的声明
func("lll");
}
}
上述代码运行时抛出异常
3.2 try-catch捕获并处理
throws对异常并没有真正地处理,而是将异常报告给抛出异常方法的调用者,由调用者处理。如果真要对异常处理,就需要try-catch。
try-catch的语法格式
try{
//将可能会出现异常的代码放这里
}catch(要捕获的异常类型 e){
//如果try中代码抛出异常了,并且和catch捕捉的异常类型一致,或者是catch捕捉到的异常是try中抛出异常的基类时,就会被捕捉到
//对异常进行处理,处理完成后跳出try-catch结构,继续进行后续的代码
}catch(要捕获的异常类型 e){
//对异常进行处理
}finally{
//代码一定会被执行
}
4. 例子(try-catch+自定义异常)
这里的例子直接和自定义异常一起讲了呦
首先了解一下自定义异常:
我现在要检查输入的账号和密码是否出现异常,所以我先分别创建AccentException和PasswordException,
然后让上述两个自定义异常继承Exception
代码操作如下所示
public class AccentException extends Exception{
public AccentException() {
super();
}
public AccentException(String message) {
super(message);
}
}
public class PasswordException extends Exception{
public PasswordException() {
super();
}
public PasswordException(String message) {
super(message);
}
}
创建完我们的自定义异常,我们就可以使用try-catch来抛出自定义异常,具体操作如下所示
public class Demo {
public static void people(String account,String password)throws AccentException,PasswordException{
if(!account.equals("111112")){
throw new AccentException("账号异常");
}
if(!password.equals("dddddd")){
throw new PasswordException("密码错误");
}
System.out.println("登录成功");
}
public static void main(String[] args) throws PasswordException, AccentException {
try{
people("11","kk");
}catch(AccentException e){
e.printStackTrace();
}catch (PasswordException e){
e.printStackTrace();
}
}
}
根据分析可知,上述账号和密码都出现了错误,但是结果只抛出账号异常,这里在上面也提到过,
try-catch在使用的过程中一旦抛出一个异常,直接跳出try-catch结构,所以这里只抛出一个异常。
由于Java异常这一部分还挺简单的,所以这篇文章没有太多的图文解释,之后在下一篇顺序表中也有Java异常的使用,如果感兴趣的朋友,大家移至下一篇顺序表呦~