异常的概念
- 异常是程序在运行期间发生的不正常的事件,它会中断指令的正常执行流程
- 设计良好的程序应该在异常发生时,提供处理这些不正常事件的方法,使程序不会因为异常的发生而中断或产生不可预见的结果。
- Java语言使用异常处理机制,为程序提供异常处理的能力
异常分类
Throwable 1.Error(错误)
2.Excepion【1.受检异常 2.非受检异常】
异常的分类
*从继承角度
错误(Error):JVM系统内部错误或资源耗尽等严重情况,属于JVM需要负担的责任
*这一类异常事件无法恢复或不可捕获,将导致应用程序中断,程序员对其不做处理
异常:因编程错误、不严谨或偶然的外在因素导致的问题
所有异常的父类,其子类对应了各种各样可能出现的异常事件
程序员通常可以处理,可以显示地声明或捕获
这类异常如果处理合理,程序有机会恢复至正常云行状态
从处理的必要性角度:
非受检(unchecked)异常:编译器不要求必须处理的异常,也叫运行时异常。
1.指程序的逻辑错误,是程序员应该避免的,会在程序运行过程中触发:
2.错误的类型转换:java.lang.ClassCastException
3.数组下标越界:java.lang.ArrayIndexOutOfBoundsException
4.空指针访问:java.lang.NullPointerException
5.算术异常(除0溢出):java.lang.ArithmeticException
受检(checked)异常:编译器要求必须处理的异常(2种方式)。
1.没有找到指定名称的类:java.lang.ClassNotFoundException
2.访问不存在的文件:java.io.FileNotFoundException
3.操作文件时发生的异常:java.io.IOException
4.操作数据库时发生的异常:java.sql.SQLException
异常处理机制
1. Java提供了处理异常的关键字:try,catch,finally,throw,throws
2. 程序在执行过程中,如果出现异常,会自动生成一个异常类对象,该异常对象将被自动 提交给JVM,这个过程称为抛出(throw)异常。
3. 当JVM接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常和处理异常。
4. 如果JVM找不到可以捕获异常的代码,则运行时系统将终止,相应的Java程序也将退出。
**处理异常的2种方式**
自身捕获处理(try....catch)
当发生异常时,由自身方法捕获,并提供处理代码
声明抛出(throws ,throw)
当某段程序有可能发生异常时,则在声明中抛出异常,如果运行发生异常,则自动抛给调用者处理,如果调用者仍然没有处理,则一直往上抛出。
public static void method3(){
String str = null;
int[] array ={};
try{
int a = 10/0;
array[1] = 10;
int length = str.length();
}catch(NullPointerException e){
System.out.println("空指针异常");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("数组索引越界");
}catch(Exception e){
System.out.println("遇到一场了");
}finally{
System.out.println("finally......");
}
System.out.println("方法结束了");
}
___________________________________________________________________
public static void method4(){
try{
FileInputStream input = new FileInputStream("D:/b.txt");
}catch(FileNotFoundExpection e){
//e.printStackTrace();
//获取异常信息
System.out.println(e.getMessage());
//获取异常原因
System.out.println(e.getCause);
}
}
//throws关键字
public static void method5()throws FileNotFoundException{
FileInputStream input = new FileInputStream("D:/aaa");
}
throw关键字
//创建异常类
public class UserException extends Exception{
public UserException(String message){
super(message);
}
}
//判断是否异常
public class Login{
public void login(String name,String pwd) throw UserException{
if(name.equals("admin")&&pwd.equals("123456")){
System.out.println("登录成功");
}else{
UserExpection userExceptin = new UserException("用户名或者密码不对");
throw userExpection;
}
}
}
//创建main函数判断密码和用户名是否正确
public class Demo{
public static void main(String[] args){
Login login = new Login();
try{
login.login("admin","123456");
}catch(UserExption e){
System.out.println(e.getMessage());
}
}
}