【285天】我愛刷題系列(44)

叨叨兩句

  1. 搞定~下一個任務!java

牛客網——java專項練習024

1

public class Test{json

static int cnt = 6;
static{
    cnt += 9;
}

public static void main(String[] args){數組

System.out.println(「cnt =」 + cnt);

}
static{函數

cnt /=3;
};

}
cnt的值是
正確答案: Acode

  1. cnt=5對象

  2. cnt=2繼承

  3. cnt=3接口

  4. cnt=6資源

初始化順序:
1.先父類,後子類
2.先屬性,後構造函數
3.先靜態,後非靜態
4.靜態初始化塊,靜態變量這兩個是屬於同一級別的,是按代碼寫得順序執行
5.同一類型(非數據類型,指以上),按代碼前後順序
看了前面的解答,我想更正一下其中幾位同窗的解答。
如樓上有的同窗說的,靜態初始化塊,靜態變量這兩個是屬於同一級別的,是按代碼寫得順序執行的!
而不是先執行靜態變量後執行靜態初始化塊!這是錯的。我舉個例子:
public class Test{  static{  cnt = 6;
    }  static int cnt = 100;  public static void main(String[] args){
        System.out.println("cnt = " + cnt);
        //最後輸出是50,若是按照錯誤說法就應該是3
        //按順序執行就是cnt=6--->cnt=100---->cnt = 100/2 = 50.
    }  static{ cnt /= 2;
    }
}

2

public class IfTest{
    public static void main(string[]args){
        int x=3;
        int y=1;
        if(x=y)
            System.out.println(「Not equal」);
        else
            System.out.println(「Equal」);
     }
}

What is the result?
正確答案: C編譯器

  1. The output is 「Equal」

  2. The output in 「Not Equal」

  3. An error at line 5 causes compilation to fall.

  4. The program executes but does not print a message.

我來解析下:
其實這個是因爲java和C語言的不一樣處理機制致使的:

C語言中
當if語句中的條件爲賦值語句時,其實是將賦值後的結果與0進行比較【左值】
if(1)  因爲1>0  因此認爲是true

java語言中,雖然也用了左值,可是再也不與0比較,而是直接將0放入if()中
可是int類型,不能轉換爲boolean,因此會報錯:「 Type mismatch: cannot convert from int to boolean 」

3

下面哪幾個語句正確的聲明一個整型的二維數組()
正確答案: C D

  1. int a[][]=new int[][]

  2. int b10=new int[][]

  3. int c[][]=new int10

  4. int []d[]=new int10

二維數組的定義方式: 
             1.    int [][] array = new int[n][m]; 
             2.    int [][] array={{1,2,3,4},{1,2,3,4},{1,2,3,4}};
方式一: 定義二維數組能夠指定不定義m,可是必須定義n.

4

有關finally語句塊說法正確的是( )
正確答案: A B C D

  1. 無論 try 語句塊正常結束仍是異常結束,finally語句塊都是要被執行的

  2. 在try語句塊或catch語句塊中執行到System.exit(0)直接退出程序

  3. finally塊中的return語句會覆蓋try塊中的return返回

  4. finally 語句塊在 catch語句塊中的return語句以前執行

結論:
一、無論有木有出現異常,finally塊中代碼都會執行;
二、當try和catch中有return時,finally仍然會執行;
三、finally是在return後面的表達式運算後執行的(此時並無返回運算後的值,而是先把要返回的值保存起來,管finally中的代碼怎麼樣,返回的值都不會改變,任然是以前保存的值),因此函數返回值是在finally執行前肯定的;
四、finally中最好不要包含return,不然程序會提早退出,返回值不是try或catch中保存的返回值。

舉例:

狀況1:try{} catch(){}finally{} return;
顯然程序按順序執行。

狀況2:try{ return; }catch(){} finally{} return;
程序執行try塊中return以前(包括return語句中的表達式運算)代碼;
再執行finally塊,最後執行try中return;
finally塊以後的語句return,由於程序在try中已經return因此再也不執行。

