java学习笔记(六)java的异常处理机制

目录

一、认识异常

异常什么时候发生

异常是什么

java异常机制的流程

抛出异常

在代码中使用throw抛出一个异常

在方法声明中使用throws

构造自定义异常类

使用自定义异常类

二、异常的传递

抛出最确切的异常

java的异常传递


一、认识异常

异常什么时候发生

学习的过程中,我们会遇到编译错误,需要注意的是,编译器能够发现的错误就是语法错误,不是异常。而在程序运行期间,由于各式各样的原因而导致的错误或不期待出现的情况,就叫做异常。

语法错误和程序异常其实都是错误的,都需要我们的处理,对于语法错误,编译器会在编译源文件的时候给出相关信息,然后我们需要根据不符合语法的部分来更改错误;异常则是程序在运行期间所发生的的问题,不一定是代码有问题,处理起来就没那么简单了,当然大多数情况还是需要从代码入手。

异常是什么

异常其实是在程序执行的过程中遇到的错误,例如9M不能被转换成一个double变量。在java中,使用类表示一种错误,自然的,对于某个具体错误,就是使用这个类的实例来表示。

java.lang.NumberFormatException来表示该字符串到数字的转换错误。当出现这种错误的时候,就会创建一个java.lang.NumberFormatException:FormatEXcetion的实例,并使用这个实例来描述这个转换错误

每种异常都使用一个java类来表示

每个具体异常都是使用对应的java类的实例来表示

程序发生了一个异常,通常称程序抛出了一个程序异常。这里所谓的抛出程序异常其实就是一个对应异常的类

java异常机制的流程

抛出异常;此步骤首先是创建能够描述异常的对象,这时算是发生了一个异常

异常传递:异常传递就是由java自行处理,关于异常传递的语法很简单,异常会传递方法给方法的调用者

异常处理:就是捕捉住异常并根据异常类型做出相应的处理

抛出异常

异常类的父类--Throwable

在java异常机制中,只有一个特殊的类继承Throwable,才会当做一个异常,才能被当做一个异常“抛出”想·        

Exception:参数message就是异常错误描述信息,也就是作用类似于For input string:“9M”的一个字符串。NumberFormatException的实例时,通过调用这个构造方法将信息错误保存于异常之中。

只有继承了Throwable类的java类才能被java异常机制认为是一个异常类,才能使用java中相关的语法抛出和处理,也就是说所有的java异常类都是Throwable类的子类。

异常类型也就是异常信息的来源,同时异常类型在异常处理时也有重要的作用。应该使用一个异常类表示一种类型的异常

异常类的作用就是表示一个异常信息。除了Throwable类之外,异常类的内容大部分构造方法,并不复杂。

在代码中使用throw抛出一个异常

package com.javaeasy.throwexception;

public class Cup {
	private int capacity;
	public int getCapacity() {
		return capacity;
	}
	public void setcapacity(int capacity) throws Exception  {
		if(capacity > 10000 || capacity < 0) {
			//创建一个Exception类的实例,描述这个异常信息
			Exception ex = new Exception ("杯子的容积不能超过10000或小于0,非法容积为:"+capacity);
			throw ex;
		}
		this.capacity=capacity;
	}
}

在setCapacity首先判断capacity是否在合法的数值区间内,如果不在,则创建exception类的实例,并通过构造方法将错误的信息字符串给这个实例,然后使用java中的throw关键字来将这个异常抛出

throw + 空格 +异常类的实例

所有的异常类必须包含Throwable类型,该语法的作用就是抛出一个异常,这个异常会按照java的传递规则,并最终被处理掉。

在方法声明中使用throws

方法声明+throw+空格+异常类型+方法体

构造自定义异常类

先创建两个类CapacityTooSmallException类和CapacityTooBigException类

package com.javaeasy.throwexception;

public class CapacityTooSmallException extends Exception{
	public CapacityTooSmall(String message) {
		super (message);//简单调用父类的构造方法
	}
}

public class CapacityTooBigException extends Exception{
	public CapacityTooBig(String message) {
		super (message);//简单调用父类的构造方法
}

构造异常关键就是让异常类继承自适合的父类。在绝大数情况下,编程时的自定义异常类继承Exception类就可以了

构造自定义方法,通常按照编程的实际要求,在自定义异常类中提供相应的构造方法。

使用自定义异常类

使用throw和throws关键字

使用自定义的异常没有什么特殊之处

方法声明的throws语句代表这个方法可能抛出的异常类型,当然这些类型的子类也包括在内

二、异常的传递

抛出最确切的异常

方法代码内部抛出的异常类型并不等于方法抛出的异常类型。方法抛出的异常类型是由方法声明中throws语句决定的

java异常传递允许在throws语句中抛出实际的类型或者实际异常类型的父类型。当然异常实例是不会改变的。如果抛出的异常类型是实际异常的父类型,那么这就好像使用最确切的异常类型,而不是让throws语句将方法代码抛出的异常类型吃掉

java的异常传递

异常传递的语法规则是从某个方法中的某个throw语句开始,异常将从这个方法开始传递到调用这个方法的地方,并按照方法调用的顺序去继续传递。直到最初的方法也就是main()方法。

异常必须被传递出去,否则在编译源代码的时候,java编译器就会输出 一个语法错误

在程序运行的时候,如果方法的某行代码出抛出了异常,那么方法中此行之后的所有代码都不会被执行。这个规则不仅仅是对异常起作用,对于所有异常传递线路上方法都是一样的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值