转自 http://blog.csdn.net/zhouyong80/article/details/1907799

程序运行过程中可能会出现异常情况,比如被0除、对负数计算平方根等,还有可能会出现致命的错误,比如内存不足,磁盘损坏无法读取文件等,对于异常和错误情况的处理,统称为异常处理。

Java异常处理主要通过5个关键字控制:try、catch、throw、throws和finally。try的意思是试试它所包含的代码段中是否会发生异常;而catch当有异常时抓住它,并进行相应的处理,使程序不受异常的影响而继续执行下去;throw是在程序中明确引发异常;throws的作用是如果一个方法可以引发异常,而它本身并不对该异常处理,那么它必须将这个异常抛给调用它的方法;finally是无论发不发生异常都要被执行的代码

关键字:throw,throws,try和catch的用法如下:

1、throws出现在方法的声明中,表示该方法可能会抛出的异常,允许throws后面跟着多个异常类型

2、throw出现在方法体中,用于抛出异常。当方法在执行过程中遇到异常情况时,将异常信息封装为异常对象,然后throw。

3、try出现在方法体中,它自身是一个代码块,表示尝试执行代码块的语句。如果在执行过程中有某条语句抛出异常,那么代码块后面的语句将不被执行。

4、catch出现在try代码块的后面,自身也是一个代码块,用于捕获异常try代码块中可能抛出的异常。catch关键字后面紧接着它能捕获的异常类型,所有异常类型的子类异常也能被捕获。

演示实例

package book.exception;/**

* 抛出异常和声明异常

* @author joe

**/

public classThrowAndThrows {/**

* 计算一个数字的平方根

* @param nStr 以字符串的形式提供数字

* @return 返回平方根

* @throws Exception 当用户输入的字符串为空,

* 或者字符串无法转换成数字,或者转换成的数字小于0,都会抛出异常*/

public static doublesqrt(String nStr) throws Exception {if (nStr == null) {//用trow关键字抛出异常,当异常被抛出时,程序会跳出该方法

throw new Exception("输入的字符不能为空!");

}double n = 0;try{

n=Double.parseDouble(nStr);

}catch(NumberFormatException e) {//将parseDouble方法可能抛出的异常NumberFormatException捕获,//然后将捕获的异常重新封装并输出

throw new Exception("输入的字符串必须能够转化成数字!", e);

}if (n < 0){throw new Exception("输入的字符串转化成的数字必须大于0!");

}returnMath.sqrt(n);

}public static voidmain(String[] args) throws Exception {try{

ThrowAndThrows.sqrt("-124.56");

}catch(Exception e) {//将sqrt方法声明的可能抛出的Exception异常捕获//打印捕获的异常的堆栈信息,从堆栈信息中可以发现异常发生的位置和原因

System.out.println("Got a Exception:" +e.getMessage());

e.printStackTrace();throw e; //不做进一步处理,将异常向外抛出

}//将sqrt声明了可能会抛出的异常向外抛出,必须在方法声明中使用throws

ThrowAndThrows.sqrt("-124.56");

}

}

程序输出结果:

Got a Exception:输入的字符串转化成的数字必须大于0!

java.lang.Exception: 输入的字符串转化成的数字必须大于0!

at book.exception.ThrowAndThrows.sqrt(ThrowAndThrows.java:30)

at book.exception.ThrowAndThrows.main(ThrowAndThrows.java:37)

Exceptionin thread "main"java.lang.Exception: 输入的字符串转化成的数字必须大于0!

at book.exception.ThrowAndThrows.sqrt(ThrowAndThrows.java:30)

at book.exception.ThrowAndThrows.main(ThrowAndThrows.java:37)

源码分析:

在main方法里,由于sqrt方法的声明中有throws关键字,所以,在调用该方法时,必须对throws后面声明的异常进行处置,处置的方法有两种:

(1)main方法处理该异常,使用try.....catch语句,将可能会出现的异常的代码放在try块内,将处理异常的代码放在catch块内,并指明catch能够捕获的异常的类型,当异常被捕获时,执行catch块内的语句。

(2)main方法不处理该异常,将异常向外层程序抛出。在方法声明中使用throws关键字抛出异常,方法体中不需要使用try...catch语句。

异常类Exception的getMessage方法用来获取一场的描述信息,printStackTrace方法用来打印异常的堆栈信息,通过堆栈信息能够查明异常发生的原因和位置,在调试的时候常用。