狀況3:try{ } catch(){return;} finally{} return;
程序先執行try,若是遇到異常執行catch塊,
有異常:則執行catch中return以前(包括return語句中的表達式運算)代碼,再執行finally語句中所有代碼,
最後執行catch塊中return. finally以後也就是4處的代碼再也不執行。
無異常:執行完try再finally再return.

狀況4:try{ return; }catch(){} finally{return;}
程序執行try塊中return以前(包括return語句中的表達式運算)代碼;
再執行finally塊,由於finally塊中有return因此提早退出。

狀況5:try{} catch(){return;}finally{return;}
程序執行catch塊中return以前(包括return語句中的表達式運算)代碼;
再執行finally塊,由於finally塊中有return因此提早退出。

狀況6:try{ return;}catch(){return;} finally{return;}
程序執行try塊中return以前(包括return語句中的表達式運算)代碼;
有異常:執行catch塊中return以前(包括return語句中的表達式運算)代碼;
則再執行finally塊,由於finally塊中有return因此提早退出。
無異常:則再執行finally塊,由於finally塊中有return因此提早退出。

最終結論:任何執行try 或者catch中的return語句以前,都會先執行finally語句,若是finally存在的話。
若是finally中有return語句,那麼程序就return了,因此finally中的return是必定會被return的,
編譯器把finally中的return實現爲一個warning。

5

如下 json 格式數據,錯誤的是
正確答案: A C

  1. {company:4399}

  2. {"company":{"name":[4399,4399,4399]}}

  3. {[4399,4399,4399]}

  4. {"company":[4399,4399,4399]}

  5. {"company":{"name":4399}}

6

下列說法錯誤的有( )
正確答案: A B C D

  1. Java面嚮對象語言允許單獨的過程與函數存在

  2. Java面嚮對象語言允許單獨的方法存在

  3. Java語言中的非靜態方法屬於類中的成員(member)

  4. Java語言中的方法一定隸屬於某一類(對象),調用方法與過程或函數相同

java不容許單獨的方法,過程或函數存在,須要隸屬於某一類中。——AB錯
java語言中的方法屬於對象的成員,而不是類的成員。不過,其中靜態方法屬於類的成員。——C錯 
D也錯,方法屬於接口

7

下列有關JAVA異常處理的敘述中正確的是()
正確答案: A B D

  1. finally是爲確保一段代碼不論是否捕獲異常都會被執行的一段代碼

  2. throws是用來聲明一個成員方法可能拋出的各類非運行異常狀況

  3. final用於能夠聲明屬性和方法,分別表示屬性的不可變及方法的不可繼承

  4. throw是用來明確地拋出一個異常狀況

throws用於在方法上聲明該方法不須要處理的異常類型,用在方法上後面跟異常類名 能夠是多個異常類
 throw用於拋出具體異常類的對象,用在方法內 後面跟異常對象只能是一個異常類型實體.
 try塊必須和catch塊或和finally同在,不能單獨存在,兩者必須出現一個. 
finally塊總會執行,不管是否有錯誤出現.可是若try語句塊或會執行的catch語句塊使用了JVM系統退出語句,finally塊就不會被執行了. 通常咱們把關閉資源的代碼放在finally裏面 保證資源老是能關閉
而後再看這一題 A確定對了,C根本就跟異常處理沒有關係,因此不選。就算有關係也錯了
final用於聲明屬性、方法、類。分別表示屬性不可更改、方法不能被覆蓋、類不能被繼承。
因此C選項說方法不能被繼承錯誤,是不能覆蓋
B、D咬文嚼字說是由於
B. throws是用來聲明一個成員方法可能拋出的各類異常狀況.
「狀況」錯了應該改爲對象
我表示不能接受,D也同樣。若是沒有更好的理由
我以爲題目答案錯了,就是ABD
相關文章
相關標籤/搜索