java基础--异常

       异常处理是一门语言是否成熟的标准之一,它提高代码的容错性,使得更加健壮。java处理异常主要通过try,catch,finally,throw,throws五个关键字组成。


     异常处理的原则:先捕获小异常,再捕获大异常。

   


     (1)普通异常处理异常的基本格式如下:

public class DivTest{
	public static void main(String[] args){

		try{
			int a=Integer.parseInt(args[0]);
			int b=Integer.parseInt(args[1]);
			int c=a/b;
		}
		catch(IndexOutOfBoundsException ie){
			System.out.println("数组越界");
		}
		catch(NumberFormatException ne){
			System.out.println("数据格式异常")
		}
		catch(ArithmeticException ae){
			System.out.println("算数异常,例如:0作为除数了");
		}
		//java7 提供的捕获多个异常,异常变量默认使用final修饰;
		catch(IndexOutOfBoundsException|NumberFormatException|ArithmeticException ){
			System.out.println("常见数字异常");
		}
		/*获取捕获异常的相关信息:
		1.getMessage():返回异常详细描述字符串
		2.printStackTrace():异常的跟踪栈信息输出到标准错误输出
		3.printStackTrace(PrintStream s):将异常跟踪信息输出到指定输出流
		4.getStackTrace():犯规异常跟踪栈信息
		*/
		catch(IOException ioe){
			System.out.println(ioe.getMessage());
			ioe.printStackTrace();
		}
		finally{
			//资源回收块
			//通常不要在此使用return和throw导致方法终止的语句,这样将导致try,catch中的return,throw语句失效
		}
		
	}
}


     (2)在方法定义时可以通过throws来抛出异常,它适用于当前方法不知道该如何处理该异常,应该由上一级调用处理;main方法也可以抛出异常,抛出的异常交给JVM处理,处理的思路:打印跟踪信息,终止程序运行。但是它存在的限制是子类抛出的异常必须比父类要少和小。


     (3)Throw抛出异常。该异常适用于代码业务的异常,不能由系统检出,而是由程序员自己判断的异常。eg:

public class ThrowTest{
	public static void main(String[] args){
		try{
			throwChecked(-3);
		}
		catch(exception e){
			System.out.println(e.getMessage());
		}
		throRuntime(3);
	}
	public static void ThrowChecked(int a)throws Exception{
		if(a>0){
			throw new Exception("a的值大于0,不符合要求");
		}
	}
	public static void throwRuntime(int a){
		if(a>0){
			throw new RuntimeException("a的值大于0,不符合要求");
		}
	}
	
}

    (4)一般异常的处理流程--异常链(职责链模式)


     思路:程序不应该把底层的sql异常传给用户,这样暴露底层sql代码,造成不安全因素。


     正确的做法(异常转译):程序先捕获原始异常,抛出一个业务异常,新的业务异常中包含对用户的提示。

public calSal() throws SalException{
	try{
		//实现结算工资的业务
		...
	}
	catch(SQLException sqle){
		//将原始异常记录下来,留给管理员
		...
		//下面异常message对客户的提示
		throw new SqlException("访问底层数据库出现异常");
		
		//捕获原始异常
		throw new SalException(sqle);
	}
	catch(exception e)
	{
		//将原始异常记录下来,留给管理员
		...
		//下面异常message对客户的提示
		throw new SqlException("系统出现未知错误");
		
		//捕获原始异常
		throw new SalException(e);
	}
}

//自定义异常类
public class SalException extends Exception
{
	public SalException(){}
	public SqlException(String msg){
		super(msg);
	}
	public SalException(Throwable t){
		super(t);
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值