异常处理

异常处理语句块

try{
/**
* 异常处理的程序语句块
* 将可能发生异常的语句放在这里
* 执行顺序第一(将异常视作一个因为程序出错而实例化的一个对象)
* 如果发生异常,将所捕获的异常传递给catch语句块
* 并且在异常传递之后,try语句块会跳过这里继续执行以后的语句
/
}
catch(Exception e){
e.printStackTrace();
/

*捕获try语句块传递来的异常,指向e
*在e上对异常进行操作
*最好在catch块中写入处理异常的代码。
/
}
finally{
/

*finally语句是异常处理的最后执行部分
*无论try语句块中的代码如何退出,都会执行finally语句块
*--------------------------------------------------------------------------
*完整的异常处理语句块一定包含finally
*无论程序之前两语句块是否顺利执行完毕,都会执行finally
*不执行finally情况:
*1.在finally语句块中发生了异常
*2.在前面的代码中使用了System.exit()退出程序
*3.程序所在线程死亡
*4.关闭了CPU
}

通常异常处理的常用以下三个函数来获取异常有关信息:

  • getMessage() :输出错误性质
  • toString() :给出一场函数的类型与性质
  • printStackTrace() :之处异常的类型、性质、栈层次以及出现在程序中的位置。

在方法中抛出异常——throws

  • 使用throws关键字抛出异常
package com.test;
public class Test{
	static void pop() throws NegativeArraySizeException{
		//
		int arr[] = new int[-3];
	}
	public static void main(String args[]) {
		try {
			pop();
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("pop()方法抛出的异常");
		}
	}
}

在这里插入图片描述
使用throws能将异常抛给上一级后,如果不想处理该异常,可以继续向上抛出,但是最终要由能够处理该异常的代码。

  • 如果是Error、RuntimeException或者他们的子类,可以不使用throws关键字来声明要抛出的异常,编译仍然能够顺利通过,但是在运行时会被系统抛出。

在方法中抛出异常——throw

public class Test
{
    public static void main(String[] args) 
    {
        try
        {
            //调用带throws声明的方法,必须显式捕获该异常
            //否则,必须在main方法中再次声明抛出
            throwChecked(-3);            
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
        //调用抛出Runtime异常的方法既可以显式捕获该异常,
        //也可不理会该异常
        throwRuntime(3);
    }
    public static void throwChecked(int a)throws Exception
    {
        if (a > 0)
        {
            //自行抛出Exception异常
            //该代码必须处于try块里,或处于带throws声明的方法中
            throw new Exception("a的值大于0,不符合要求");
        }
    }
    public static void throwRuntime(int a)
    {
        if (a > 0)
        {
            //自行抛出RuntimeException异常,既可以显式捕获该异常
            //也可完全不理会该异常,把该异常交给该方法调用者处理
            throw new RuntimeException("a的值大于0,不符合要求");
        }
    }
}

throws和throw区别

throws:

处理异常代码编写使用原则:

  • 在当前方法声明中使用try-catch语句来捕获异常
  • 一个方法被覆盖是,覆盖他的方法必须抛出相同的异常或者异常的子类
  • 如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出心得异常。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值