欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java 异常 以及自定义异常示例

程序员文章站 2022-07-08 15:39:01
异常1.异常的背景常见的异常例如分母为0System.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异常是在...

异常

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异常的体系
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中的语句,最终实现自己自定义抛出异常这一功能java 异常 以及自定义异常示例

本文地址:https://blog.csdn.net/qq_45742383/article/details/114266329

相关标签: java 编程语言