您的位置:首页 > 编程语言 > Java开发

Java异常处理(2)

2016-04-27 19:45 537 查看
java.lang.Exception类是Java中所有异常的直接或间接父类。即Exception类是所有异常的根类。

  比如程序: 

public class ExceptionTest
{
public static void main(String[] args)
{
int a = 3;
int b = 0;
int c = a / b;
System.out.println(c);
}
}


 

  编译通过,执行时结果:

  Exception in thread "main" java.lang.ArithmeticException: / by zero

     at com.learnjava.exception.ExceptionTest.main(ExceptionTest.java:9)

  因为除数为0,所以引发了算数异常。

 

  比较常见的异常还有这种:空指针异常

  java.lang.NullPointerException是空指针异常,出现该异常的原因在于某个引用为null,但却调用了它的某个方法,这时就会出现该异常。

 


Java中的异常分为两大类:

  1.Checked Exception(非Runtime Exception

  2.Unchecked ExceptionRuntime Exception


运行时异常

  RuntimeException类是Exception类的子类,它叫做运行时异常,Java中的所有运行时异常都会直接或者间接地继承自RuntimeException类。

  Java中凡是继承自Exception,而不继承自RuntimeException类的异常都是非运行时异常


 


异常处理的一般结构

try
{
// 可能发生异常的代码
  // 如果发生了异常,那么异常之后的代码都不会被执行
}
catch (Exception e)
{
// 异常处理代码
}
finally
{
// 不管有没有发生异常,finally语句块都会被执行
}


  比如本文最开始的除法运算代码,加入异常处理之后: 

public class ExceptionTest
{
public static void main(String[] args)
{
int c = 0;
try
{
int a = 3;
int b = 0;

// 这块代码出现了异常
c = a / b;

// 那么异常之后的代码都不会被执行
System.out.println("Hello World");
}
catch (ArithmeticException e)
{
e.printStackTrace();
}
finally
{
//不管有没有发生异常,finally语句块都会被执行
System.out.println("Welcome");
}

System.out.println(c);
// 当b为0时,有异常,输出为c的初始值0
}
}


 

多个catch

  一个try后面可以跟多个catch,但不管多少个,最多只会有一个catch块被执行。


异常处理方法

  对于非运行时异常(checked exception),必须要对其进行处理,否则无法通过编译。

  处理方式有两种:

  1.使用try..catch..finally进行捕获;

  2.在产生异常的方法声明后面写上throws 某一个Exception类型,如throws Exception,将异常抛出到外面一层去。

  对非运行时异常的处理详见代码例子:

 

处理方式1:将异常捕获



public class ExceptionTest2
{
public void method() throws Exception // 将异常抛出,由调用这个方法的方法去处理这个异常,如果main方法也将异常抛出,则交给Java虚拟机来处理
{
System.out.println("Hello World");

// 抛出异常
throw new Exception();
}

public static void main(String[] args)
{
ExceptionTest2 test = new ExceptionTest2();

try
{
test.method();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
System.out.println("Welcome");
}

}

}


  处理方式2:将异常继续向外抛出



public class ExceptionTest2
{
public void method() throws Exception // 将异常抛出,由调用这个方法的方法去处理这个异常,如果main方法也将异常抛出,则交给Java虚拟机来处理
{
System.out.println("Hello World");

// 抛出异常
throw new Exception();
}

public static void main(String[] args) throws Exception // main方法选择将异常继续抛出
{
ExceptionTest2 test = new ExceptionTest2();

test.method(); // main方法需要对异常进行处理

// 执行结果:
// Hello World
// Exception in thread "main" java.lang.Exception
// at com.learnjava.exception.ExceptionTest2.method(ExceptionTest2.java:10)
// at com.learnjava.exception.ExceptionTest2.main(ExceptionTest2.java:17)
}

}


 

  对于运行时异常(runtime exception),可以对其进行处理,也可以不处理。推荐不对运行时异常进行处理。


 

http://www.cnblogs.com/mengdd/archive/2013/02/03/2890923.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: