您的位置:首页 > 编程语言 > Java开发

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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Exception