异常

异常

什么是异常

异常:是指在程序运行过程中所发生的不正常的事件,它会中断正在运行的程序。

在处理异常时用if-else处理的话代码会非常臃肿,程序员还会花费大量精力去堵漏洞,考虑还可能有漏洞,所以java提供了异常处理机制。

Java中如何进行异常处理

java的异常处理是通过5个关键字实现的:try、catch、finally、throw、throws

捕获异常:
try:执行可能产生异常的代码。
catch:捕获异常
finally:无论是否发生异常,代码总能执行

声明异常:
throws:声明方法可能要抛出的各种异常

抛出异常:
Throw new Exception(“自定义抛出异常!”)//手动抛出异常

使用try-catch块捕获异常,分为三种情况

第一种:正常

不产生异常,try块执行完,catch不执行
代码形式:

public void method(){
try{
 //代码段(此处不会产生异常)
   }catch(异常类型 ex){
     //对异常进行处理的代码段
   }
  //代码段
 }

图形显示运行过程:

异常

第二种情况:出现异常

try块中产生异常代码段2后的代码段3不执行,如果匹配到异常类型,执行代码块4
代码形式:

public void method(){
try{
   //代码段1
   //代码段2
   //代码段3 
    }catch(异常类型 ex){
      //对异常进行处理的代码段4
   }
  //代码段5
 }

图形显示运行过程:
异常

第三种:异常类不匹配

不执行代码块3、代码段5,可以匹配异常的父类代码形式
代码形式:

public void method(){
try{
   //代码段1
   //代码段2
   //代码段3 
    }catch(异常类型 ex){
      //对异常进行处理的代码段4
   }
  //代码段5
 }

图形显示运行过程:
异常
注:

  1. printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程
    异常

  2. 在catch块中处理异常
    如:加入用户自定义处理信息
    System.err.println("出现错误:被除数和除数必须是整数, “ +“除数不能为零。”);

  3. 调用方法输出异常信息
    e.printStackTrace();

  4. 异常对象常用的方法
    异常

常见的异常类型

异常

使用try-catch-finally

在try-catch块后加入finally块是否发生异常都执行
不执行的唯一情况:有强制异常退出System.exit(1);
异常

存在return的try-catch-finally块

代码形式:

public void method(){
try {
     // 代码段 1
     // 产生异常的代码段 2
} catch (异常类型 ex) {
     // 对异常进行处理的代码段3
     return;
}finally{
      // 代码段 4
}
}

图形显示运行过程:
异常

return退出和system.exit(0)强制退出的区别

/*
 * 创建一个人类
 */
public class Person {
   //属性
	String  name;
	int age;
	public Person(String name,int age ){
		this.age=age;
		this.name=name;
	}
	//方法1方法show介绍信息
	public void show(){
		System.out.println("姓名:"+this.name+",年龄:"+this.age);
	}
     //使用return结束
	public void printReturn(){
		if (true) {
			System.out.println("结束当前方法,不影响其他方法执行");
			return;   //结束当前方法,不影响其他方法执行
		}
	}
    //使用System.exit(0)强行退出
	public void printExit(){ 
		System.out.println("结束整个类");
		System.exit(0);//结束整个类
	}
}

//人类的测试类
public class DomePersonTest {
	public static void main(String[] args) {
		//创建对象
		Person per=new Person("小方", 18);
		//对比return和system.exit(0)退出的区别
		per.printReturn();
		per.show();
		
		per.printExit();
		per.show();
	}
}

结果为:
异常
结果显示在用return退出后还是能执行show方法,所以return退出的是return的方法;
而用System.exit(1)退出后没有执行show的方法,所以在使用System.exit(1)退出的是整个类,这个类中的其他方法都不能在使用了。