JAVA SE篇--08 异常捕获

1.try-catch 捕获异常

    java异常捕获机制中的try-catch。try块是用来扩上可能出错的代码片段,catch块是用来捕获try块中代码抛出的错误并解决。

public class ExceptionDemo1 {
	public static void main(String[] args) {
		System.out.println("程序开始了");
		try {
			String str="";
			/*
			 * jvm在执行代码的过程中若发现了一个异常,则会实例化这种情况的异常实例,
			 * 并将代码整个执行过程完整设置到异常中来表示该错误报告,设置完毕后将该异常抛出。
			 * 若抛出异常的这句代码有被try包围,则JVM会检查catch中是否有关注该异常。
			 * 关注则交给catch解决,否则会将异常抛出到当前方法外,由调用当前方法的代码解决该异常。
			 */
			System.out.println(str.length());
			System.out.println(str.charAt(0));
			System.out.println(Integer.parseInt(str));
		}catch(NullPointerException e) {
			System.out.println("出现了空指针");
		}catch(StringIndexOutOfBoundsException e) {
			System.out.println("字符串下标越界了");
			/*
			 * 应当养成一个好习惯,在最后一个catch中捕获Exception。
			 * 避免因未捕获异常导致程序中断
			 * 
			 * 当多个catch捕获不同异常时,这些异常间存在继承关系,那么子类异常要在上先行捕获,父类异常在下。
			 */
		}catch(Exception e) {
			System.out.println("异常出现了");
		}
		System.out.println("程序结束了");
	}
}

2.finally块

    finally块定义在异常捕获机制的最后,可以直接跟在try块之后或者最后一个catch之后。finally块中的代码一定会执行,无论try块中的代码是否抛出异常。 所以通过会把释放资源等操作放在finally中,例如关闭流。

public class ExceptionDemo2 {
	public static void main(String[] args) {
		System.out.println("开始了");
		try {
			String str=null;
			System.out.println(str.length());
		}catch(Exception e) {
			System.out.println("异常发生了");
		}finally {
			System.out.println("finally中的代码执行了");
		}
		System.out.println("程序结束了");
	}
}

3.finally对于流的操作

public class ExceptionDemo3 {
	public static void main(String[] args) {
		BufferedReader br = null;
		try {
			br=new BufferedReader(new InputStreamReader(new FileInputStream("src/day07/ExceptionDemo3.java")));
			String line=null;
			while((line=br.readLine())!=null) {
				System.out.println(line);
			}
		}catch(Exception e) {
			System.out.println("出错了");
		}finally {
			if(br!=null) {
				try {
					br.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

	}
}

4.测试throws和throw

先建立一个Person.java类

package day08;
/**
 * 用来测试throw和throws
 * @author LvChaoZhang
 *
 */
public class Person {
	private int age;

	public int getAge() {
		return age;
	}

	/*
	 * 当一个方法中使用thorw抛出一个异常时,就要在方法上使用throws声明该类异常的抛出以通知调用者解决
	 * 只有RuntimeException及其子类异常使用throw抛出时不强制要求必须使用thorws生命
	 * 其他异常都是强制要求,否则编译不通过
	 */
	public void setAge(int age) throws Exception {
		if(age<0||age>100) {
			throw new Exception("年龄不合法");
		}
		this.age = age;
	}
	
}

ExceptionDemo4.java

package day08;
/**
 * 测试异常的抛出
 * @author LvChaoZhang
 *
 */
public class ExceptionDemo4 {
	public static void main(String[] args) {
		Person p=new Person();
		/*
		 * 当调用一个含有throws声明异常抛出的方法时,编译器要求必须处理该异常
		 * 处理手段有两种:
		 * 1.使用try-catch捕获并处理
		 * 2.在当前方法上继续使用thorws声明该异常的抛出
		 */
		try {
			p.setAge(200);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("年龄不合法呀啊");
		}
		System.out.println("年龄为:"+p.getAge());
	}
}

5.Exception常用方法

package day08;
/**
 * Exception常用方法
 * 
 * @author LvChaoZhang
 *
 */
public class ExceptionDemo6 {
	public static void main(String[] args) {
		System.out.println("程序开始了");
		try {
			String str="abc";
			System.out.println(Integer.parseInt(str));
		}catch(Exception e) {
			//e.printStackTrace();
			e.getMessage();
		}
		System.out.println("程序结束了");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值