java throw 和catch_java异常处理之throw, throws,try和catch相关推荐

  1. java异常处理之throw, throws,try和catch

    转自 http://blog.csdn.net/zhouyong80/article/details/1907799  程序运行过程中可能会出现异常情况,比如被0除.对负数计算平方根等,还有可能会出现 ...

  2. java异常处理机简答题,【简答题】JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally 分别代表什么意义?...

    [简答题]JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally 分别代表什么意义? 更多相关问题 用蒸汽进行设备管线吹扫时,应将被吹扫的设备管线,相应 ...

  3. JAVA day24,25,26 异常(try、catch、finally、throw、throws),线程(Thread、Runnable、Callable)

    一.异常 异常 :指的是程序在执⾏过程中,出现的⾮正常的情况,最终会导致JVM的⾮正常停⽌. 在Java等⾯向对象的编程语⾔中,异常本身是⼀个类,产⽣异常就是创建异常对象并抛出了⼀个 异常对象.Jav ...

  4. java throw 什么意思_Java中throw和throws有什么区别?

    当然,你需要明白异常在Java中式以一个对象来看待. 并且所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,但是一般情况下Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示 ...

  5. java try catch_Java - 异常处理机制

    异常定义及分类 异常指程序运行中遇到的各种不正常的状况,如:参数非法.数据库连接失败.文件无法找到.虚拟机发生错误等等.当异常发生时会干扰了程序的正常运行,因此我们必须针对发生的异常做出正确的处理,否 ...

  6. Java基础篇:异常处理

    文章目录 异常概述与异常体系结构 常见异常 异常处理机制 异常处理机制一:try-catch-finally 异常处理机制二:throws 手动抛出异常:thow 如何自定义一个异常类? 总结 异常概 ...

  7. java 可控异常_java异常处理,重新认识java异常,java7异常处理的新特性!

    原标题:java异常处理,重新认识java异常,java7异常处理的新特性! 在程序中,错误可能产生于程序员没有预料的各种情况,或者是超出了程序员可控范围的环境因素,如用户的坏数据.试图打开一个根本不 ...

  8. java12章_从零开始学Java 第12章 异常处理

    第12章  异常处理 世界上没有完美的事情,一个完善的程序不可能总是会准确无误的运行,它们的运行流程都是在开发人员所预料的范围之内.但是,实际却不尽人意.在程序的运行过程中可能会因为各种原因而导致出现 ...

  9. java 抛出异常效率_Java异常处理机制

    与C++.python,Ruby一样,Java也有一个异常处理机制,当程序出现异常时,系统会自动生成一个Exception对象通知程序去处理.之所以这样设计目的在于使程序有更好的容错性和可读性,实现业 ...

最新文章

  1. 记录某项目中的踩坑与解决(持续更新)
  2. 工具类的方法怎么引用_Hutool中那些常用的工具类和方法
  3. 检索com类工厂 80070005_Hands-On Design Patterns With C++(十二)友元工厂
  4. Python--一些重要的小tips【持续更新】
  5. 一步一步将自己的代码转换为观察者模式
  6. matlab讨论资金积累,资金积累、国民收入与人口增长的关系综合评估
  7. 找到字符串的最长无重复字符子串
  8. 10分钟学会理解和解决MySQL乱码问题
  9. 虚拟串口软件VSPM使用手册
  10. 计算机组成原理中断实验的分析,计算机组成原理_中断实验.pdf
  11. 使用FlyMcu ISP清除 STM32F411CE 芯片卡死
  12. c++有关iostream和iostream.h
  13. MATLAB频谱图绘制
  14. 汽水分离再热器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. 大数据-机器学习导论-1
  16. found zsh 所有命令在终端失效
  17. 通过MediaRecorder 录制视频的时候,魅族手机录制视频后,大小显示0
  18. Linux中安装IE和Office等软件(转)
  19. html—显示照片(方法一)
  20. 如何在电脑上剪辑视频?自用多年的软件分享

热门文章

  1. 怎样安装WIN7系统
  2. 微软iscsi服务器,HOWTO: 基于 Windows Server iSCSI 服务创建 RAM Disk
  3. 韦伯尔分布/威布尔分布/Weibull distribution 置信区间确定
  4. 收房不得不注意的几大问题
  5. 如何隐藏或删除Windows 10任务栏图标
  6. MySQL binlog日志恢复数据详细操作步骤
  7. 软件架构必知-康威定律
  8. cors账号登录显示服务器错误,详解如何解决CORS账号连接RTK无法获得固定解的问题...
  9. 28岁,他是如何成为上市公司测试总监的
  10. android studio改变字体