JavaException_处理异常
2015-12-20 14:53
477 查看
/* 常用API: Throwable() Throwable(String message):异常详细信息为message String getMessage():获取Throwable对象描述的详细信息 异常日志断言调试 大纲: 处理异常 如果在一个java程序运行期间出现了一个错误这个错误有可能是文件找不到或者网络连接造成的也有可能是数组越界造成的 当程序出现错误时程序员应该: 1.返回安全状态让用户执行其他命令 2.允许用户保存所有操作结果并且终止程序 异常分类: Throwable |--Error |--Exception |--IOException |--RuntimeException 在java中所有继承Error或RuntimeException类的所有异常称为未检查异常其他所有的异常都是已检查异常 声明已检查异常 遇见如下情况应抛出异常 1.调用一个抛出已检查异常的方法如FileInputStream构造函数 2.程序运行过程中发生错误并且throw语句抛出一个已检查异常 3.程序出现错误例如Thread.sleep会抛出一个InterruptedException检查异常 4.java虚拟机和运行时库出现的内部异常 对于被人家使用的java方法根据异常规范应该在方法后抛出此异常 例如 interface Session { //TODO session工厂有可能找不到所以抛出自定义对象找不到异常让用户捕捉 Session getSessionFactory(SessionFactory sessionFactory) throws ObjectNotFoundException; } 如果一个方法抛出多个异常就应该用隔开 例如 interface Session { //TODO session工厂有可能找不到所以抛出自定义对象找不到异常让用户捕捉 //TODO 有可能Spring配置文件中的sessionFactory配置找不到 Session getSessionFactory(SessionFactory sessionFactory) throws ObjectNotFoundException, SpringException; } 如果在子类中覆盖了父类的一个方法子类方法中声明的已检查异常不能超过父类方法中声明的异常范围 创建异常类 public class FileFormatException extends IOException implements BaseUtils { private static final long serialVersionUID = -7487876785766997884L; public FileFormatException() { } public FileFormatException(String message) { info(message); } } 现在可以抛出自己定义的异常类型了 class ReadFile { private String read() throws FileFormatException { return ""; } } 捕获异常 使用异常机制 断言 日志 调试 */ package org.java8.testing; import org.eclipse.java8.tools.BaseUtils; import org.java8.exception.ObjectNotFoundException; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import static java.time.Clock.systemDefaultZone; /** * 异常测试 * * @author qinzhengying * @since 1.8 */ @SuppressWarnings("all") public class ExceptionTest implements BaseUtils { private static final long serialVersionUID = -57655144632372317L; //region countTime private static Long start = null; private static Long end = null; private static BaseUtils baseUtils = new ExceptionTest(); @BeforeClass public static void iniStart() { start = systemDefaultZone().millis(); } @AfterClass public static void countTime() { end = systemDefaultZone().millis(); Long count = end - start; if (count <= 1000) { info("毫秒", count); } else { info("秒", (count / 1000)); } } private static void info(String str, Long count) { baseUtils.info("程序运行时间为" + count + str); } //endregion //region 处理异常 class DoObject implements BaseUtils { public Integer checkObj(Object... object) { return (object == null) ? 1 : 0; } public Integer compareNumbers(Integer numA, Integer numB) throws ObjectNotFoundException { if (checkObj(numA, numB) == 1) { if (numA > numB) { return 1; } else { return 0; } } else { throw new ObjectNotFoundException("数字找不到"); } } } /** * 捕获异常测试(第一种处理异常方式-在方法内部抛出异常) */ @Test public void tryExceptionTest() { DoObject d = new DoObject(); try { info(d.compareNumbers(null, 2)); } catch (ObjectNotFoundException e) { // TODO 在抛出异常后程序总是要运行的 info(e); //e.printStackTrace(); } } /** * 捕获异常方式二,在方法上抛 */ @Test public void tryExceptionTest1() throws Exception { new DoObject().compareNumbers(null, null); } //endregion }
相关文章推荐
- JSP中内建exception对象时出现500错误的解决方法
- PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
- php中error与exception的区别及应用
- 是时候开始引入异常化编程了!
- fix java exception
- 启动hive命令报错 “Metastore contains multiple versions”
- Java常见异常(Runtime Exception )小结
- Oracle 中的exception——(Raise)
- 多线程InterruptedException
- ruby所有异常
- JAVA的MD5加密与解密
- JAVA的MD5加密与解密
- Unable to find 'com/sencha/gxt/ui/GXT.gwt.xml' ...
- Android带进度条文件上传
- HttpClient 3.1 文件上传
- Android app处理全局exception
- spring测试
- android全局处理非捕捉异常
- android读写sd卡文件
- Oracle学习笔记5