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

各个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. 基于apache —HttpClient的小爬虫获取网页内容

    今天(17-03-31)忙了一下午研究webmagic,发现自己还太年轻,对于这样难度的框架(类库) 还是难以接受,还是从基础开始吧,因为相对基础的东西教程相多一些,于是乎我找了apache其下的 H ...

  2. Java基础知识大全

    本文引用于: http://uule.iteye.com/blog/762949 /; DecimalFormat df = new DecimalFormat("0.00");/ ...

  3. 通过配置rinetd来实现ECS跳转访问非外网连接的mongodb

    跳转的原理通用,不单单针对mongo,其他需求应用也可以使用这种方式   生成环境中的mongodb迁移到了阿里云上的mongodb,由于机制的问题,mongodb不能直接被外网访问,故此采用的办法为 ...

  4. MySQL中B+树索引的使用

    1)         不同应用中B+树索引的使用 对于OLTP应用,由于数据量获取可能是其中一小部分,建立B+树索引是有异议时的 对OLAP应用,情况比较复杂,因为索引的添加应该是宏观的而不是微观的. ...

  5. Python3.6全栈开发实例[007]

    7.此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素.例如传入的列表为:[11,22,33] 返回的字典为 {0:11, ...

  6. HDU 4193 Non-negative Partial Sums(单调队列)

     题目大意: 给定一个长度为n的循环序列.从n个不同位置開始,问有几个位置使得一下情况成立:全部前缀的和都大等于0(n <=1000000). 下午的训练赛.之前没学过单调队列所以用的线段树 ...

  7. 0404-服务注册与发现-客户端负载均衡-两种自定义方式-Ribbon通过代码自定义配置、使用配置文件自定义Ribbon Client

    一.官方文档解读 官方地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_cust ...

  8. 脉冲神经网络及有监督学习算法Tempotron

    接下来一段时间开启脉冲神经网络模型的探索之旅.脉冲神经网络有更强的生物学基础,尽可能地模拟生物神经元之间的连接和通信方式.其潜在能力较强,值得踏进一步探索. 构建脉冲神经网络模型,至少需要考虑三点:1 ...

  9. SQLServer数据库基本操作,导入Excel数据

    打开SQLServer客户端,连上服务端 先建立数据库,点击新建查询 基本操作如下 创建表 create table mytest ( id int primary key identity(1,1) ...

  10. 【转】web.xml中load-on-startup的作用

    http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html 如下一段配置,熟悉DWR的再熟悉不过了:<servlet>   ...