java异常初理解

为什么用异常:异常处理使得程序可以处理非预期的情景,并且继续正常的处理。

 在这个世界不可能存在完美的东西,不管完美的思维有多么缜密,细心,我们都不可能考虑所有的因素,这就是所谓的智者千虑必有一失。同样的道理,计算机的世界也是不完美的,异常情况随时都会发生,我们所需要做的就是避免那些能够避免的异常,处理那些不能避免的异常。这里我将记录如何利用异常还程序一个“完美世界”。

异常处理最根本的优势就是将检测错误(由被调用的方法完成)从处理错误(由调用方法完成)中分离出来。(也就是没有那么多if语句了)

异常的处理三种操作:①声明异常(throws) ②抛出异常(throw) ③捕获异常(try-catch)

以调用method()方法为例

public class ExceptionDemo {
	public static void main(String[] args) {
        //捕获一个异常
		try {
			method();    
		}catch(Exception ex){
            //做一些异常的处理
		}
	}
	
	public static void method() throws Exception{    //throws声明异常
		int a = 1;
		if(a==0) {
			throw new Exception();    //抛出一个异常对象
		}
	}
}

声明异常

1、每个方法都必须用throws声明它可能抛出的必检异常,免检异常不要求显式声明(必检异常和免检异常在下一节有说明)

2、throws后又多个异常时用逗号分隔异常列表

3、如果方法没有在父类中声明异常,那么久不能在父类中对其进行继承来声明异常。

抛出异常

1、抛出的其实是一个异常类的对象  throw new Exception();

2、java API异常类至少有两个构造方法:一个无参构造方法和一个可描述这个异常的String参数的构造方法(它可用getMassage()获取)。

捕获异常

异常处理器:处理一个异常的代码

捕获一个异常即从当前方法开始,沿着方法调用链,按异常的反向传播方向找到一个可以处理该异常的异常处理器。

问:对那些该异常处理却没有异常处理的部分,java怎么处理

答:如果在调用的方法链中找不到处理器,程序就会终止并且在控制台上打印

需要注意的是:

①一个通用的父类可以派生出各种异常类,而父类可以捕获子类的异常(但不建议,尽量特事特办)

②父类的catch块必须在其子类catch块后面

③如果方法声明了一个必检异常,就必须在try-catch块中调用它,或者再调用方法中声明要抛出异常,而后再次抛出给其他方法去处理

获取异常信息

java.lang.Throwable类中有以下实例方法可以获取有关异常的信息。

+getMessage():String (返回描述该异常对象的信息)

+toString():String (返回三个字符的连接:1)异常类的全名;2)“:”(一个冒号和空白)3)getMessage(方法))

+getStackTrace():StackTraceElement [ ] 在控制台打印Throwable对象和它的调用堆栈信息。返回和该异常对象相关的代表堆栈跟踪的一个堆栈跟踪元素的信息

 

异常的分类

异常类可以三种主要类型:①系统错误(Error) ②运行时异常 (RuntimeException)③异常(Exception)

而系统错误和运行时异常及它们的子类都称为免检异常,其他异常都为必检异常。

 

finally子句

try{
    调用方法
}catch{
    异常处理
}finally{
    一定会执行的语句
}

无论异常是否产生,finally子句总是会被执行的。

 

 

 

=======================================分隔线===================================================后面还有   何时使用异常、重新抛出异常、链式异常、创建自定义异常四部分内容将会更新

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值