JAVA中的异常及处理

目录

一、异常的概念

1、异常的概念

2、常见的异常

3、异常的分类

4、异常的抛出

5、异常的捕获

二、自定义异常


一、异常的概念

1、异常的概念

在JAVA中,将程序执行过程中发生的不正常行为称为异常。

若在同一个程序中出现多个异常,则程序只会抛出一个异常!!!

2、常见的异常

1、算术异常

System.out.println(1/0);

//运行结果

Exception in thread "main" java.lang.ArithmeticException: / by zero

2、数组越界异常

int[] array={1,2,3,4,5};
System.out.println(array[10]);

//运行结果

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10

3、空指针异常

int[] arr=null;
System.out.println(arr.length);

//运行结果

Exception in thread "main" java.lang.NullPointerException

3、异常的分类

1、编译时异常

在程序编译期间发生的异常,称为编译时异常,也称为受查异常。

2、运行时异常

 在程序执行期间发生的异常,称为运行时异常,也成为非受查异常。

RuntimeException及其子类对应的异常都称为运行时异常。

注:编译时出现的语法错误不能称之为异常。

4、异常的抛出

抛出异常的语法为:

throw new *********Exception("异常产生的原因")

下面为登录时异常的抛出,分别抛出用户名错误和密码错误:

 public static void loginInfo(String Username,String Password)throws UserNameException,WordPassException{
        if(!Username.equals(username)){
            throw new UserNameException("用户名错误!");
        }
        if(!Password.equals(password)){
            throw new WordPassException("密码错误!");
        }
        System.out.println("登录成功!!!");
    }

5、异常的捕获

1、try-catch捕获

语法格式:

try{

//可能出现异常的代码

}catch(要捕获异常的类型 e){

}

登录捕获异常方法1:

  try {
            loginInfo(name, word);//可能出现异常的代码
        } catch (UserNameException e) {
            e.printStackTrace();//对异常的处理
        } catch (WordPassException e) {
            e.printStackTrace();
        }

 2、throws

语法格式:

修饰符 返回值类型 方法名类型(参数列表) throws 异常类型1,异常类型2{

}

登录异常捕获方法2:

 public static void main(String[] args) throws UserNameException, WordPassException {

        System.out.println("请输入账号和密码:");
        Scanner scan = new Scanner(System.in);
        String name = scan.next();
        String word = scan.next();
        loginInfo(name,word);

    }

二、自定义异常

以登录程序为例:

1、自定义异常类,继承于Excetion,并且实现一个带有String类型参数的构造方法:

class UserNameException extends Exception{
    public UserNameException(String message){
        super(message);
    }
}

class WordPassException extends Exception{
    public WordPassException(String message){
        super(message);
    }
}

2、所以Login程序的代码为:

import java.util.*;

//自定义异常类
class UserNameException extends Exception{
    public UserNameException(String message){
        super(message);
    }
}

class WordPassException extends Exception{
    public WordPassException(String message){
        super(message);
    }
}

public class Login{

    public static String username="admin";
    public  static String password="123456";

    public static void loginInfo(String Username,String Password)throws UserNameException,WordPassException{
        if(!Username.equals(username)){
            throw new UserNameException("用户名错误!");
        }
        if(!Password.equals(password)){
            throw new WordPassException("密码错误!");
        }
        System.out.println("登录成功!!!");
    }
    public static void main(String[] args){
        System.out.println("请输入账号和密码:");
        Scanner scan=new Scanner(System.in);
        String name=scan.next();
        String word=scan.next();

        try {
            loginInfo(name,word);
        } catch (UserNameException e) {
            e.printStackTrace();
        } catch (WordPassException e) {
            e.printStackTrace();
        }
    }
}

注:

1、自定义异常通常继承于Exception或RuntimeException

2、继承于Exception的异常默认为受查异常

3、继承于RuntimeException的异常默认为非受查异常。

你可能感兴趣的:(java)