package testexcrpltiom;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import cn.zdsoft.test.Test2;
import myutils.MyUtils;
/**
* 测试异常
* @author Administrator
*
*/
public class TestException
{ Test test;
public static void main(String[] args)
{ //空指针异常
//Test.getName();
//算术异常
//System.out.println(1/0);
//下标越界异常
//int [] a={1,2,3};
//System.out.println(a[3]);
//类型转换异常
//Object obj=new TestException();
//String str=(String)obj;
String str="2013-11-22";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try
{ //放入可能有异常的代码 可以多条
sdf.parse(str);
}// eatch 可以有多个来定义不同类型的 异常
catch (ParseException e)
{
//对捕获到的异常进行什么样的处理
e.printStackTrace();
}//可以加可以不加 但是只能跟在try catch 后面 且只能有一个 作用不管有没有异常都要执行里面的代码
finally
{
}
}
}
package testexcrpltiom;
//自定义一个异常类 需要继承Exception 或者runtimeException
public class CousonException extends Exception
{
//无参构造器
public CousonException()
{//异常的提示语句
this("余额不足");
}
//有参构造器
public CousonException(String str)
{//调用了父类的有参构造器将提示传上去
super(str);
}
}
*创建一个运行时的异常 需要继承RuntimeException
*/
public class TestRuntimeException extends RuntimeException
{//定义一个无参构造器用来调用有参构造器来传递 提示
public TestRuntimeException()
{
this("你的钱不够啊");
}
public TestRuntimeException(String str)
{//将提示内容传递给父类的有参构造器
super(str);
}
}
package testexcrpltiom;
/**
*
* 将异常添加到需要抛出异常的地方
*
*/
public class Mai
{//在需要抛出异常的方法中要先声明要抛出的异常类型
public void mai(double m)throws CousonException
{
if(m-90<0)
{//在实际要抛出异常的地方在throw 进行异常的抛出
throw new CousonException();
}
}
}
Java异常学习心得
Java 异常学习心得
本文重在 Java 中异常机制的一些概念。写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这片文章迅速回忆起来。
1. 异常机制
1.1
异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
1.2
传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回 -1 代表出现异常,但是如果函数确实要返回 -1 这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。
1.3 异常处理的流程
1.3.1 遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象
1.3.2 调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码
2 异常的分类
2.1 异常的分类
2.1.1
异常的继承结构:基类为 Throwable , Error 和 Exception 继承 Throwable , RuntimeException 和 IOException 等继承 Exception ,具体的 RuntimeException 继承 RuntimeException 。
2.1.2
Error 和 RuntimeException 及其子类成为未检查异常( unchecked ),其它异常成为已检查异常( checked )。
2.2 每个类型的异常的特点
2.2.1 Error 体系
Error 类体系描述了 Java 运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注 Exception 体系。
2.2.2 Exception 体系
Exception 体系包括 RuntimeException 体系和其他非 RuntimeException 的体系
2.2.2.1 RuntimeException
RuntimeException 体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理 RuntimeException 的原则是:如果出现 RuntimeException ,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。
2.2.2.2 其他( IOException 等等)
这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。
2.3 与 C++ 异常分类的不同
2.3.1
其实, Java 中 RuntimeException 这个类名起的并不恰当,因为任何异常都是运行时出现的。(在编译时出现的错误并不是异常,换句话说,异常就是为了解决程序运行时出现的的错误)。
2.3.2
C++ 中 logic_error 与 Java 中的 RuntimeException 是等价的,而 runtime_error 与 Java 中非 RuntimeException 类型的异常是等价的。
3 异常的使用方法
3.1 声明方法抛出异常
3.1.1 语法: throws (略)
3.1.2 为什么要声明方法抛出异常?
方法是否抛出异常与方法返回值的类型一样重要。假设方法抛出异常确没有声明该方法将抛出异常,那么客户程序员可以调用这个方法而且不用编