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

各个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. CRM客户关系管理系统-需求概设和详设

    大概设计 大概设计就是对需求进行一个整体性分析,把需要实现的功能都列出来,对于客户关系管理系统,我们需要从角色出发,从而确定有哪些需求,最好是画个思维导图 首先我们是为培训学校这么一个场景来开发的,所 ...

  2. python的文件处理学习笔记

    python的文件处理函数是open() 以下主要是关于这个函数的一些学习笔记 1.文件处理离不开编码 要注意的是文件打开时的编码和文件保存时的编码的统一,这样才能保证你打开的文件不会存在乱码 总结: ...

  3. What are DESC and ASC Keywords?

    What are DESC and ASC Keywords? ASC is the short form for ascending DESC is the short form for desce ...

  4. JavaWeb:Tomcat服务器的安装与配置

    Tomcat服务器的安装与配置 安装 输入网址进入Tomcat的官网            在左边导航栏选择对应下载的版本            下载安装包形式            下载并解压到我们 ...

  5. vmware网络配置(NAt模式)

    学习参考: http://www.linuxidc.com/Linux/2017-03/141864.htm(讲解NAT模式) 配置: 1.在virtul Network Editor(虚拟网络编辑器 ...

  6. 使用新浪IP库获取IP详细地址

    使用新浪IP库获取IP详细地址 <?php class Tool{ /** * 获取IP的归属地( 新浪IP库 ) * * @param $ip String IP地址:112.65.102.1 ...

  7. Java字段初始化规律:

    Java字段初始化规律: Java进行初始化的地方有两个,初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块(以上程序为实例初始化块).静态初始化块是类中由static修饰的初始化块,实 ...

  8. Hibernate Student_Course_Score设计

    示例: 设计代码,实现在数据库中建student表.course表.和score表,展现三者关系 student表:id.name course表:id.name score表:id.score.st ...

  9. nginx负载均衡详情

    负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦. 负载均衡 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可 ...

  10. Android签名机制之---签名过程详解

    http://www.2cto.com/kf/201512/455388.html 一.前言 又是过了好长时间,没写文章的双手都有点难受了.今天是圣诞节,还是得上班.因为前几天有一个之前的同事,在申请 ...