java 基础

来源:互联网 发布:孤岛惊魂4优化怎么样 编辑:程序博客网 时间:2024/06/06 08:53

1 异常

       异常处理机制:当程序出现意外情形时,系统自动生成一个Exception对象来通知程序,从而将业务处理和异常处理代码相分离

       好处: 使业务代码和异常处理代码相分离,提高程序健壮性。

      使用:

try {//  发生异常代码} catch (Exception e) {// 异常处理代码}finally {// 回收在try打开的资源}

      如果try块的业务逻辑代码出现异常,系统生产一个异常对象,对象被提交到Java运行时环境,这个过程被称为抛出异常。当运行时环境收到异常对象时,会寻找能处理异常对象的catch块,如果找到合适的catch快,就把异常对象交给catch块处理,这个过程称为捕获异常, 如果运行时环境找不到捕获异常的catch块,则运行环境终止,程序退出。

      当运行时环境接收到异常对象时,会依次判断异常对象是否是catch后面异常类或其子类,如果时,则Java运行时环境调用该catch块处理该异常,当程序进入catch块时,系统生成的异常对象将传递给catch后面的形参,从而允许catch块通过该对象获取异常详细信息。

      有时候程序在try块里打开了一些物理资源(数据库连接,网络连接,磁盘文件),这些资源必须显示的回收,为了保证一定能回收try块中打开的资源,异常处理机制提供了finally块,finally块总会被执行。

      语法中只有try块是必须的,catch和finally至少出现其中之一

try {//  发生异常代码} catch (Exception e) {// 异常处理代码}
       
try {//  发生异常代码} finally {// 回收在try打开的资源}


       catch或finally有return,throw的情

       

try {fis = new FileInputStream("a.txt");} catch (IOException ioe) {System.out.println(ioe.getMessage());// finally 定义了return ,下面的return失去作用return; // 强制方法返回 //System.exit(1); //强制退出虚拟机} finally { // 回收磁盘资源if (fis != null){try {fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return; }
           当Java程序执行try,catch块,遇到return, throw 语句时,这两个语句都会导致这个方法立即结束,但系统不会立即执行这个语句,而是寻找异常处理流中是否有finally块,如果没有则执行return和throw,方法终止。如果有finally块,执行finally块,当finally块执行完后,程序会再次跳转到try,catch块的return, throw 语句,如果finally块也有

方法终止语句return, throw 语句,则程序已经终止。不会跳转到try,catch块的return, throw 语句

            Java异常分为checked异常和runtime异常。

             Java认为checked异常都是可以在编译阶段被处理的异常,所以它强制程序处理所有的checked异常,而runtime异常无需处理,

            checked异常有两种处理方式:1当前方法知道如处理该异常,用try...catch来捕获处理该异常,2不知道如何处理使用throws抛出异常,抛出异常时有一个限制,方法重写时,子类方法中申明抛出的异常型应该是父类方法申明抛出的异常类型的子类或相同,子类方法中不允许比父类方法申明抛出更多的异常

             runtime 异常无需显示的抛出异常,如果要捕获,可以用try....catch捕获

     

              使用throw抛出异常: 当程序出现错误时,系统自动抛出异常,除此之外java允许程序自行抛出异常,如果抛出的异常是checked的,要么显示捕获处理该异常,要么throws抛出异常。如果抛出的是runtime异常,无需显示的抛出异常,如果要捕获,可以用try....catch捕获

              

public void a(int a){ //显示处理异常if (a < 0){try {throw new Exception("a < 0");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void b(int a) throws Exception{ //抛出异常if (a < 0){throw new Exception("a < 0");}}public void c(int a) { //不用处理if (a < 0){throw new RuntimeException("a < 0");}}
            
               异常处理规则:

               1 不要过度依赖异常:把异常和普通的错误混淆,不再编写任何错误处理代码,用抛出异常来代替,对于完全已知的错误,应该编写处理这种错误的代码,只对外部,不确定和预知的运行错误时才使用异常,异常机制的效率比正常流程控制效率差,

             不要用以下程序便利数组

String[] a = new String[]{"a","b","c"};try {int i = 0;while (true){System.out.println(a[i++]);}} catch (ArrayIndexOutOfBoundsException e) {// TODO: handle exception}
              2 不要使try块太庞大

              3 避免使用catchAll

              4 不要忽略捕获的异常,至少可以打印异常信息

原创粉丝点击