【302天】我愛刷題系列061(2017.12.04)

叨叨兩句

  1. 想要專一,最強的方法是調動本能自個人力量把本身拉回來

牛客網——java專項練習040

1

下列不屬於Java語言性特色的是
正確答案: D 你的答案: D (正確)java

  1. Java致力於檢查程序在編譯和運行時的錯誤
  2. Java能運行虛擬機實現跨平臺
  3. Java本身操縱內存減小了內存出錯的可能性
  4. Java還實現了真數組,避免了覆蓋數據類型的可能
真數組: 數組元素在內存中是一個接着一個線性存放的,經過第一個元素就能訪問隨後的元素,避免了數據覆蓋的可能性,和數據類型覆蓋並無關係。

2

下面哪一項不是加載驅動程序的方法?
正確答案: A 你的答案: C (錯誤)mysql

  1. 經過DriverManager.getConnection方法加載
  2. 調用方法 Class.forName
  3. 經過添加系統的jdbc.drivers屬性
  4. 經過registerDriver方法註冊
加載驅動方法
1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
2. DriverManager.registerDriver(new com.mysql.jdbc.Driver());
3.System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");

3

下面有關JVM內存,說法錯誤的是?
正確答案: Csql

  1. 程序計數器是一個比較小的內存區域,用於指示當前線程所執行的字節碼執行到了第幾行,是線程隔離的
  2. 虛擬機棧描述的是Java方法執行的內存模型,用於存儲局部變量,操做數棧,動態連接,方法出口等信息,是線程隔離的
  3. 方法區用於存儲JVM加載的類信息、常量、靜態變量、以及編譯器編譯後的代碼等數據,是線程隔離的
  4. 原則上講,全部的對象都在堆區上分配內存,是線程之間共享的
大多數 JVM 將內存區域劃分爲 Method Area(Non-Heap)(方法區) ,Heap(堆) , Program Counter Register(程序計數器) ,   VM Stack(虛擬機棧,也有翻譯成JAVA 方法棧的),Native Method Stack  ( 本地方法棧 ),其中Method Area 和  Heap 是線程共享的  ,VM Stack,Native Method Stack  和Program Counter Register  是非線程共享的。爲何分爲 線程共享和非線程共享的呢?請繼續往下看。
首先咱們熟悉一下一個通常性的 Java 程序的工做過程。一個 Java 源程序文件,會被編譯爲字節碼文件(以 class 爲擴展名),每一個java程序都須要運行在本身的JVM上,而後告知 JVM 程序的運行入口,再被 JVM 經過字節碼解釋器加載運行。那麼程序開始運行後,都是如何涉及到各內存區域的呢?
歸納地說來,JVM初始運行的時候都會分配好 Method Area(方法區) 和Heap(堆) ,而JVM 每遇到一個線程,就爲其分配一個 Program Counter Register(程序計數器) ,   VM Stack(虛擬機棧)和Native Method Stack  (本地方法棧), 當線程終止時,三者(虛擬機棧,本地方法棧和程序計數器)所佔用的內存空間也會被釋放掉。這也是爲何我把內存區域分爲線程共享和非線程共享的緣由,非線程共享的那三個區域的生命週期與所屬線程相同,而線程共享的區域與JAVA程序運行的生命週期相同,因此這也是系統垃圾回收的場所只發生在線程共享的區域(實際上對大部分虛擬機來講知發生在Heap上)的緣由。

4

以下代碼的輸出是數組

package Test;
public class Test {
    private static void test(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            try {
                if (arr[i] % 2 == 0) {
                    throw new NullPointerException();
                } else {
                    System.out.print(i);
                }
            } finally {
                System.out.print("e");
            }
        }
    }
 
    public static void main(String[]args) {
        try {
            test(new int[] {0, 1, 2, 3, 4, 5});
        } catch (Exception e) {
            System.out.print("E");
        }
    }
 
}

能夠獲得的結論是( )sqlserver

正確答案: B線程

  1. 編譯出錯
  2. eE
  3. Ee
  4. eE1eE3eE5
  5. Ee1Ee3Ee5
因爲arr[0] =0,因此在進入 test()方法裏面會在第一個if 上拋出一個 NullPointerException,接着會執行 finally 的語句, (finally語句先於 return 和 throw語句執行),輸出一個'e,而後回到 main方法中,因爲捕捉到異常,因此進入到catch語句中,而後打印一個'E',因此最終結果爲"eE"
這題主要是2點:1.finally中的語句必定會執行。 2.是catch捕獲到異常後程序結束。
相關文章
相關標籤/搜索