Java基础之Java异常处理机制
来源:互联网 发布:兴义农村淘宝招聘 编辑:程序博客网 时间:2024/05/20 23:38
Java异常处理
查看一下Java的API:
java.lang
Class Throwable
- java.lang.Object
- java.lang.Throwable
- All Implemented Interfaces:
- Serializable
- Direct Known Subclasses:
- Error, Exception
- 从这里不难看出
Exception:是处理编译级别错误; Error:是JVM处理级别错误
处理异常的几个关键字:
throw
throws
try {
//异常出现点
}catch(Exception e){ //细粒度的异常放在前面,粗粒度异常放在后面
//捕获遗产处理
}catch(Exception){
}finally{
//不管是否有异常,都执行。
}
Demo1
public class ExceptionDemo06{public static void main(String args[]){System.out.println("********** 计算开始 ***********") ;int i = 0 ;// 定义整型变量int j = 0 ;// 定义整型变量try{String str1 = args[0] ;// 接收第一个参数String str2 = args[1] ;// 接收第二个参数i = Integer.parseInt(str1) ;// 将第一个参数由字符串变为整型j = Integer.parseInt(str2) ;// 将第二个参数由字符串变为整型int temp = i / j ;// 此处产生了异常System.out.println("两个数字相除的结果:" + temp) ;System.out.println("----------------------------") ;}catch(ArithmeticException e){// 捕获算术异常// System.out.println("算术异常:" + e) ;e.printStackTrace() ;}catch(NumberFormatException e){// 捕获数字转换异常System.out.println("数字转换异常:" + e);}catch(ArrayIndexOutOfBoundsException e){// 捕获数组越界异常System.out.println("数组越界异常:" + e) ;}catch(Exception e){System.out.println("其他异常:" + e) ;}System.out.println("********** 计算结束 ***********") ;}};当所有的异常处理的方式是一样得时候就可以使用以上的形式,直接使用Exception进行捕获,当然,在一个
比较细致的开发中是不建议这样使用的,所有的异常最好分别捕获。
问题:
既然,捕获Exception是最方便的,那么直接捕获Throwable可以不可以?
首先,这样的做法是可以的,但是正常的开发人员是不会这样去做的,因为在程序的try中只会抛出Exception的子类部分内容,而Throwable中还有Error。
所以,最高就是Exception.
throws 与throw
throws : 在定义异常时,他会把异常抛出给调用的一方处理,自己不做处理;
class Math{<span style="white-space:pre"></span>public int div(int i,int j) throws Exception{<span style="white-space:pre"></span>// 定义除法操作,如果有异常,则交给被调用处处理<span style="white-space:pre"></span>int temp = i / j ;<span style="white-space:pre"></span>// 计算,但是此处有可能出现异常<span style="white-space:pre"></span>return temp ;<span style="white-space:pre"></span>}};public class ThrowsDemo01{<span style="white-space:pre"></span>public static void main(String args[]){<span style="white-space:pre"></span>Math m = new Math() ;<span style="white-space:pre"></span>// 实例化Math类对象<span style="white-space:pre"></span>try{<span style="white-space:pre"></span>System.out.println("除法操作:" + m.div(10,2)) ;<span style="white-space:pre"></span>}catch(Exception e){<span style="white-space:pre"></span>e.printStackTrace() ;<span style="white-space:pre"></span>// 打印异常<span style="white-space:pre"></span>}<span style="white-space:pre"></span>}};如果在主方法中不处理任何的异常了,而是交给最大的头,JAVA中的最大的头JVM处理,所以,如果在主方法中使用throws关键字,则表示一切的异常都交给JVM处理。
throw: 它是可以直接抛出一个异常。抛出的异常可以直接抛出异常的实例化对象即可。
public class ThrowDemo01{public static void main(String args[]){try{throw new Exception("自己抛着玩的。") ;// 抛出异常的实例化对象}catch(Exception e){System.out.println(e) ;}}};
class Math{public int div(int i,int j) throws Exception{// 定义除法操作,如果有异常,则交给被调用处处理System.out.println("***** 计算开始 *****") ;int temp = 0 ;// 定义局部变量try{temp = i / j ;// 计算,但是此处有可能出现异常}catch(Exception e){throw e ;}finally{// 不管是否有异常,都要执行统一出口System.out.println("***** 计算结束 *****") ;}return temp ;}};public class ThrowDemo02{public static void main(String args[]){Math m = new Math() ;try{System.out.println("除法操作:" + m.div(10,0)) ;}catch(Exception e){System.out.println("异常产生:" + e) ;}}};
Exception:存在他的构造方法,可以抛出他的实例化对象;
Exception 与 RuntimeException
我们来看看这段代码:
public class RuntimeExceptionDemo01{public static void main(String args[]){String str = "123" ;// 定义字符串,全部由数字组成int temp = Integer.parseInt(str) ; // 将字符串变为int类型System.out.println(temp * temp) ;// 计算乘方}};
转型的过程中,发生了异常抛出,当上层代码却没有try{ }cath(){ } 捕获异常?原因是NumberFormatException是RuntimeException的子类。
- java.lang.Object
- java.lang.Throwable
- java.lang.Exception
- java.lang.RuntimeException
- java.lang.IllegalArgumentException
- java.lang.NumberFormatException
public static int parseInt(String s) throws NumberFormatException
在JAVA异常处理机制中,用Exception必须使用try .....catch 进行处理。如果抛出的RuntimeException的类型,则不是必须使用trt......catch().., 他一旦发生异常,则由JVM处理;
自定义异常
class MyException extends Exception{// 自定义异常类,继承Exception类public MyException(String msg){super(msg) ;// 调用Exception类中有一个参数的构造方法,传递错误信息}};public class DefaultException{public static void main(String args[]){try{throw new MyException("自定义异常。") ; // 抛出异常}catch(Exception e){System.out.println(e) ;}}}
了解断言的作用
public class Test{public static void main(String args[]){int x[] = {1,2,3} ;// 定义数组,长度为3assert x.length==0 : "数组长度不为0" ;// 此处断言数组的长度为0}};
0 0
- Java基础之Java异常处理机制
- Java基础---异常处理机制
- java基础(四)之java浅析异常处理机制
- java之异常处理机制
- java之异常处理机制
- JAVA 基础之 异常机制
- 黑马程序员——JAVA基础之异常处理机制
- java基础之异常处理
- JAVA基础之异常处理
- java基础之异常处理
- JAVA基础之异常处理
- java基础之处理异常
- java基础之异常处理
- java基础之异常处理
- Java基础之异常处理
- Java基础之-异常处理
- 黑马程序员-【JAVA基础】-异常处理机制
- java学习之路----异常处理机制
- linux 下QT用ODBC连接SqlServer,以及汉字插入数据库乱码的问题,附可以直接用的库和配置文件
- Java高级个人笔记(RandomStringUtils工具类)
- 打包发布去除NSLog
- WAMP(Windows+Apache+Mysql+Php)环境搭建
- 八、Oracle事务
- Java基础之Java异常处理机制
- js将json字符串转换为json
- UITabBarController/分栏控制器/标签栏控制器
- linux系统如何查看系统性能
- 【转】RobotFramework+Selenium2Library环境安装
- 用户名 存在较多的双字节(中文、韩文等)字符时用nvarchar
- Axure中用中继器 实现 表格的动态页码
- 2012年5月SAT香港真题解析
- 【Android学习】JSON与XML综合六种解析方式-综合案例