已知:public class ExceptionText{ public static void main(String[] args){ try{ int i=1; System.out.println(i++); }finally{ System.out.println(++i); } } } ...
已知:public class ExceptionText{
public static void main(String[] args){
try{
int i=1;
System.out.println(i++);
}finally{
System.out.println(++i);
}
}
}
程式編譯並運行的結果為( C)
A.1 2 B.1 1 C.編譯錯誤 D.1
解析:變數i只在try語句塊內定義,所以其有效範圍僅限於try語句塊,finally語句塊不能訪問i,所以編譯錯誤
已知:public class ExceptionDemo{
public static void main(String[] args){
try{
System.out.println("i="+(i++));
int m=10/0;
}catch(ArithmeticException e){
throw new ArithmeticException("算術異常");
e.printStackTrace();
}finally{
System.out.println("i="+(++i));
}
}
}
程式編譯並運行的結果為( D)
A. 0 2
B. i=1
java.lang.ArithmeticException:/by zero
at ExceptionDemo.main(ExceptionDemo.java.7)
i=2
Exception in thread"main" java.lang.ArithmeticException:
at ExceptionDemo.main(ExceptionDemo.java.12)
C.
i=0
java.lang.ArithmeticException:/by zero
at ExceptionDemo.main(ExceptionDemo.java.7)
i=2
Exception in thread"main" java.lang.ArithmeticException:算術異常
at ExceptionDemo.main(ExceptionDemo.java.12)
D.編譯錯誤,因為無法訪問e.printStackTrace();
解析:throw語句後面不能緊跟其他語句,因為這些語句都沒有被執行的機會
已知:
public class T3 {
public static void main(String[] args) {
int i=0;
try {
System.out.println("i="+(i++));
int m=10/0;
} catch (ArithmeticException e) {
System.exit(0);
e.printStackTrace();
}finally{
System.out.println("i="+(++i));
}
}
}
程式編譯並運行的結果為(B)
A. i=0 i=2
B.i=0
C.i=0
java.lang.ArithmeticException:/by zero
at ExceptionDemo.main(T3.java.7)
D.編譯錯誤
解析:在finally語句塊之前執行了System.exit(0)退出運行,則finally語句塊將不會被執行
已知:
public class T3 {
public static void main(String[] args) {
int n=fun(2);
System.out.println(n);
}
public static int fun(int i){
try{
int m=i/0;
return i++;
}catch(ArithmeticException e){
return (i+3);
}finally{
return (i+8);
}
}
}
程式編譯並運行的結果為(C)
A.2 B.5 C.10 D.編譯錯誤
解析:在執行try或catch語句塊中的return語句時,假如有finally語句塊,會先執行finally語句塊。所以上面程式中先執行的是finally語句塊中的return語句,返回10並退出方法
public class T3 {
public static void main(String[] args) {
int n=fun(2);
System.out.println(n);
}
public static int fun(int i){
try{
return i++;
}finally{
return i+8;
}
}
}
該代碼的運行結果為11
public class T3 {
public static void main(String[] args) {
int n=fun(2);
System.out.println(n);
}
public static int fun(int i){
try{
return i++;
}finally{
i=i+8;
}
}
}
該代碼的運行結果為2
public class T3 {
public static String output="";
public static void foo(int i){
try{
if(i==1)
throw new Exception();
output+="1";
}catch(Exception e){
output+="2";
return;
}finally{
output+=3;
}
output+=4;
}
public static void main(String[] args) {
foo(0);
System.out.println(output);
foo(1);
System.out.println(output);
}
}
改程式運行結果:
134
13423
(方法覆蓋)有如下代碼
class Super {
public void method() throws IOException {
}
}
public class MySub extends Super {
@Override
public void method()//_1_______________________ {
}
}
問:
在//1 處,填入以下________________________代碼編譯無法通過(C)
A.throws java.io.IOException
B.throws java.io.FileNotFoundException, java.io.EOFException
C.throws java.sql.SQLException
D.不拋出任何異常,即什麼都不填寫
與C、C++等語言相比,Java的異常處理機制有何優點?
答:1. 將錯誤代碼從常規代碼中分離出來,提高了程式的可讀性,簡化了程式的結構;2.允許對錯誤進行修正,可以對錯誤類型和錯誤差別進行分組,錯誤的處理變得規範;3.調用棧向上傳送錯誤,方便定義錯誤和維護;4.可以使用catch語句輸出錯誤信息;5.防止程式自動中斷程式(try-catch)
error和exception有什麼區別?
Error表示系統級的錯誤和程式不必處理的異常,是java運行環境中的內部錯誤或者硬體問題。比如:記憶體資源不足等。對於這種錯誤,程式基本無能為力,除了退出運行外別無選擇,它是由Java虛擬機拋出的。
Exception表示需要捕捉或者需要程式進行處理的異常,它處理的是因為程式設計的瑕疵而引起的問題或者在外的輸入等引起的一般性問題,是程式必須處理的。
常見異常
ArithmeticException算術異常、ArrayIndexOutOfBoundsExceptin數組越界異常、ClassCastException對象轉換異常、NullPointerException空指向異常、ArrayStoreException數組存儲異常