1. 程式人生 > 實用技巧 >java牛客刷題2020年9月4日

java牛客刷題2020年9月4日

java牛客刷題2020年9月4日

  1. 對於abstract宣告的類,下面說法正確的是

    可以例項化
    不可以被繼承
    子類為abstract
    只能被繼承
    可以被抽象類繼承
    正確答案: E   你的答案: B
    A,抽象類不能例項化,因為有抽象方法未實現
    B,可以被繼承。派生類可以實現抽象方法
    C,子類可以是抽象的,也可以非抽象的
    D,只能被繼承說法太肯定,不正確
    E,可以被抽象類繼承,也可以被非抽象類繼承
    
  2. 有時為了避免某些未識別的異常拋給更高的上層應用,在某些介面實現中我們通常需要捕獲編譯執行期所有的異常, catch 下述哪個類的例項才能達到目的:()

    正確答案: B 你的答案: D (錯誤)

    Error
    Exception
    RuntimeException
    Throwable
    

    1. 檢查程式,是否存在問題,如果存在指出問題所在,如果不存在,說明輸出結果。

      public class HelloB extends HelloA 
      {
       public HelloB()
       {
       }
       {
           System.out.println("I’m B class");
       }
       static
       {
           System.out.println("static B");
       }
       public static void main(String[] args)
       {
           new HelloB();
       }
      }
      class HelloA
      {
       public HelloA()
       {
       }
       {
           System.out.println("I’m A class");
       }
       static
       {
           System.out.println("static A");
       }
      }
      
      static A
      I’m A class
      static B
      I’m B class
      答案:
      其中涉及:靜態初始化程式碼塊、構造程式碼塊、構造方法
      當涉及到繼承時,按照如下順序執行:
      1、執行父類的靜態程式碼塊
      static {
              System.out.println("static A");
          }
      輸出:static A
      2、執行子類的靜態程式碼塊
      static {
              System.out.println("static B");
          }
      輸出:static B
      3、執行父類的構造程式碼塊
      {
              System.out.println("I’m A class");
          }
      輸出:I'm A class
      4、執行父類的建構函式
      public HelloA() {
          }
      輸出:無
      5、執行子類的構造程式碼塊
      {
              System.out.println("I’m B class");
          }
      輸出:I'm B class
      6、執行子類的建構函式
      public HelloB() {
          }
      輸出:無
      
      那麼,最後的輸出為:
      static A
      static B
      I'm A class
      I'm B class
      正確答案:C
      
      
      
      或者:
      1.靜態程式碼塊 2.構造程式碼塊3.構造方法的執行順序是1>2>3;明白他們是幹嘛的就理解了。
      1.靜態程式碼塊:是在類的載入過程的第三步初始化的時候進行的,主要目的是給類變數賦予初始值。
      2.構造程式碼塊:是獨立的,必須依附載體才能執行,Java會把構造程式碼塊放到每種構造方法的前面,用於例項化一些共有的例項變數,減少程式碼量。
      3.構造方法:用於例項化變數。
      1是類級別的,2、3是例項級別的,自然1要優先23.
      在就明白一點:對子類得主動使用會導致對其父類得主動使用,所以儘管例項化的是子類,但也會導致父類的初始化和例項化,且優於子類執行。
      
    2. Java 中的集合類包括 ArrayList 、 LinkedList 、 HashMap 等,下列關於集合類描述正確的是?()

      正確答案: A B D 你的答案: B C D (錯誤)

      ArrayList和LinkedList均實現了List介面
      ArrayList訪問速度比LinkedList快
      隨機新增和刪除元素時,ArrayList的表現更加快速
      HashMap實現Map介面,它允許任何型別的鍵和值物件,並允許將NULL用作鍵或值
      
      解釋:
      A、HashMap實現了Map介面的,它的Key和Value都可以是null,但是Hashtable種,Key和Value都不能是null。
      B、ArrayList與LinkedList都實現了List介面,繼承了AbstractList類。
      C、ArrayList底層是動態陣列是實現,隨機位置新增和刪除,都需要移動陣列的資料,而LinkedList底層是雙向連結串列,只需要修改Node節點的引用。
      D、隨機訪問陣列要比連結串列塊。
      下面放一張ArrayList和LinkedList的區別表:
      

    3. 在使用super和this關鍵字時,以下描述錯誤的是()

      在子類構造方法中使用super()顯示呼叫父類的構造方法,super()必須寫在子類構造方法的第一行,否則編譯不通過
      super()和this()不一定要放在構造方法內第一行
      this()和super()可以同時出現在一個建構函式中
      this()和super()可以在static環境中使用,包括static方法和static語句塊
      正確答案: B C D   你的答案: B D (錯誤)
      1、super()表示呼叫父類建構函式、this()呼叫自己的建構函式,而自己的建構函式第一行要使用super()呼叫父類的建構函式,所以這倆不能在一個建構函式中會出現重複引用的情況
      2、super()和this()必須在建構函式第一行,所以這一點也表明他倆不能在一個建構函式中
      3、this()和super()都指的是物件,所以,均不可以在static環境中使用。包括:static變數,static方法,static語句塊(裡面不能使用非static型別的)。