2020-2-20 牛客試題覆盤

一、下面哪一個修飾符修飾的變量是全部同一個類生成的對象共享的( C)java

A、public
B、private
C、static
D、final

解析:web

static修飾某個字段時,確定會改變字段建立的方式(每一個被static修飾的字段對於每個類來講只有一份存儲空間,而非static修飾的字段對於每個對象來講都有一個存儲空間)
static屬性是屬於類的,因此對象共同擁有,因此既能夠經過類名.變量名進行操做,又能夠經過對象名.變量名進行操做
 
 
 
二、對於如下代碼段,4個輸出語句中輸出true的個數是( C   )。

class A{}編程

class B extends A{}cookie

class C extends A{}app

class D extends B{}編程語言

A obj = new D();函數

System.out.println(obj instanceof B);ui

System.out.println(obj instanceof C);this

System.out.println(obj instanceof D);url

System.out.println(obj instanceof A);

 

 

A、1
B、2
C、3
D、4

解析:

    A
|        |
B     C
|
D
D屬於B,D屬於A,但D不屬於C。

 

 

三、有一個源代碼,只包含import java.util.* ; 這一個import語句,下面敘述正確的是?   ( C)

A、只能寫在源代碼的第一句
B、能夠訪問java/util目錄下及其子目錄下的全部類
C、能訪問java/util目錄下的全部類,不能訪問java/util子目錄下的全部類
D、編譯錯誤

解析:

導入java.util.*不能讀取其子目錄的類,由於若是java.util裏面有個a類,java.util.regex裏面也有個a類,咱們如果要調用a類的方法或屬性時,應該使用哪一個a類呢。

 

 

四、以下代碼的輸出是   B

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" );
         }
     }
 
}
 
A、編譯出錯
B、eE
C、Ee
D、eE1eE3eE5
E、Ee1Ee3Ee5

解析:

因爲arr[0] =0,因此在進入 test()方法裏面會在第一個if 上拋出一個 NullPointerException,接着會執行 finally 的語句, (finally語句先於 return 和 throw語句執行),輸出一個'e,而後回到 main方法中,因爲捕捉到異常,因此進入到catch語句中,而後打印一個'E',因此最終結果爲"eE".

 

 

五、關於匿名內部類敘述正確的是? (B )

A、匿名內部類能夠繼承一個基類,不能夠實現一個接口
B、匿名內部類不能夠定義構造器
C、匿名內部類不能用於形參
D、以上說法都不正確

 解析:

因爲構造器的名字必須與類名相同,而匿名類沒有類名,因此匿名類不能有構造器。

匿名內部類的建立格式爲: new 父類構造器(參數列表)|實現接口(){
                                             //匿名內部類的類體實現
                                        }
  1. 使用匿名內部類時,必須繼承一個類或實現一個接口
  2. 匿名內部類因爲沒有名字,所以不能定義構造函數
  3. 匿名內部類中不能含有靜態成員變量和靜態方法

 

 

六、下面代碼的運行結果爲:(C)

import  java.io.*;
import  java.util.*;
public  class  foo{
public  static  void  main (String[] args){
String s;
System.out.println( "s="  + s);
}
}
 
A、代碼獲得編譯,並輸出「s=」
B、代碼獲得編譯,並輸出「s=null」
C、因爲String s沒有初始化,代碼不能編譯經過
D、代碼獲得編譯,但捕獲到 NullPointException異常

 

 

七、下列關於if-else if選擇結構的說法正確的是    BD

A、多個else if塊之間的順序能夠改變,改變以後對程序的執行結果沒有影響
B、if塊之間的順序能夠改變,改變以後可能對程序的執行結果有影響
C、多個else if塊之間的順序不能夠改變,改變後程序編譯不經過
D、多個else if塊之間的順序能夠改變,改變後程序編譯能夠經過

 

八、下列方法中哪一個是線程執行的方法? (A)

A、run()
B、start()
C、sleep()
D、suspend()

解析:

start是啓動線程對象,使之重新建狀態轉入就緒狀態;

sleep讓線程睡眠一段時間,在此期間線程不消耗CPU資源;

suspend使線程掛起,暫停執行, 若是想恢復線程,必須由其餘線程調用 resume方法。

 

 

