异常处理机制的初衷是将不可预期异常的处理代码和正常的业务逻辑处理代码分离,

因此绝不要使用异常处理来代替正常的业务逻辑判断。

若错误是可预料的,则必须提供处理错误的代码来处理错误,而不是抛出异常。

//异常

packagebin;

importjava.io.FileInputStream;

importjava.io.IOException;

publicclassAccessExceptionMsg

{

publicstaticvoidmain(String[] args)

{

try

{

FileInputStream fis =newFileInputStream("a.txt");

}

catch(IOException ioe)

{

//System.out.println(ioe.getMessage());

ioe.printStackTrace();

}

}

}

/*

getMessage():返回该异常的详细描述字符串

printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。

printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定输出流。

getStackTrace():返回该异常的跟踪栈信息。

*/

/*

结果:a.txt(系统找不到指定文件)【异常描述信息】

java.io.FileNotFoundException:...【异常跟踪信息】

*/

异常处理语法结构中只有try块是必须的,catch块和finally块都是可选的,但是不能同时没有catch块和finally块,二者至少出现其一。'

finally:

return语句强制方法返回,通常情况下,方法执行到return语句,程序立即结束该方法,但一定会先执行finally块里的代码,但若程序中有System.exit(1)退出虚拟机,finally不会被执行。

使用throws声明抛出异常:

使用throws声明抛出异常的思路是:当前方法不知道应该如何处理这种类型的异常,该异常应该由上一级调用者处理。

throws ExceptionClass1,ExceptionClass2...

*一旦使用throws语句声明抛出该异常,程序就无需使用try...catch块来捕获异常。*

使用throws声明抛出异常时有一个限制:就是方法重写时的“两小”中一条规则:子类方法中声明抛出的异常类型应该是父类方法声明抛出的异常类型的子类或相等,子类方法中不允许比父类方法声明抛出更多的异常。

使用throw抛出异常:

throw语句抛出的不是异常类,而是一个异常实例,且每次孩子能抛出一个异常实例。【throw ExceptionInstance】

*使用throw时一定要声明throws*声明异常

自定义异常类:

publicclassAuctionExceptionextendsException

{

//异常类无参数的构造器

publicAuctionException(){}

//带一个字符串参数的构造器

publicAuctionException(String msg)

{

super(msg);

}

}

catch和throw同时使用:

/*

catch和throw同时使用

异常出现的当前方法中,程序只对异常进行部分处理,还有些

处理需要在该方法的调用者中才能完成,所以应该再次抛出异常,

这样就可以让该方法的调用者也能捕获到异常。

*/

publicclassTestAuction

{

privatedoubleinitPrice  =30.0;

publicvoidbid(String bidPrice)throwsAuctionException

{

doubled =0.0;

try

{

d = Double.parseDouble(bidPrice);

}

catch(Exception e)

{

e.printStackTrace();//打印异常跟踪栈信息

thrownewAuctionException("竞拍价必须是数值,不能包含其他字符!");

}

if(initPrice > d)

{

thrownewAuctionException("竞拍价比起拍价低,不允许竞拍!");

}

initPrice = d;

}

publicstaticvoidmain(String[] args)

{

TestAuction ta =newTestAuction()

try

{

ta.bid("df");

}

catch(AuctionException ae)

{

//main方法再次捕捉到bid方法中的异常,并对该异常进行处理

System.out.println(ae.getMessage());

}

}

}

异常链:

//异常链:程序先捕获原始异常,然后抛出新的业务异常

//        新的异常中包括对客户的提示

packagebin;

publiccalSalthrowsSalException

{

try

{

...

}

catch(SQLException sqle)

{

thrownewSalException(sqle);

}

catch(Exception)

{

thrownewSalException(e);

}

}

classSalExceptionextendsException

{

publicSalException(){}

publicSalException(String msg)

{

super(msg);

}

//创建一个可以接受Throwable参数的构造器

publicSalException(Throwable t)

{

super(t);

}

}

java的异常跟踪栈

