java 异常 以及自定义异常示例
异常
1.异常的背景
常见的异常
例如
分母为0
System.out.println(10/0);
//执行结果
Excecption in thread"main" java.lang.ArithmeticException:/by zero
数组下标越界
int []a={1,2,3};
System.out.println(a[100]);
//执行结果
Exception in thread "main" java.lang.NullpointerException
异常是在运行时出现错误时通知调用者的一种机制,如果在编码过程中出现的编译错误,编译器会在代码编写的过程中就进行警告,这两种情况试有所区别的。
“运行时“程序已经经过了编译得到了class文件,再由JVM执行过程中出现的错误
防御式的编程
LBYL:Look Before You Leap.“未雨绸缪”在操作之前就将自己预想可能会发生的情况作出充分的检查
EAFP:It is Easier to Ask Forigiveness than Permission."事后获取原谅比事前更容易。先进行操作,如果出现问题,再进行处理
2.异常的基本用法
捕获异常的基本语法
try{
有可能出现异常的语句;
}[catch (异常类型 异常对象)]{
}...]
[finally{
异常的出口
}]
try 代码块中放的是可能出现异常的代码
catch 代码块中放的是出现异常后的处理行为
fina 代码块中的代码用于处理善后工作,会在最后执行
其中catch和finally都可以根据情况选择加或者不加
3.异常处理的流程
程序先执行try中的代码
如果try中的代码出现异常,就会结束try中的代码,看和catch中的异常类型是否匹配
如果找到匹配的异常类型,就会执行catch中的代码
如果没有找到匹配的异常类型,就会将异常向上传递到上层调用者
无论是否找到匹配的异常类型,finally中的代码都会被执行到(在该方法结束之前执行)
如果上层调用者没有处理的异常,就继续向上传递
一直到main方法也没有合适的代码处理异常,就会交给JVM来进行处理,此时程序就会异常终止
4.抛出异常
有时,我们也可以根据编码需要,手动的抛出某个异常,使用throw关键字完成这个操作
public static void main(String[] aegs)
{
System.out.println(divide(10,0));
}
public static int divide(int x,int y)
{
if(y==0){
throw new ArithmeticException("抛出0异常");
}
return x/y;
}
5.java异常的体系
其中Error指的是java运行时内部错误的资源耗尽错误,应用程序不会抛出此类异常,这种内部错误一旦出现,除了告知用户并使程序终止之外,没有其他的处理办法
Exceotion是程序员所使用的异常类的父类
6.自定义异常类
import java.util.Scanner;
class UserError extends Exception{
public UserError(String message){
super(message);
}
}
class PasswordError extends Exception{
public PasswordError(String message)
{
super(message);
}
}
public class Test{
private static String username="admin";
private static String password="123456";
public void login(String userName,String passWord)throws UserError,PasswordError{
if(!Test.username.equals(userName))
{
throw new UserError("用户名错误");
}
if(!Test.password.equals(passWord))
{
throw new PasswordError("密码错误");
}
System.out.println("登录成功!");
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
while (sc.hasNextLine())
{
String name=sc.nextLine();
String num=sc.nextLine();
try
{
Test test1=new Test();
test1.login(name,num);
}catch(UserError userError){
userError.printStackTrace();
}
catch(PasswordError passwordError)
{
passwordError.printStackTrace();
}
}
}
}
本示例为一个简易的登录系统,着重体现了自定义异常这一内容,自定义了两种异常,分别为 用户名不匹配和密码不匹配异常。
使用try catch 语句,提前预想了可能会出现异常的情况,在关键的login函数中,传入用户名和密码的参数,在try之后的语句中与提前定义好的参数进行比较,根据情况判断决定是否执行catch中的语句,最终实现自己自定义抛出异常这一功能
本文地址:https://blog.csdn.net/qq_45742383/article/details/114266329
上一篇: 基于SpringBoot框架下的搭建流程
下一篇: 《Redis学习笔记(二)》