Java中的异常机制简单处理

异常机制

异常:异常指的是在程序运行过程中发生的异常事件,通常是由外部问题(如硬件错误、输入错误)所导致的。在Java等面向对象的编程语言中异常属于对象。

早期的C语言的异常处理机制,通常是我们人为的对返回结果加一些标志来进行判定,比如发生错误返回什么标志,正常情况下我们又是返回什么标记,而这些都不是语言本身所赋予我们的,这种机制的问题在于,C语言的异常处理机制全是我们人为的定义,这样就会造成业务逻辑的主线受到异常处理的牵制,或者说是我们难免会将注意力转移,并且造成业务逻辑与异常处理之间有很大程度上的缠绕。

当然,再程序中异常还是和错误有区别的

  1. 异常(Exception)都是运行时的。编译时产生的不是异常,而是错误(Error)
  2. 最开始大家都将程序设计导致的错误(Error)认定文不属于异常(Exception)
  3. 但是一般都将Error作为异常的一种,所以异常一般分两类,Error与Except

Java中的异常

在这里插入图片描述
定义

异常都是从类Throwable类派生出来的,而Throwable类是直接从Object类继承而来,可见Java对异常处理的重视程度。
Exception 异常
Error:系统内部错误,这类错误由系统进行处理,程序本身无需捕获处理;
RuntimeException:可以捕获,也可以不捕获的异常。

try { }catch(处理异常)语句块 捕捉异常

	try {
		可能产生异常的代码  
		}catch(Typel id1){
          处理Typel异常的代码
        }catch(Typel id2){ 
          处理Typel异常的代码
        }catch(Typel id3) {
          处理Typel异常的代码	
        }     

在程序中的异常处理

具体用程序代码来实现:捕捉异常
数组下标越界,用异常机制来捕捉并处理

public class ArrayIndex {
	
	public static void f() {
		int[] a = new int[10];
		a[10] = 10;
		System.out.println("hello");
	}
	public static void main(String[] args) {
		int[] a = new int[10];
		int idx;
		Scanner in = new Scanner(System.in);
		idx = in.nextInt();
		//捕捉异常
	try {
			a[idx] = 10;
			System.out.println("hello");
	}catch(ArrayIndexOutOfBoundsException e) 
	{
		System.out.println("Caught");
	}

}
}

如果再程序调用中,则作少许改变

import java.util.Scanner;

public class ArrayIndex {
	
	public static void f() {
		int[] a = new int[10];
		a[10] = 10;
		System.out.println("hello");
	}
	public static void g() {
		f();
	}
	public static void h() {
		int i=10;
		if(i<100) {
			g();
		}
	}
	public static void k() {
		try {
			h();
		}catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("k()");
			throw e;
		}
	}
	public static void main(String[] args) {
		try {
			k();
		}catch(ArrayIndexOutOfBoundsException e) { 
			System.out.println("caught");
			System.out.println(e.getMessage());//获得异常的主要对象信息
			System.out.println(e);
			e.printStackTrace();               //获得异常中间的路径
		}
		System.out.println("main");

}
}

分析

拿到异常对象后:

  • String getMessage();
  • String toString();
  • void printStackTrace();

但是肯定是回不去了,而具体的处理逻辑规则取决于你的业务逻辑
于是,再度抛出

	catch(Exception e){
		System.out.println("An exception was thrown");
		throw e;
	} 

如果在这个层面上需要处理,但是不能做最终决定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值