java的异常&捕获

Java的异常机制
Java中的错误的顶级类:Throwable类
Thorwable下派生了两个子类
Error和Exception
Error:错误,通常是虚拟机级别的异常.程序(通过我们的代码)无法解决.
Exception:异常,程序级别的异常
我们可以通过代码的形式捕获异常,并进行相应的处理.

Try关键字:
Try{}:语句块
Try语句块中包含的应该是可能引发异常的程序片段.
Catch关键字:
Catch(){}:捕获块
Catch块是紧跟在try后面的,可以出现多个.每一个catch会列举在try块中的代码可能出现的一种错误.一旦try块中的代码出现了该种错误,就会进入当前catch块,在catch块中我们来编写解决该异常的代码片段.若try块中的代码运行时没有出现任何异常,所有catch块均被忽略,不会被执行.

Java异常
当JVM运行程序时,在某一句代码运行时出现了异常,jvm就会实例化该类异常的一个实例并抛出错的该句代码外,这时会检查调用该句代码的方法是否对该句代码进行了try捕获,若有则依次检查catch直到发现可以解决的catch片段.若没有try块或者catch没有解决该异常,则继续向该方法外面抛出,然后按照上述描述检查并解决.若最终没有任何解决措施而抛至main方法外,则jvm停止该程序.

throw关键字
throw后面紧跟一个异常实例.作用是向外主动抛出一个异常.

获取错误信息
String e.getMessage();
向控制台输出错误堆栈信息
e.printStackTrace();

throws关键字
Throws关键字用来在声明方法时同时声明该方法可能抛出的异常,通知调用者必须捕获这些异常.

通常情况下,程序中throw的异常都要在方法声明时通过throws告知调用者.但是RuntimeException及其子类例外.

/**
 * 因为不符合逻辑而当异常去看待
 * @author Administrator
 *
 */
public class Person {
	private int age;

	public int getAge() {
		return age;
	}

	public void setAge(int age) throws Exception{
		if(age<0||age>200){
			throw new Exception("年龄不合法");
		}
		this.age = age;
	}
	public static void main(String[] args){
		Person p=new Person();
			try {
				p.setAge(999);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
}

finally关键字
finally块:出现在try,catch的最后,只能出现一次.
finally无论如何都会执行!
通常我们会将无论程序是否出错都要执行的语句放到finally中,以保证可以执行到.

模拟数据库
**

public class TestFinally {
	public static void main(String[] args) {
	try{
		String ip=null;
		System.out.println("连接数据库");
		if(ip==null){throw new RuntimeException("操作数据库失败");}
		System.out.println("保存数据");
	}catch(Exception e){
		System.out.println("操作数据库失败");
	}finally{
		System.out.println("关闭数据库连接");//无论是否报错,必须要关闭数据库
	}
	}
}

看看下面应该输出什么

public class FinallyDemo {

	public static void main(String[] args) {
		System.out.println(
				test(null)+","+test("0")+","+test("")
				);
	}
	public static int test(String str){
		try{
			return str.charAt(0)-'0';
			
		}catch(NullPointerException e){
			System.out.println("空指针");
			return 1;
		}catch(RuntimeException e){
			System.out.println("运行时异常");
			return 2;
			
		}catch(Exception e){
			System.out.println("就是个异常");
			return 3;
		}finally{
			return 4;
		}
	}

}

其实会输出:(
空指针
运行时异常
4,4,4

)
所以请注意,finally中不要写返回语句,否则方法无法返回正确结果.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值