异常对象的printStackTrace方法用于打印异常的跟踪栈信息,根据printStackTrance方法的输入结果,我们可以找到异常的源头,并跟踪到异常一路触发的过程。

Java1009_疯狂java学习笔记1009---异常相关推荐

  1. 疯狂Java学习笔记(69)---------Lock

    疯狂Java学习笔记(69)---------Lock Java并发编程:Lock 在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java ...

  2. 疯狂java学习笔记

    <疯狂java>我觉得是一本很好的java基础书,里面解释的比较通俗易懂,不繁琐,深入程度刚刚好,比较适合我现阶段来学习,巩固java基础知识,所以将所做的笔记整理如下: 1.数据类型分类 ...

  3. 【原】Java学习笔记030 - 异常

    1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 /* ...

  4. java学习笔记(七)----异常

    异常 class Test { public int devide(int x,int y) throws Exception //throws EXception 抛出异常,如果感觉到这个程序可能出 ...

  5. 疯狂java学习笔记1023---线程的同步

    同步代码块: 文件并发被访问时容易造成异常. 同步代码块语法格式: synchronized(obj)   {     ...      //此处的代码就是同步代码块 } obj是同步监视器 线程开始 ...

  6. 疯狂java学习笔记之面向对象(二) - 成员变量与局部变量

    Java变量按其作用域可分为:成员变量和局部变量.注意:在Java中是没有全局变量这个概念的 一.成员变量: 成员变量是在类中定义的变量,具体可分为类变量与实例变量--有无static修饰 实例变量的 ...

  7. 疯狂java学习笔记之面向对象(三) - 方法所属性和值传递

    方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调 ...

  8. 疯狂Java学习笔记(72)-----------大话程序猿面试

    大话程序猿面试 10个我最喜欢问程序猿的面试问题 程序猿面试不全然指南 10个经典的C语言面试基础算法及代码 程序猿的10大成功面试技巧 程序猿选择公司的8个标准 编程开发 8个值得关注的PHP安全函 ...

  9. java1002java,疯狂java学习笔记1002---抽象类及接口

    抽象类: 1.抽象方法是只有方法签名,没有方法实现的方法. 2.抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法. 3.*抽象方法不能有 ...

最新文章

  1. Linux下安装jdk1.6和tomcat
  2. 每句话都可以品味一生
  3. JAVA编写的7个规范
  4. 使用Spring Security对RESTful服务进行身份验证
  5. docker操作之mysql容器
  6. mysql/sqlyog导入txt文件的方法
  7. 传统 Ajax 已死,Fetch 永生
  8. 锁屏界面_强迫症必爱!iPhone怎样隐藏锁屏界面的手电筒、相机图标?
  9. Eclipse的自动build选项,制造时别忘了选上~
  10. 《为自己工作——世界顶级设计师成功法则》—第1章1.2节有同情心
  11. 基于Matlab/Simulink的1/4车辆系统动力学模型的两种建模方法(动力学建模入门知识)
  12. 【代码质量】C/C++代码静态分析与常用分析软件工具
  13. iOS App集成Apple Pay 编程指南
  14. 自动向你的宝马车播放捷豹广告,这家公司要做高速公路上的“分众”
  15. oracle删库跑路,DBCA静默删库,悄悄跑路
  16. 面阵相机靶面详解and镜头选择andFA镜头视野计算
  17. 数据库连接技术 - 数据库连接池
  18. 要学习使用的安全工具
  19. 《区块链技术与应用》北大肖臻老师——课程笔记【4-5】
  20. 【IDM】IDM下载腾讯视频下载广告和分段的问题

热门文章

  1. 第十三章 大型网站典型故障分析案例(待续)
  2. Python面向对象中的“私有化”
  3. 一个很奇特的异常 tmpFile.renameTo(classFile) failed
  4. pat1070. Mooncake (25)
  5. html5 canvas简易时钟
  6. wikioi 1430 素数判定
  7. Linux glib命令行解析GOptionEntry使用
  8. Android Audio音频通路(七)
  9. Android Thread/Runnable/Handler用法
  10. C++ string与vectorfloat类型相互转换之stringstream