java選擇題(三)


 

1、靜態內部類不可以直接訪問外圍類的非靜態數據,而非靜態內部類可以直接訪問外圍類的數據,包括私有數據。( )正確答案: A   

A、正確
B、錯誤
解析:
  靜態內部類可以訪問外圍類的靜態數據,包括私有數據,但不能訪問非靜態數據;
  非靜態內部類可以直接訪問外圍類的數據,包括私有數據

 

 

 

 

2、在類Tester中定義方法如下,public double max(int x, int y) { // 省略 },則在該類中定義如下哪個方法頭是對上述方法的重載(Overload)?正確答案: B 

 
A.public int max(int a, int b) {}
B.public int max(double a, double b) {}
C.public double max(int x, int y) {}
D.private double max(int a, int b) {}

 解析:

  重載:同名不同參,返回值無關。

  覆蓋/重寫:同名同參
 

3、以下Java程序運行的結果是:

public class Tester{
public static void main(String[] args){
   Integer var1=new Integer(1);
   Integer var2=var1;
   doSomething(var2);
   System.out.print(var1.intValue());
   System.out.print(var1==var2);
}
public static void doSomething(Integer integer){
    integer=new Integer(2);
    }
}

正確答案: A   

A.1true
B.2true
C.1false
D.2false

解析:

 

 4、關於下面的程序Test.java說法正確的是(    )。

public class Test {
    static String x="1";
    static int y=1;
    public static void main(String args[]) {
        static int z=2;
        System.out.println(x+y+z);
    }
}

正確答案: D 

A.3
B.112
C.13
D.程序有編譯錯誤

 解析:

  局部變量,由於在方法中,方法中的變量都在棧中,隨着方法的進棧出棧產生和銷毀。所以不可以被static修飾。一旦被static修飾變量就屬於類了。
 

5、@SuppressWarnings(“deprecation”)的功能是什么?正確答案: A  

A.屏蔽不贊同使用的類和方法的警告
B.屏蔽在強制類型轉換的時候編譯器給出的警告
C.關閉所有警告信息
D.當在可序列化的類上缺少serialVersionUID定義的警告

解析:

  1、@Override 注解表名子類中覆蓋了超類中的某個方法,如果寫錯了覆蓋形式,編譯器會報錯
  2、@Deprecated 表明不希望別人在以后使用這個類,方法,變量等等
  3、@Suppresswarnings 達到抑制編譯器產生警告的目的,但是不建議使用,因為后期編碼人員看不懂編譯器提示的警告,不能更好的選擇更好的類去完成任務

 

6、對於構造方法,下列敘述正確的是( )。正確答案: A C D

A.構造方法的優先級一般比代碼塊低。
B.構造方法的返回類型只能是void型。
C.構造方法的主要作用是完成對類的對象的初始化工作。
D.一般在創建新對象時,系統會自動調用構造方法。

解析:

java程序初始化順序:
  父類靜態變量 -> 父類靜態代碼塊(只執行一次) -> 子類靜態變量 -> 子類靜態代碼塊(只執行一次) -> 父類非靜態變量 -> 父類非靜態代碼塊 -> 父類構造函數 -> 子類非靜態變量 -> 子類非靜態代碼塊 -> 子類構造函數
 

7、程序中常采用變量表示數據,變量具有名、地址、值、作用域、生存期等屬性。關於變量的敘述,()是正確的。正確答案: A C D

A.根據作用域規則,在函數中定義的變量只能在函數中引用
B.在函數中定義的變量,其生存期為整個程序執行期間
C.在函數中定義的變量不能與其所在函數的形參同名
D.在函數中定義的變量,其存儲單元在內存的棧區

解析:

  在函數中,不管中間隔了幾層,都不允許定義一個與形參同名的變量

 

 

8、final、finally和finalize的區別中,下述說法正確的有?正確答案: A B

A.final用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

B.finally是異常處理語句結構的一部分,表示總是執行。

C.finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源的回收,例如關閉文件等。

D.引用變量被final修飾之后,不能再指向其他對象,它指向的對象的內容也是不可變的。

解析:

  finalize方法一個對象只能執行一次,只能在第一次進入被回收的隊列,而且對象所屬於的類重寫了finalize方法才會被執行。

  使用 final 關鍵字修飾一個變量時,引用變量不能變,引用變量所指向的對象中的內容還是可以改變的。

 

9、關於下面一段代碼,以下說法正確的是: () 正確答案: A C

public class Test {
    private synchronized void a() {
    }
    private void b() {
        synchronized (this) {
        }
    }
    private synchronized static void c() {
    }
    private void d() {
        synchronized (Test.class) {
        }
    }
}
A.同一個對象,分別調用方法a和b,鎖住的是同一個對象
B.同一個對象,分別調用方法a和c,鎖住的是同一個對象
C.同一個對象,分別調用方法b和c,鎖住的不是同一個對象
D.同一個對象,分別調用方法a、b、c,鎖住的不是同一個對象

解析:

  • 同步代碼塊(synchronized(this),synchronized(類實例對象),鎖是小括號()中的實例對象)
  • 同步非靜態方法(synchronized method),鎖的是當前對象的實例對象
  • 同步代碼塊(synchronized(類.class)),鎖是最小括號 () 中的類對象(Class對象)
  • 同步靜態方法(synchronized static method),鎖是當前對象的類對象(Class 對象)

10、對於下面這段代碼,以下說法正確的是:正確答案: C 

public class Test
{
    public int x;
    public static void main(String []args)
    {
        System. out. println("Value is" + x);
    }
}
A.程序會打出 "Value is 0"
B.程序會拋出 NullPointerException
C.非靜態變量不能夠被靜態方法引用
D.編譯器會拋出 "possible reference before assignment"的錯誤

解析:

  當類加載時,static靜態方法隨着類加載而初始化,此時實例對象還未被創建,但是非靜態成員變量需要等到實例對象創建才會被初始化,故無法被引用。

11、哪個類可用於處理 Unicode? 正確答案: A 

A.InputStreamReader
B.BufferedReader
C.Writer
D.PipedInputStream

解析:  

  InputStreamReader是將字節流轉換成字符流供我們使用。同時InputStreamReader可以指定字符集的編碼。 

  InputStreamReader(InputStream in, String charsetName)  : 創建使用指定字符集的 InputStreamReader。

12、說明輸出結果。正確答案: C

import java.util.Date; 
public class SuperTest extends Date{ 
    private static final long serialVersionUID = 1L; 
    private void test(){ 
       System.out.println(super.getClass().getName()); 
    } 
      
    public static void main(String[]args){ 
       new SuperTest().test(); 
    } 
}
A.SuperTest
B.SuperTest.class
C.test.SuperTest
D.test.SuperTest.class

解析:

  super.getClass().getName()   返回:包名+類名

 

13、下面的代碼輸出的結果為正確答案: A

public class Test1 {
    static int cnt = 6;
    static {
        cnt += 9;
    }
    public static void main(String[] args) {
        System.out.println("cnt =" + cnt);
    }
    static {
        cnt /= 3;
    }
}
A.cnt=5
B.cnt=2
C.cnt=3
D.cnt=6

解析:

  本題考查初始化順序:  

(1)父類靜態成員和靜態初始化塊,按在代碼中出現的順序依次執行。
(2)子類靜態成員和靜態初始化塊,按在代碼中出現的順序依次執行。
(3)父類實例成員和實例初始化塊,按在代碼中出現的順序依次執行。
(4)執行父類構造方法。
(5)子類實例成員和實例初始化塊,按在代碼中出現的順序依次執行。
(6)執行子類構造方法。

14、一個容器類數據結構,讀寫平均,使用鎖機制保證線程安全。如果要綜合提高該數據結構的訪問性能,最好的辦法是______。

正確答案: C  

A.只對寫操作加鎖,不對讀操作加鎖
B.讀操作不加鎖,采用copyOnWrite的方式實現寫操作
C.分區段加鎖
D.無法做到

解析:

  選項A,只對寫操作加鎖,不對讀操作加鎖,會造成讀到臟數據
  選項B,CopyOnWrite的核心思想是利用高並發往往是讀多寫少的特性,對讀操作不加鎖,對寫操作,先復制一份新的集合,在新的集合上面修改,然后將新集合賦值給舊的引用。這里讀寫平均,不適用
  選項C,分段加鎖,只在影響讀寫的地方加鎖,鎖可以用讀寫鎖,可以提高效率,currenthashmap就是分段鎖

15、以下哪些繼承自 Collection 接口()正確答案: A B

A.List
B.Set
C.Map
D.Array

解析:

 

 16、以下代碼可以使用的修飾符是:()正確答案: A B D

public interface Status {
 /*INSERT CODE HERE*/  int MY_VALUE=10;
 }
A.final
B.static
C.abstract
D.public

解析:

  接口中字段的修飾符:public static final(默認不寫)

  接口中方法的修飾符:public abstract(默認不寫)

 

17、Java類Demo中存在方法func1、func2、func3和func4,請問該方法中,哪些是不合法的定義?( ) 正確答案: A D 

public class Demo{
 
  float func1()
  {
    int i=1;
    return;
  }
  float func2()
  {
    short i=2;
    return i;
  }
  float func3()
  {
    long i=3;
    return i;
  }
  float func4()
  {
    double i=4;
    return i;
  }
}
A.func1
B.func2
C.func3
D.func4

解析:

  自動轉換按從低到高的順序轉換。不同類型數據間的優先關系如下:
  byte,short,char ->  int  ->  long  ->  float  ->  double

 

  運算中,不同類型的數據先轉化為同一類型,然后進行運算,轉換規則如下:

操作數 1 類型

操作數 2 類型

轉換后的類型

byte 、 short 、 char

int

int

byte 、 short 、 char 、 int

long

long

byte 、 short 、 char 、 int 、 long

float

float

byte 、 short 、 char 、 int 、 long 、 float

double

double

 

 

 

 

 

 

 

 

 

 

18、以下各類中哪幾個是線程安全的?( )  正確答案: B C D

A.ArrayList
B.Vector
C.Hashtable
D.Stack

解析:

  Stack繼承了Vector,所以也是線程安全的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM