java异常处理
来源:互联网 发布:java 线程中断机制 编辑:程序博客网 时间:2024/06/07 04:58
一、java错误包含:
1、编译错误:编译器(把java代码编译成class文件)能识别的错误,必须执行前修改。
2、运行时的错误(简称异常):运行时才会报错。报错可以在consale通过行号查看异常的代码
二、异常的原理:
1、java代码在JVM中运行,如果发生了异常,JVM抛出异常。
2、JVM如果能找到异常处理程序(能处理异常里面的错误程序),来处理该异常。Java Runtime(java运行时),让Java程序继续执行。
3、JVM如果不能找到异常处理程序,整个Java程序被异常终止。
三、java内置异常
1、java自带一些异常类
2、Throwable是java所有的异常基类(父类)
3、异常的分类
1)Exception 与程序相关的错误(可以处理的错误),分为:
a.检查到的异常: 编译错误,编译器会强制程序员修改。
b.未检查到的异常:编译错误,编译器会强制程序员修改。
2)Error 与运行环境相关的错误(无法补救的错误),比如内存不足,跟代码无关
4、空指针异常 NullPointerException引用了没有地址的对象
int[] numbers=null;//没有实例化,没有分配内存System.out.println(numbers.length);四、实现异常处理:优点是让异常后面的代码可以继续执行
1、使用try...catch处理异常(catch用来捕获异常):
public static void main(String[] args) {int i=10;int j=0;try{//写可能会发生异常的代码System.out.println(i/j);}catch(ArithmeticException e)//小括号里面必须写参数,参数写认为可能会发生异常的类型{//如果发生了ArithmeticException异常,就执行catch//如果没有发生异常 或者发生的是其他异常,catch语句就不会执行System.out.println("因为除数为0,商以0来计算");}}1)也可以同时写多个catch
public static void main(String[] args) {int i=10;int j=0;try{System.out.println(i/j);}catch(NullPointerException e){System.out.println("空指针");} catch(ArithmeticException e){System.out.println("因为除数为0,商以0来计算");}2)如果多个catch语句的异常类里面有继承关系时,要注意catch顺序:
先写 catch 子类异常,再写 catch 父类异常
public static void main(String[] args) {int i=10;int j=0;try{System.out.println(i/j);}catch(ArithmeticException e){System.out.println("因为除数为0,商以0来计算");} catch(Exception e){System.out.println("因为除数为0,商以0来计算");}3)多个 catch 可以合并(但是catch里面不能存在继承关系)
public static void main(String[] args) {int i=10; int j=0;try{//写可能会发生异常的代码System.out.println(i/j);}catch(ArithmeticException <span style="color:#FF0000;">|</span> NullPointerException e){System.out.println("因为除数为0,商以0来计算");}2、throw语句:显示抛出异常,转移异常
语法:throw 异常类 (Throwable类子类)
//抛出异常方法public void throwException(){throw new NullPointerException();//在正常代码中抛出异常,比如验证的错误}
//抛出异常后可以写try...catch处理,在调用时进行实现public class ExceptionDemo {public static void main(String[] args) {int i=10;int j=0;ExceptionDemo e=new ExceptionDemo();e.throwException();//方法里面因为有异常抛出,所以可以在这里进行异常处理。 try {System.out.println(i/j); }catch(ArithmeticException h) { throw new NullPointerException(); }}}
3、throws关键字:只能写在方法签名中,说明方法里面发生的异常,用于抛出方法里面的异常(抛出的异常与方法里面的异常相同)
在调用方法的地方,需要进行异常处理
//throws的用法public void testThrows throws <span style="color:#FF0000;">Exception()</span>{throw new <span style="color:#FF0000;">Exception()</span>;//testThrows方法里面发生了检查到的异常}
ExecptionDemo e=new ExecptionDemo();e.testThrows();//抛出异常后在调用方法的地方,进行异常处理
4、finally 语句:无论是否发生异常都会执行的代码
public static void main(String[] args) {int i=10;int j=0; try {System.out.println(i/j); }catch(NullPointerException h) { throw new NullPointerException(); }<span style="color:#FF0000;">finally</span>{ //<span style="color:#FF0000;">收尾工作,比如关闭资源</span> System.out.println("无论是否发生异常,都会执行的代码"); }}5、try-with-resources 执行完try语句块后,自动关闭资源
try(Scanner sc1=new Scanner(System.in)) //执行完try语句块后,自动关闭Scanner { //代码 }catch(Exception a){ //代码 }6、自定义异常,步骤如下:
1)创建异常类:定义一个类 继承 Throwable类或者其子类
public class ageException extends Exception {//一般重写构造方法,在抛出异常(实例化new)时执行代码public ageException(){System.out.println("自定义ageException年龄异常");}}2)使用自定义异常
public class TestAgeException {public static void main(String[] args) { int age=-1; try{ if(age<0 || age>200) {//调用构造方法,输出:自定义ageException年龄异常 throw new ageException(); } }catch(ageException e) { e.printStackTrace();//打印堆栈信息(输出异常类的全路径,以及发生异常的代码的位置) }}}输出内容:
自定义ageException年龄异常<span style="color:#FF0000;">cn.exception.study.ageExceptionat cn.exception.study.TestAgeException.main(TestAgeException.java:11)</span>7、断言:
1)用法:用于软件测试阶段;判断某个表达式,是否成立,若不成立抛出异常(AssertionError),确认程序错误的原因和错误的源。
2)实现断言:格式为assert 需要判断的表达式。
public static void main(String[] args) {int age=0;System.out.println("请输入年龄: ");Scanner san=new Scanner(System.in);age=san.nextInt();<span style="color:#FF0000;">assert 1==2;</span><span style="color:#FF0000;">assert(age>0 && age<100);</span>}3)打开Eclipse断言的功能:添加vm参数-ea,运行后就可以看到对应断言表达式是否成立。
a. 右键运行的代码,在弹出的菜单中选择Run AS--Run Configurations...,弹出Run Configurations窗口
b. 在Run Configurations窗口左侧选择运行的类,在右侧窗口的Arguments标签中VM arguments中输入-ea,点击Run按钮
运行结果:
(请输入年龄:
1
Exception in thread "main" java.lang.AssertionError
at cn.exception.study.Testassert.main(Testassert.java:12))
- 【java】java异常处理
- java异常和异常处理
- Java 异常及异常处理
- java异常与异常处理
- Java异常处理-----自定义异常
- Java异常与异常处理
- java异常及异常处理
- Java 异常与异常处理
- Java异常与异常处理
- Java异常及异常处理
- Java异常处理--自定义异常
- JAVA异常之异常处理
- Java异常处理-----自行处理
- Java异常处理-----抛出处理
- Java异常处理-----抛出处理
- java异常处理
- java 异常处理分析
- java异常处理
- java实现附件预览(openoffice+PDF.js)
- python学习——错误处理
- 优化SQL查询:如何写出高性能SQL语句
- Andorid基础--------数据处理
- Beyond Compare进行二进制比较的方法
- java异常处理
- Runtime Permissions处理、servie+AsyncQueryHandler+AsyncTask结合用法(加载联系人)
- Android中拍照和从相册选择图片,并剪裁(二)
- JS中Null与Undefined的区别
- css随笔
- Android学习规划指南
- [图像] 二值图像的位置、朝向与投影
- HDU3681 Prison Break(DP)
- python 进阶