Java中的常见异常
来源:互联网 发布:python mysql 批处理 编辑:程序博客网 时间:2024/05/16 09:43
Java提供了异常处理机制来帮助程序员检查可能出现的错误,保证了程序的可读性和可维护性。下面将介绍Java中的常见异常和自定义异常。
Java中的常见异常
异常是一个在程序执行期间发生的事件,它中断了正在执行的程序的正常指令流。在Java中,如果某个方法抛出异常,既可以在当前方法中进行捕捉,然后处理该异常,也可以将异常向上抛出,由方法调用者来处理。下面来看个例子:
public class Test { public static void main(String[] args) { //主函数 String str="Z.y"; //定义一个字符串变量 System.out.print(str+"年龄是:"); //输出字符串变量 int age=Integer.parseInt("22L"); //数值型字符串转换成整型 /*Integer类的parseInt()方法可以将字符串转换为整型,但是若字符串不是数值型 * 则会报错!! */ System.out.println(age); //输出age }}
由于22L并非数值型的字符串,所以系统会抛出错误,跑出了如下的错误:
Z.y年龄是:Exception in thread "main" java.lang.NumberFormatException: For input string: "22L" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.parseInt(Integer.java:615) at Test.main(Test.java:6)
NumberFormatException就是我们经常会遇见的异常之一,Z.y年龄是已经输出,可知第一个输出之前都正确。第一个输出到第二个输出之间发生了错误。因此第二次输出中的age并没有输出。对与这类错误,我们可以进行捕捉异常,异常的捕捉通常以try…catch…finally….语句块构成。其中try…语句块是可能发生异常的Java语句;catch…语句块在try语句块之后,作用是激发被捕获的异常;finally语句块是异常处理结构的最后执行部分,无论try语句块中的代码如何退出,都将执行语句块finally。对上面的异常进行捕获:
public class Test { //定义Test类 public static void main(String[] args) { //主函数 try{ //可能发生异常的代码块 String str="Z.y"; //定义字符串变量 System.out.print(str+"年龄是:"); //输出字符串 int age=Integer.parseInt("22L"); //数值型字符串转换成整型 /*Integer类的parseInt()方法可以将字符串转换为整型,但是若字符串不是数值型 * 则会报错!! */ System.out.println(age); //输出整型变量 }catch(Exception e){ //激发异常 e.printStackTrace(); //异常性质 } System.out.println("Program Over"); }}
运行结果如下所示:
Z.y年龄是:java.lang.NumberFormatException: For input string: "22L" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.parseInt(Integer.java:615) at Test.main(Test.java:7)Program Over
从输出结果来看,虽然在输出Program Over之前已经出现了异常,但是并不影响Program Over的输出,没有因为异常而终止程序。当try语句块里语句发生异常,就会转到catch语句;执行完catch后,将继续执行catch后的代码,这就是捕获异常的好处。完整的异常处理语句一定要包含finally语句,无论程序中是否会有异常发生, 亦或者代码块try-catch有无顺利执行完毕,都会执行finally语句块。除了以下四种情况:
(1)finally语句块发生异常;
(2)前面代码使用了System.exit()退出程序;
(3)程序所在的线程死亡;
(4)关闭CPU;
Java中一些常见的异常,比如ArithmeticException、NumberFormatException等等,具体的可以参照Java常见异常,最详细的资料需要参考JDK的API文档,具体的不在此赘述。
自定义异常类
下面我们来谈一谈Java中自定义异常的使用。使用Java内置的异常类可以描述在编程时的大部分异常情况。我们还可以继承异常类来定义自己的异常类。自定义异常类的步骤一般是:
(1)创建自己的异常类;
(2)在方法中通过throw关键字抛出异常对象;
(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理。否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常;
(4)再出现异常的地方捕获并处理异常;
看一下具体的代码实现:
一、首先我们定义自己的异常类
public class MyException extends Exception { //创建自定义异常,继承Exception类 /** * 自定义异常类 */ private static final long serialVersionUID = 6881659454297603792L;public MyException(String ErrorMessage){ //构造方法 super(ErrorMessage); //父类构造方法}}
二、字符串ErrorMessage是要输出的错误信息。下面抛出自定义的异常:
public class Tran { //创建类 static float avg(int number1,int number2)throws MyException{ //定义方法拋出异常 if(number1<0||number2<0){ //判断方法中参数是否满足指定条件 throw new MyException("不可以使用负数"); //错误信息 } if(number1>100||number2>100){ //判断方法中参数是否满足指定条件 throw new MyException("数值太大了"); //错误信息 } return(number1+number2)/2; //返回两数的平均值 } public static void main(String[] args) { //主方法 try{ //try代码块处理可能出现的异常 float result=avg(45, 120); //调用方法 System.out.println(result); //输出结果 }catch(MyException e){ System.out.println(e); //输出异常信息 } }}
运行结果如下:
MyException: 数值太大了
下面再看一个完整的例子:
package Exception2; //定义Exception2包public class MyException extends Exception{ //自定义异常类,继承Exception /** * 自定义异常类 */ private static final long serialVersionUID = 1998797862547839622L; String message; //定义字符串 public MyException(String ErrorMessage){ //构造函数 message=ErrorMessage; //将错误的信息赋值给message } public String getMessage(){ //重写getMessage方法 return message; //返回错误的信息 }}package Exception2; //定义Exception2包public class Captor { //Captor类 static float quotient(int x,int y)throws MyException{ //quotient方法抛出异常 if(y<0){ //异常情况 throw new MyException("除数不能是负数"); //错误信息 } return x/y; //返回x/y } public static void main(String[] args) { //主函数 try{ //可能出现异常的代码块 float result=quotient(4, -1); System.out.println(result); }catch (MyException e){ //发生自定义异常 System.out.println(e.getMessage()); //错误信息 }catch (ArithmeticException e){ //发生算术异常 System.out.println("除数不能为零"); //错误信息 }catch (Exception e){ //其他异常 System.out.println("程序发生了其他异常"); //错误信息 } }}
运行结果如下:
除数不能是负数
- java中的常见异常
- Java中的常见异常
- Java中的常见异常
- Java中的常见异常
- java编程中的常见异常
- java中的常见异常总结
- 【总结】java编程中的常见异常
- java中的常见异常以及处理
- 今天瞅瞅Java中的常见异常
- java中的常见异常及错误和处理方法
- JAVA常见异常整理
- JAVA常见异常
- java常见异常详解
- 常见java异常
- JAVA常见异常原因
- JAVA常见异常
- 常见java异常收藏
- java 常见异常
- Mybatis入门简版(二)
- 晶振不集成到IC内部,为什么?
- 5.1,从键盘任意输入一个实数,不使用计算绝对值函数编程计算并输出该实数的绝对值。
- 开发者们,2017年你们过得好吗?
- 企业级服务器应用、RAID、Cache和Buffer的区别、程序、进程、守护进程的区别
- Java中的常见异常
- web前端开发的各种坐标系,尺寸
- 【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结
- Java基础知识04-面向对象
- linux挂载命令
- Libevent源码分析
- 指针
- mysql比对两个数据库表结构的方法
- 关于结构体,联合体,位字段的大小的