目录
一、异常的概念
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的异常默认为非受查异常。