九、下面關於靜態方法說明正確的是  B

A、在靜態方法中可用this來調用本類的類方法
B、在靜態方法中調用本類的靜態方法時可直接調用
C、在靜態方法中只能調用本類中的靜態方法
D、在靜態方法中絕對不能調用實例方法

解析:

A:不能使用this調用本類的類方法(即靜態方法);具體原理不清楚(望指點),我的理解爲this指向的是實例對象,此時未實例化,故不能使用
B: 正確
C:在靜態方法中,不僅能夠調用本類的靜態方法,也可使用【類名.靜態方法名】調用其餘類的靜態方法
D:能夠調用實例方法,使用【new 類名().實例方法名】調用

 

 

十、下面哪一個不屬於HttpServletResponse接口完成的功能?C

A、設置HTTP頭標
B、設置cookie
C、讀取路徑信息
D、輸出返回數據

 解析:

A:設置HTTP頭標  
1
response.setHeader( "Refresh" , "3" );  //三秒刷新頁面一次
B:設置cookie
1
2
Cookie c1 =  new Cookie( "username" , "only" );
response.addCookie(c1);
C(錯誤):讀取路徑信息,request讀取路徑信息
1
2
3
4
5
從request獲取各類路徑總結
request.getRealPath( "url" );  // 虛擬目錄映射爲實際目錄
request.getRealPath( "./" );     // 網頁所在的目錄
request.getRealPath( "../" );  // 網頁所在目錄的上一層目錄
request.getContextPath();     // 應用的web目錄的名稱
 
D:輸出返回數據
1
HttpServleteResponse.getOutputStream().write();
 

 

 

十一、下面哪一個不對?   C

A、RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.
B、A method is not required to declare in its throws clause any subclasses of RuntimeExeption that might be thrown during the execution of the method but not caught
C、An RuntimeException is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch.
D、NullPointerException is one kind of RuntimeException

解析:

 

 

運行時異常: 都是RuntimeException類及其子類異常,如NullPointerException(空指針異常)、IndexOutOfBoundsException(下標越界異常)等,這些異常是不檢查異常,程序中能夠選擇捕獲處理,也能夠不處理。這些異常通常是由程序邏輯錯誤引發的,程序應該從邏輯角度儘量避免這類異常的發生。

       運行時異常的特色是Java編譯器不會檢查它,也就是說,當程序中可能出現這類異常,即便沒有用try-catch語句捕獲它,也沒有用throws子句聲明拋出它,也會編譯經過。
非運行時異常 (編譯異常): 是RuntimeException之外的異常,類型上都屬於Exception類及其子類。從程序語法角度講是必須進行處理的異常,若是不處理,程序就不能編譯經過。如IOException、SQLException等以及用戶自定義的Exception異常,通常狀況下不自定義檢查異常。

 

 

十二、下列Java代碼中的變量a、b、c分別在內存的____存儲區存放。   C

class A {
     private String a = 「aa」;
     public boolean methodB() {
         String b = 「bb」;
         final String c = 「cc」;
     }
}
 
A、堆區、堆區、堆區
B、堆區、棧區、堆區
C、堆區、棧區、棧區
D、堆區、堆區、棧區
E、靜態區、棧區、堆區
F、靜態區、棧區、棧區

解析:

A是類中的成員變量,存放在堆區。

B、C都是方法中的局部變量,存放在棧區。

 

 

1三、下列說法正確的有(ACD )

A、環境變量可在編譯source code時指定
B、在編譯程序時,所能指定的環境變量不包括class path
C、javac一次可同時編譯數個Java源文件
D、javac.exe能指定編譯結果要置於哪一個目錄(directory)

 

 

1四、如下不是修飾符final的做用的是( C)。

A、修飾常量
B、修飾不可被繼承的類
C、修飾不可變類
D、修飾不可覆蓋的方法

解析:

final的做用:
    1. 修飾變量,變量的引用地址不可變,可是地址中的內容能夠變。
    2. 修飾方法,方法不可被重寫,可是仍是能夠重載
    3. 修飾類,類不可繼承。
 
