异常处理

java.lang.throwable包下处理

分为两类:Error:错误,程序中不处理

                 Exceptio(java.lang.Exception):异常,编译时异常( 非RunTImeException):执行javac.exe  Eclipse会显示出来

                                                                                    运行时异常(RunTImeException):执行java.exe异常 Eclipse不会显示出来

常见的异常形式:

运行时异常

1.数组下标越界;输入的数据超出或者不在数组空间。如,System.out.println(i[-1]);

public class TestError {

       publicstatic void main(String[] args) {

              //java.lang.StackOverflowError超出范围

              //main(args);

              //java.lang.OutOfMemoryError

              byte[] b = new byte[1024*1024*600];

       }

}

2.算术异常ArithmeticException:不符合计算规则。如,分母为零。

3.空指针异常NullPointerException:对空的对象使用类的方法。

      注意在调用某个对象时它可能存在空的状态。

4.类型转换异常:ClassCastException:不符合类型转换的标准。String str=(String new Date());

非运行时异常

@Test
 public void testInputStream() {
  FileInputStream fi= null;
  try {
   fi = new FileInputStream(new File("d:\\io练习\\myname"));
   int b;
   while ((b = fi.read()) != -1) {
    System.out.print((char) b);
   }
  } catch (FileNotFoundException e1) {
   System.out.println(“找不到文件");
  } catch (IOException e1) {
   System.out.println(e1.getMessage());
  } finally {
   try {
    fi.close();
   } catch (IOException e) {
     e.printStackTrace();
   }
  }
 }

异常处理的方法:

捕获异常:try catch语句

抛出异常throw 语句

1.try {

        // 可能发生的异常    

    // 异常之后的代码都不会被执行
     } catch (Exception e1) {

     e.printStackTrace(); // 异常处理代码
     } catch(Exception e2){

     e.printStackTrace();//异常处理代码

     }

     ........

    finally {

      // 不管有没有发生异常,finally语句块都会被执行
    }

一个try可以对应多个catch。

2.throw语句

在可能异常的方法后面写上throws 某一个Exception类型,如throws Exception,把异常抛出。

a.try语句中的内容相当于局部变量,只在try代码块内有效,

b.catch代码块中放对异常事故的处理方法,

 >getMessage();  printStackTrace();

c.处理完之后执行finall语句中的语句。

d.try-catch是可以嵌套的

catch中多个异常类型是"并列"关系,位置随意。

catch中多个异常类型是"包含"关系,要将子类放在父类的前面处理。否则出错。






你可能感兴趣的:(异常处理)