转自 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 class ThrowAndThrows {/*** 计算一个数字的平方根* @param nStr    以字符串的形式提供数字* @return    返回平方根* @throws Exception    当用户输入的字符串为空,* 或者字符串无法转换成数字,或者转换成的数字小于0,都会抛出异常*/public static double sqrt(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!");}return Math.sqrt(n);}public static void main(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声明了可能会抛出的异常向外抛出,必须在方法声明中使用throwsThrowAndThrows.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)
Exception in 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方法用来打印异常的堆栈信息,通过堆栈信息能够查明异常发生的原因和位置,在调试的时候常用。

转载于:https://www.cnblogs.com/thiaoqueen/p/7380340.html

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

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

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

  2. java异常处理的throw和throws的区别

    1. 区别 throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理.而throw则是指抛出的一个具体的异常类型. 2.分别介绍 ...

  3. java异常处理和自定义异常利用try和catch让程序继续下去(回来自己再写个例子试运行下)...

    注意:想在catch的参数里使用自定义的异常,则必须先将这个异常抛出才行.(throws是具有抛出异常的能力,并未抛出,throw new MyException是抛出异常,catch是捕获异常,只有 ...

  4. 学习-Java异常处理之throw之酒店入住

    任务描述 本关任务:接收给定的一个整数(年龄),当年龄小于 18 岁或者大于 90 岁时,抛出一个异常(Exception),提示"18岁以下,90岁以上的住客必须由亲友陪同":当 ...

  5. 多态的概念、对象上下转型、多态的应用、异常(异常概念、异常分类、java异常处理机制、try...catch...finally、throw和throws、自定义异常)

    多态的概念: 多态性是指同一个操作作用于某一类对象,可以有不同的解释,产生不同的执行结果. 多态存在的三个必要条件: ① 需要存在继承或实现关系 ② 同样的方法调用而执行不同的操作.运行不同代码(重写 ...

  6. Java 异常处理 try catch finally throws throw 的使用和解读(一)

    最近的一个内部表决系统开发过程中, 发现对异常处理还存在一些模棱两可的地方, 所以想着整理一下 主要涉及到: 1.try catch finally throws throw 的使用和解读 2.自定义 ...

  7. java try catch 例子_Java异常处理综合例子(try、catch、finally、throws、throw)

    Java异常处理综合例子(try.catch.finally.throws.throw) 佟强 2009年11月4日 http://blog.csdn.net/microtong package cn ...

  8. [Java]关于throw,throws,try{}catch(){}

    一.异常的产生 1. 在java代码中,如果发生异常,JVM就会中断程序代码的运行,然后创建异常对象并抛出.例如: int a=2, b=0; int i=a/b;  //除数不能为0,发生异常 Sy ...

  9. java 异常处理的关键字_java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类...

    packagecn.kecheng;importjava.util.Scanner;/**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中通过异常 ...

最新文章

  1. 中国地理区域IP库整理
  2. PyQt5 技术篇-调用颜色对话框(QColorDialog)获取颜色,调色板的调用。
  3. python多线程不能利用多核cpu,但有时候多线程确实比单线程快。
  4. Nacos源码NacosNamingService
  5. asp文件上传和下载
  6. C 实现一个跨平台的定时器 论述
  7. Mysql常用的几种join连接方式
  8. 算法笔记_面试题_22. 图与搜索(BFS/DFS)相关_模板及示例十几道
  9. 拓端tecdat|R语言时间序列TAR阈值自回归模型
  10. logisim的安装
  11. 【多多情报通】拼多多个人店铺怎么升级为企业店铺?怎么转让?
  12. win10无法装载iso文件_win10系统iso文件怎么安装
  13. 【Hyperledger Fabric】学习笔记2——超级账本介绍
  14. Reaction of travel book-ShanXi
  15. 如何使用手机软件将图片转换为文字
  16. linux(CentOS7)下实现集群主机分类免密登录脚本--类跳板机
  17. java如何将二进制转换为十进制
  18. 你想要的二维码美化效果都在这里了(前景图,圆点二维码,液化效果)
  19. ҉菊҉花҉文҉生҉成҉器҉
  20. ie8视频播放器兼容

热门文章

  1. Linux下双网卡绑定(bonding技术)
  2. windows连接linux系统telnet端口23无法连接的问题
  3. Home Server诠释
  4. ASP.NET基础教程-DataView对象的属性、方法、枚举成员
  5. freemind的一个大bug,一周的数据啊
  6. Java 虚拟机总结给面试的你(下)
  7. python学习之路二
  8. POJ 3342 Party at Hali-Bula ——(树型DP)
  9. 虚拟机复制后修改eth1为eth0
  10. Listview 多个ViewHolder实现