不可變類,說的是一個類一旦被實例化,就不可改變自身的狀態。常見的好比String和基本數據類型的包裝類,對於這種不可變類,一旦在進行引用傳遞的時候,形參一開始就和實際參數指向的不是一個地址,因此在方法中對形參的改變,並不會影響實際參數。
 
 
 
 
1五、有如下一個對象:
public class DataObject implements Serializable{
     private static int i=0;
     private String word= " " ;
     public void setWord(String word){
         this .word=word;
     }
     public void setI(int i){
         Data0bject. i=I;
      }
}
建立一個以下方式的DataObject:
DataObject object= new Data0bject ( );
object. setWord( "123" );
object. setI(2);
將此對象序列化爲文件,並在另一個JVM中讀取文件,進行反序列化,請問此時讀出的Data0bject對象中的word和i的值分別爲:  D
A、"", 0
B、"", 2
C、"123", 2
D、"123", 0

解析:

序列化保存的是對象的狀態,靜態變量屬於類的狀態,所以,序列化並不保存靜態變量。因此i是沒有改變的。

 

 

1六、關於異常的編程,如下描述錯誤的是:( A )

A、在有除法存在的代碼處,爲了防止分母爲零,必須拋出並捕獲異常
B、int i=Integer.parseInt(」123a」);將產生NumberFormatException
C、int a[]=null; a[0]=1; 將產生NullPointerException
D、輸入輸出流編程中,讀和寫時都要拋出IOException

 

 

1七、從運行層面上來看,從四個選項選出不一樣的一個。  B

A、JAVA
B、Python
C、objectC
D、C#

解析:

Python  只有它是動態語言
動態語言的定義:動態編程語言   是    高級程序設計語言   的一個類別,在計算機科學領域已被普遍應用。它是一類   在  運行時能夠改變其結構的語言    :例如新的函數、對象、甚至代碼能夠被引進,已有的函數能夠被刪除或是其餘結構上的變化。動態語言目前很是具備活力。衆所周知的    ECMAScript   (    JavaScript   )即是一個動態語言,除此以外如    PHP   、    Ruby   、    Python   等也都屬於動態語言,而    C   、    C++   等語言則不屬於動態語言。

 

 

1八、從內存實現或者反射的角度來看,關於繼承的說法正確的是(A)。

注:此處的繼承不表明能調用
A、子類將繼承父類的全部的數據域和方法
B、子類將繼承父類的其可見的數據域和方法
C、子類只繼承父類public方法和數據域
D、子類只繼承父類的方法,而不繼承數據域

解析:

在一個子類被建立的時候,首先會在內存中建立一個父類對象,而後在父類對象外部放上子類獨有的屬性,二者合起來造成一個子類的對象。因此所謂的繼承使子類擁有父類全部的屬性和方法其實能夠這樣理解,子類對象確實擁有父類對象中全部的屬性和方法,可是父類對象中的私有屬性和方法,子類是沒法訪問到的,只是擁有,但不能使用。就像有些東西你可能擁有,可是你並不能使用。因此子類對象是絕對大於父類對象的,所謂的子類對象只能繼承父類非私有的屬性及方法的說法是錯誤的。能夠繼承,只是沒法訪問到而已。

 

 

1九、java8中,忽略內部接口的狀況,不能用來修飾interface裏的方法的有( AC)

A、private
B、public
C、protected
D、static

解析:

Java8的接口方法能夠有以下定義
only public, abstract, default, static and strictfp are permitted
 

 

20、如下哪一種JAVA的變量表達式使得變量a和變量b具備相同的內存引用地址(  AB)

A、String a = "hello"; String b = "hello";
B、Integer a; Integer b = a;
C、int a = 1; Integer b = new Integer(1);
D、int a = 1; Integer b = 1;

解析:

內存引用地址,是指棧中存放的地址,來指向堆中的某個位置。int 是基本類型,數據直接存放在棧中,不存在內存引用地址的說法==A對  指向常量池裏的"hello"。B對  題中沒說聲明的a是局部變量。C錯  int a =1;並不指向堆中,它只有值,沒有引用地址,Integer b =new Integer(1);指向堆中地址爲1的位置。D錯  緣由同C

相關文章
相關標籤/搜索