异常的基本概念

异常的基本概念

异常是导致程序中断运行的一种指令流。如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序的正常执行。

为什么要处理异常

一旦异常产生之后,异常之后的语句并不会执行,而是直接结束程序,并将错误报告给用户。

一个简单的异常如以下代码:

public class ExceptionDemo01
{
	public static void main(String args[]){
		int a=3;
		int b=0;
		int c=a/b;   //此处会出现异常 0不能为除数
		System.out.println(c);
		//程序输出
		//Exception in thread "main" java.lang.ArithmeticException: / by zero
        // at ExceptionDemo01.main(ExceptionDemo01.java:6)
	}
}

处理异常

如果要处理异常,则必须遵循以下格式:

try{
	//有肯能出现异常的语句
}catch(异常类 异常对象){
	//编写异常的处理语句
}catch(异常类 异常对象){
	//编写异常的处理语句
}...
finally{
	//不管会不会有异常,肯定会执行的代码
}

经过处理异常后的代码:

public class ExceptionDemo02
{
	public static void main(String args[]){
		int a=3;
		int b=0;
		try{
			int c=a/b;	
		}
		catch(ArithmeticException e){
			System.out.println("出现算数异常!");
		}
		finally{
			System.out.println("肯定会执行的代码段");
		}
	}
}

以上代码通过try{ }catch()finally{}代码块对异常进行了处理。

如果现在程序存在多个异常,从文档中可以发现,所有的异常类都继承自Exception类,它是所有异常类的父类,那么如果现在有多个异常存在,则可以使用Exception

public class ExceptionDemo03
{
	public static void main(String args[]){
		int a=3;
		int b=0;
		int c[]=new int[3];
		try{

			int d=a/b;	//会出现算数的异常
		    c[4]=0;		//会出现数组越界异常
		}
		catch(Exception e){		//使用Exception进行异常捕捉
			e.getStackTrace();
		}
		finally{
			System.out.println("肯定会执行的代码段");
		}
	}
}

异常类的继承结构

在整个java的异常结构中,实际上有以下两个最常用的类:Excption、Error,这两个类都是Thorwable的子类。

Exception:一般表示的是程序出现的问题,可以直接使用try..catch进行处理。

Error:一般指的是JVM错误,程序中无法处理。

一般情况下开发者都比较习惯于将Error和Excption统一称为异常,而之前所处理的异常,都是Exception的子类。

注意:一般在输出异常信息的时候,可以直接使用System.out.println()打印异常对象。

也可以通过Exception提供的一个方法,public void printStackTrace();

Java的异常处理机制

在整个java的异常处理中,实际上也是按照面向对象的方式进行处理,步骤如下:

1、  一旦异常产生,则首先会产生一个异常的实例化对象;

2、  在try语句中对此异常对象进行捕捉;

3、  产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码。

异常的其它概念

throws关键字

在定义一个方法的时候可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,而交给方法的调用处进行处理。

throws使用格式:

·public 返回值类型 方法名称(参数列表…) throws 异常类{};

使用throws声明的方法:

public class ExceptionDemo04
{
	public static int div(int a,int b) throws Exception{	//使用throws关键字声明方法
		return a/b;
	}
	public static void main(String args[]){
		//在调用有异常抛出的方法就必须进行异常处理
		try{
			System.out.println(div(3,0));		
		}catch(Exception e){
			e.getStackTrace();
		}
	}
}

throw关键字

与throws不相同的是,可以直接使用throw抛出一个异常。抛出的时候直接抛出异常类的实例化对象即可。

public class ExceptionDemo05
{
	public static void main(String args[]){
		try{
			throw new Exception("自己new的异常对象");	//抛出异常的实例化对象		
		}catch(Exception e){
			System.out.println(e);
		}
	}
}

Exception与RuntimeException的区别

这两个类的区别如下:

·Exception在程序中是必须用try…catch进行处理的。

·RuntimeException可以不使用try…catch进行处理,但是如果有异常产生吗,则交给JVM。

public class ExceptionDemo06
{
	public static void main(String args[]){
		String str="123";	//定义全部由数字组成的字符串
		Integer a=Integer.parseInt(str);	//将字符串转为int
		System.out.println(a);
	}
}

以上的程序执行是正常的,但是包装类Integer类的parseInt的定义格式如下:

public static int parseInt(String s) throws NumberFormatException

NumbetFormatExcepion父类是RuntimeException,则由此说明程序抛出TuntimeException的异常可以不进行处理,由JVM进行处理



 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值