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

各个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\n", 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元\n", 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元\n",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自语句(当然也包括其后的所有语句)。

review08的更多相关文章

随机推荐

  1. <..................> 哈佛大学哲学系 && 历史哲学笔记文献集

    哈佛大学哲学系课程表            (一)概况    (1)哈佛大学哲学系现有教师21人,其中访问教授7人,教师流动性较大,每年有一定的变化.以下为现任教师:Richard Moran(系主任 ...

  2. Delphi里的Windows消息(可查MSDN指定位置)

    各种控件的通知消码和控制消息可由MSDN-> Platform SDK-> User Interface Services->Windows User Interface->C ...

  3. SQL 排序的N种方法

    一.手工查询得出名次 select * ,select count(*)+1 from T2 where T2.[成绩] > T1.[成绩] as 名次 from T1 结果:  1 2 3 3 ...

  4. .net 取得类的属性、方法、成员及通过属性名取得属性值

    //自定义的类 model m = new model();   //取得类的Type实例 //Type t = typeof(model);    //取得m的Type实例 Type t = m.G ...

  5. ajax异步请求分页显示

    html代码: <!DOCTYPE html> <html lang="en"> <head>     <meta charset=&qu ...

  6. php中定时计划任务的实现原理

    根据php手册简单介绍一些相关的知识: 1.连接处理: 在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况: 0 - NORMAL(正常) 1 - ABORTED(异常退出) 2 - TIM ...

  7. python函数回顾:dict()

    描述 dict() 函数用于创建一个字典. 语法 dict 语法: class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterab ...

  8. Latex排版全解(转)

    Latex排版全解 http://blog.csdn.net/langb2014/article/details/51354238

  9. C#数组实践

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cont ...

  10. oracle 函数 截取 连接 替换 判断

    一个处理不规范日期的函数,廖记一下吧,以免再忘. --注意全角半角 CREATE OR REPLACE function f_str2form( date_string in varchar2 ) r ...