异常动手脑总结

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() + "\n" );
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" );
}
}

 这就是典型的异常处理代码模板。

 

posted @ 2020-10-29 09:17  潘福龙  阅读(44)  评论(0编辑  收藏  举报