• review08


    所谓异常就是程序运行时可能出现的一些错误,比如试图打开一个根本不存在的文件等,异常处理将会改变程序的控制流程,让程序有机会对错误做出处理。

    各个catch参数中的异常类都是Exception的某个子类,表明try部分可能发生的异常,这些子类之间不能有父子关系。

    异常对象可以调用如下方法得到或输出有关异常的信息。

    public String getMessage();

    public void printStackTrace();

    public String toString();

    java使用try-catch语句来处理异常,将可能出现的异常操作放在try-catch语句的try部分,一旦try部分抛出异常对象,或调用某个可能抛出异常对象的方法,并且该方法抛出了异常对象,那么try部分立刻结束执行,转向执行相应的catch部分。代码展示如下所示:

    public class Exception {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int n = 0, m = 0, t = 1000;
            try{
                m = Integer.parseInt("8888");
                n = Integer.parseInt("ab89");
                t = 7777;//这后面的语句没有机会被执行
            }
            catch(NumberFormatException e){
                System.out.println("发生异常" + e.getMessage());
            }
            System.out.println("n=" + n + ", m="+ m + ",t=" + t);
            
            try{
                System.out.println("故意抛出I/O异常!");
                throw new java.io.IOException("我是故意的");//故意抛出异常,throw是用来指出要抛出哪个异常的
            }
            catch(java.io.IOException e){
                System.out.println("发生异常 " + e.getMessage());
            }
        }
    }

    结果如下:

    自定义异常类

    throw关键字的作用是抛出指定的异常,而throws是方法在声明时可以用来要产生的异常,表示这个方法可能抛出这个指定的异常。

    展示结果如下

    BankException.java

    public class BankException extends Exception {
        String message;
        public BankException(int m, int n){
            message = "入账资金" + m + "是负数或指出" + n + "是正数,不符合系统要求.";
        }
        public String warnMess()
        {
            return message;
        }
    }

    Bank.java

    public class Bank {
    	private int money;
    	public void income(int in, int out)throws BankException
    	{
    		if(in <= 0 || out >= 0 || in + out <= 0)
    		{
    			throw new BankException(in, out);
    		}
    		int netIncome = in + out;
    		System.out.printf("本次计算出的纯收入是:%d
    ", netIncome);
    		money = money + netIncome;
    	}
    	public int getMoney()
    	{
    		return money;
    	}
    }
    

     Test01.java

    public class Test01 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Bank bank = new Bank();
    		try{
    			bank.income(200, -100);
    			bank.income(300, -100);
    			bank.income(400, -100);
    			System.out.printf("银行目前有%d元
    ", bank.getMoney());
    			bank.income(200, 100);
    			bank.income(999, -100);
    		} catch (BankException e) {
    			// TODO Auto-generated catch block
    			System.out.println("计算收益的过程出现如下问题:");
    			System.out.println(e.warnMess());
    		}
    		System.out.printf("银行目前有%d元
    ",bank.getMoney());
    	}
    
    }
    

     运行结果如下所示:

    断言语句在调试代码阶段非常有用,当发送某个错误时,要求程序必须立即停止执行,这时就可以使用断言。

     assert number >= 0;

    如果number>=0为true,程序继续执行,否则立刻结束执行。

    try{}

    catch(ExceptionSubClass e){}

    finally{}

    其执行机制是:在执行try-catch语句后,执行finally子语句,也就是说,无论在try部分是否发生过异常,finally语句都会被执行。但有两点需要强调:

    (1)如果在try-catch语句中执行了return语句,那么finally自语句依然会被执行。

    (2)try-catch语句中执行了程序退出代码,即执行了System.exit(0);,则不执行finally自语句(当然也包括其后的所有语句)。

  • 相关阅读:
    SQL查询语句中,any和all有什么区别?
    $(function(){...});
    在ASP.NET中TextBox和TextBoxFor的区别以及ValidationMessageFor的作用以及EditorFor等的作用和用法什么?
    Brt课程设计day3
    Brt课程设计day2
    day1
    .net 高级写法总结
    可能是目前最完整的前端框架 Vue.js 全面介绍
    redis live 如何安装
    百万级PHP网站架构工具箱
  • 原文地址:https://www.cnblogs.com/liaoxiaolao/p/9260076.html
Copyright © 2020-2023  润新知