JAVA基础 之 异常
来源:互联网 发布:淘宝自动回复优美语句 编辑:程序博客网 时间:2024/04/30 01:57
讲述:
1.五个关键字
1.try:尝试捕获异常,具体的下面讲述
2.catch:当try捕获到异常了,系统会自动生成一个异常信息,这个异常信息就给catch,形象的说我抓住了这个异常。
3.throw:主动的抛出一个异常
情况一:我发现了一个我处理不了的 并且会导致我程序不正常运行的错误,于是我将这个异常抛出去了。(抛给谁了?这个视情况而定)
情况二:我发现了一个不太对的地方会影响我今后的程序运行,为了避免更大的错误产生,我先主动的提出(抛出)这个“问题”
4.throws:方法声明 会抛出这样的异常,用于自定义异常。(初学者 可以暂时绕过)
5.finally:
无论是否发生异常,程序必须执行的代码块。例如:经典的关闭数据库连接例子。多用于执行清理工作。
finally看似很“权威”(必须执行),但是System.exit(1);会让它丧失这个权威性。
2.try+catch
1.联合出击保证程序正常运行。
2.理解:
我们希望写出这样的程序:if(程序正常){我的操作} else{处理不正常}
但是这个程序正常太泛泛了 我们没办法定义它或者枚举它,于是我们用try去监视我们的操作是否正常,
当他不正常的时候,我们抓住这个不正常的情况 处理它。
try-catch 就是在做这么一件有意义的事。
3.注意(新手看不懂可以先绕过):
1.catch可以有多个,谁能抓住谁抓,抓不住就让别人去抓,但是这个是需要层级的(范围小的先catch)
2.try块中的变量只能在try中使用。
3.java7中提供了一次catch多个异常的方式,每个异常使用|分割(注意只有在jdk7下才能使用)
4.java7下的AutoCloseable接口可以使得程序简化有兴趣可自己百度或者查看java api
4.Exception的几个方法(见例子)
5.自定义一个异常:
1.上文说过不肯能枚举所有的异常情况,即便枚举了,但是你也不能冲破认知差异性。(在大象的世界里人类就是异类)
2.定义一个拥有自己业务逻辑的异常类
3.实现方式:继承Exception 或者他的子类
- package com.cxy.exception;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.util.List;
- /**
- * @author cxy
- */
- public class ExceptionTest
- {
- public static void main(String[] args)
- {
- try
- {
- List l=null;
- l.get(0);
- }catch(NullPointerException|ArrayIndexOutOfBoundsException e) //注意:这里只能java7用,如果你不是java7请去掉一个异常
- {
- System.out.println("我抓住了一个异常");
- System.out.println("异常信息:"+e.getMessage());
- e.printStackTrace(); //打印异常的跟踪栈信息
- }
- System.out.println("=======================");
- /* throw
- * 用途:
- * 1.抛出一个我处理不了的异常
- * 2.提前发现问题避免更大的问题发生(实践中得来)
- * 一个人要盖别墅,后经发现他选址在太平洋中间,于是我抛出了这个问题,避免后面砂石料,工程设计都做好了 发现根本没法建。
- * 效果:导致程序或者方法终止(如果不catch这个异常的话)
- * */
- try
- {
- throw new Exception("没事抛着玩"); //主动抛出一个异常
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- System.out.println("=======================");
- //throws的用法
- try
- {
- test();
- } catch (NullPointerException e)
- {
- System.out.println("catch住了test方法抛出的异常");
- }
- System.out.println("=======================");
- //finally用法
- FileInputStream fis=null; //这是一个输入流 相关的知识请见后续文章
- try
- {
- /* 这里会出现找不到cxy.txt这个文件错误
- * 这里有个问题 无论异常产生与否 我们都需要将fis关闭
- * java7之前 我们都是使用finally来处理这类的问题,无论是否发生异常都要执行的操作
- * java7开始,AutoCloseable接口可以不必使用finally来处理这个问题(如果有时间我会写一篇相关的文章)
- */
- fis = new FileInputStream("cxy.txt");
- } catch (FileNotFoundException e1)
- {
- e1.printStackTrace();
- }finally
- {
- try
- {
- fis.close();
- } catch (Exception e)
- {
- //呵呵 包括这里都套着一个try,因为 程序怕遇到fis是null 或者 io异常
- e.printStackTrace();
- }
- }
- System.out.println("=======================");
- //自定义异常类
- try
- {
- throw new MyException("中文异常信息");
- } catch (MyException e)
- {
- e.printChineseMsg();
- }
- System.out.println("虽然有很多异常,但是我正常完结了~");
- }
- /** 提前声明 我这个方法可能会抛出什么样的异常,请调用者自己处理
- */
- public static void test() throws NullPointerException
- {
- throw new NullPointerException(); //抛出一个null异常
- }
- }
- //自己定义的异常
- class MyException extends Exception
- {
- public MyException(){}
- public MyException(String msg)
- {
- super(msg);
- //当然 这里你可以加一些日志的操作
- }
- /**
- * 我们期望的能看懂的中文异常信息
- */
- public void printChineseMsg()
- {
- System.out.println("异常信息:"+this.getMessage());
- }
- }
- java基础之异常
- java基础之异常
- JAVA基础 之 异常
- java基础之 异常
- Java基础之异常
- java基础之异常
- java基础之异常
- java基础之异常
- java基础之异常
- Java基础之异常
- JAVA基础之异常
- java基础之异常
- Java基础之异常
- java基础之异常
- java基础之异常
- Java基础之异常
- java基础之异常。
- java基础之异常
- 8086 CPU 寄存器简介
- FreeBSD修改可执行文件路径和库文件路径
- 发布应用“猜手势(Guess Gesture)”,欢迎拍砖^_^
- MATLAB基础7-MATLAB绘图功能
- 19个三维GIS软件对比
- JAVA基础 之 异常
- direct-io
- Linux Posix Timer使用
- DeskBand实现之——对象介绍
- openfire 3.8.0 安装部署到本地-有图有真相
- Java程序员应该了解的10个面向对象设计原则
- Google Chrome 下载&编译
- 跟踪源码思路小结
- (转)通知栏通知处理:NotificationManager和Notification的使用总结