第八周动手动脑

一:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识。

代码:

package 第八周;

import javax.swing.*;

class AboutException {
public static void main(String[] a) 
{
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");
}

}
}

  

Throwable类有两个直接子类: Exception:出现的问题是可以被捕获的; Error:系统错误,通常由JVM处理。 可捕获的异常又可以分为两类: (1)Check异常:直接派生自Exception的异常类,必须被捕获或再次声明抛出 (2)Runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象: throw new ArithmeticException(…);

二:阅读以下代码(CatchWho.java),写出程序运行结果以及写出CatchWho2.java程序运行的结果。再阅读EmbedFinally.java示例,再运行它,观察其输出并进行总结。:

代码:

package 第八周;

import javax.swing.*;

class AboutException {
	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"); 
		} 
		} 
}

 截图: 

public class CatchWho2 { 

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"); 
} 
} 
}

  

public class EmbededFinally {


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");

}

}

}

  

 

 四“:finally语句块一定会执行吗?

 

 

public class SystemExitAndFinally {


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");

}

}


}

运行结果如下:

  

 

posted @ 2018-11-11 20:10  李胜明  阅读(150)  评论(0编辑  收藏  举报