Java的异常处理

Java程序的异常

什么是异常

  1. 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。
  2. 异常发生时,是任程序自生自灭,立刻退出终止。
  3. 在Java中即,Java在编译或运行或者运行过程中出现的错误。

异常处理机制

  1. 异常处理机制通过5个关键字实现:try、catch、throw、throws 和 finally。
  2. try catch 语句用于捕获并处理异常,finally 语句用于在任何情况下(除特殊情况外)都必须执行的代码,throw 语句用于拋出异常,throws 语句用于声明可能会出现的异常。

这里是引用

异常处理的建议

  1. 当你在写try-catch语句的时候,脑子里是知道自己要去针对哪种异常进行处理的,不要只是以防万一,加了个catch(Exception e),这是毫无意义的。并且,一个try块中可能有多个异常,对于每一类异常,要分别写一个catch进行捕获。
  2. 针对可能出现异常的语句进行try-catch,大段代码的try-catch会非常不利于维护代码时定位异常可能发生的位置,对于肯定不会发生异常的稳定的代码,不需要放在try块中。
  3. try-catch虽然在功能上,可以成为流程控制的工具,达到条件分支的效果。但相比于if-else语句,java的异常处理机制基于面向对象的思想,使用过程中需要更多的时间与空间的开销,所以不要用异常机制去做基本的条件判断,只有在程序会因为异常而中断时进行捕获和处理。
  4. finally块中永远不要写return语句,因为finally块中总是最后执行,他会改变预期在try和catch块中的返回值(举个例子,你在catch中捕获了一个异常并抛出e,又在finally语句中return true,这样你抛出的异常就"消失"了,因为当前函数的执行结果已经从抛出异常 转变成 return true)。另外,在使用资源对象与流对象时,finally块必须对资源对象、流对象进行关闭。

throw 与 throws

  1. throws关键字主要在方法签名中使用,用于声明该方法可能抛出的异常。throws 可以理解成是一种通知行为,没有实际的抛出异常的动作,而仅仅是告诉调用他的上层函数,这里可能会抛出这个异常;
  2. throw用于在函数体内语句中,表示抛出一个实际的异常的实际动作,如果在函数内没有捕获并处理,那么将会一直向上抛出这个异常直到被main()/Thread.run()抛出。
  3. 当一个函数throws声明函数可能抛出一个非运行时异常(检查异常)时,那么即使这个函数内部不显示使用throw,调用它的上层函数也必须包含处理这个异常的代码。

原文来自:博客园(zju_jzb)
原文链接:https://www.cnblogs.com/jzb-blog/p/6693434.html

异常处理示例

这里是引用

package com.exception2;

/**
  题目: 老师正在给学生上课, 突然某个学生说网络断了, 老师你来帮助处理一下
          没办法,我只能去找网管
  
  
 */
//网管类
public class TestException3
{
	public static void main(String[] args) throws MyException {
		//实列化一个老师
		Teacher t = new Teacher("胡杨");

		//实列化学生
		Student s = new Student("候文桌");

		//老师 在 教学生上课

		//网管说我来处理

		t.teach(s);

	}
}

class Teacher {
	
	private String name;

	public Teacher(String name) {
		this.name = name;
	}

	//老师正在给学生上课
	public void teach(Student s) throws MyException {
		//老师正在给学生上课 是一个持续的状态
		int i = 0;
		while (true) {
			System.out.println(this.name + " 给 " + s.getName() + " 上课 ");
			i++;
			try {
				Thread.sleep(1000);
				if (i == 5) {
					//突然某个学生说网络断了
					//抛出一个异常
					//老师你来帮助处理一下
					throw new MyException("突然" + s.getName() + "说网络断了");

				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

class Student {
	
	private String name;

	public Student(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

class MyException extends Exception {
	
	private String message;

	public MyException(String message) {
		this.message = message;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

}

原文链接:http://www.verejava.com/?id=16992994231782

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值