package lianxi;
import javax.swing.*;
public class bo {
public static void main(String[] args) {
int i=1, j=0, k;
k=i/j;
try
{
k = i/j; // Causes division-by-zero exception
//throw new Exception("Hello.Exception!");
}
catch ( ArithmeticException e)
{
System.out.println("被0除. "+ e.getMessage());
}
catch (Exception e)
{
if (e instanceof ArithmeticException)
System.out.println("被0除");
else
{
System.out.println(e.getMessage());
}
}
finally
{
JOptionPane.showConfirmDialog(null,"OK");
}
}
}
运行结果:
运行结果分析:
代码报错;显示除零错误;
多层的异常捕获:
代码部分:
package lianxi;
import javax.swing.*;
public class bo {
public static void main(String[] args) {
try
{
try
{
throw new ArrayIndexOutOfBoundsException();
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
}
throw new ArithmeticException();
}
catch(ArithmeticException e)
{
System.out.println("发生ArithmeticException");
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
}
}
}
运行结果:
运行结果分析:
捕获了内层的try catch
package lianxi;
import javax.swing.*;
public class bo {
public static void main(String[] args) {
try
{
try
{
throw new ArrayIndexOutOfBoundsException();
}
catch(ArithmeticException e)
{
System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
}
throw new ArithmeticException();
}
catch(ArithmeticException e) {
System.out.println("发生ArithmeticException");
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
}
}
}
运行结果:
运行结果分析:
捕获了外层的try catch
动手动脑代码练习
代码部分:
package lianxi;
import javax.swing.*;
public class bo {
public static void main(String[] args) {
int result;
try
{
System.out.println("in Level 1");
try
{
System.out.println("in Level 2");
// result=100/0; //Level 2
try
{
System.out.println("in Level 3");
result=100/0; //Level 3
}
catch (Exception e)
{
System.out.println("Level 3:" + e.getClass().toString());
}
finally
{
System.out.println("In Level 3 finally");
}
// result=100/0; //Level 2
}
catch (Exception e)
{
System.out.println("Level 2:" + e.getClass().toString());
}
finally
{
System.out.println("In Level 2 finally");
}
// result = 100 / 0; //level 1
}
catch (Exception e)
{
System.out.println("Level 1:" + e.getClass().toString());
}
finally
{
. System.out.println("In Level 1 finally");
}
}
}
运行结果:
今天练习异常处理
下面是代码部分:
package lianxi;
import javax.swing.*;
public class bo {
public static void main(String[] args) {
try
{
System.out.println("in main");
throw new Exception("Exception is thrown in main");
//System.exit(0);
}
catch(Exception e)
{
System.out.println(e.getMessage());
System.exit(0);
}
finally
{
System.out.println("in finally");
}
}
}
运行结果:
跟踪异常传播:
下面是代码部分:
package lianxi;
import javax.swing.*;
public class bo {
public static void main(String[] args) {
try
{
method1();
}
catch ( Exception e )
{
System.err.println( e.getMessage() + "
" );
e.printStackTrace();
}
}
public static void method1() throws Exception
{
method2();
}
public static void method2() throws Exception
{
method3();
}
public static void method3() throws Exception
{
throw new Exception( "Exception thrown in method3" );
}
}
运行结果:
运行结果分析
代码报错
抛出多个受控异常的方法:
代码部分:
package lianxi;
import java.io.*;
public class bo
{
public static void main( String args[] )
{
try
{
throwsTest();
}
catch(IOException e)
{
System.out.println("捕捉异常");
}
}
private static void throwsTest() throws ArithmeticException,IOException
{
System.out.println("这只是一个测试");
// 程序处理过程假设发生异常
throw new IOException();
//throw new ArithmeticException();
}
}
运行结果:
运行结果分析:
成功抛出异常并捕捉异常;
子类抛出受控异常的限制:
代码部分:
import java.io.*;
public class OverrideThrows
{
public void test()throws IOException
{
FileInputStream fis = new FileInputStream("a.txt");
}
}
class Sub extends OverrideThrows
{
//如果test方法声明抛出了比父类方法更大的异常,比如Exception
//则代码将无法编译……
public void test() throws FileNotFoundException
{
//...
}
}
异常处理连:
代码部分:
/**
* 自定义的异常类
* @author JinXuLiang
*
*/
class MyException extends Exception
{
public MyException(String Message)
{
super(Message);
}
public MyException(String message, Throwable cause)
{
super(message, cause);
}
public MyException( Throwable cause)
{
super(cause);
}
}
public class ExceptionLinkInRealWorld
{
public static void main( String args[] )
{
try
{
throwExceptionMethod(); //有可能抛出异常的方法调用
}
catch ( MyException e )
{
System.err.println( e.getMessage() );
System.err.println(e.getCause().getMessage());
}
catch ( Exception e )
{
System.err.println( "Exception handled in main" );
}
doesNotThrowException(); //不抛出异常的方法调用
}
public static void throwExceptionMethod() throws MyException
{
try
{
System.out.println( "Method throwException" );
throw new Exception("系统运行时引发的特定的异常"); // 产生了一个特定的异常
}
catch( Exception e )
{
System.err.println(
"Exception handled in method throwException" );
//转换为一个自定义异常,再抛出
throw new MyException("在方法执行时出现异常",e);
}
finally
{
System.err.println(
"Finally executed in throwException" );
}
// any code here would not be reached
}
public static void doesNotThrowException()
{
try
{
System.out.println( "Method doesNotThrowException" );
}
catch( Exception e )
{
System.err.println( e.toString() );
}
finally
{
System.err.println(
"Finally executed in doesNotThrowException" );
}
System.out.println(
"End of method doesNotThrowException" );
}
}
这就是典型的异常处理代码模板。