2017-9-13 筆試真題

1.假設 a 是一個由線程 1 和線程 2 共享的初始值爲 0 的全局變量,
則線程 1 和線程 2 同時執行下面的代碼,最終 a 的結果不可能是()
 -1 -2 0 1   正確答案: D  
boolean isOdd = false;
for(int i=1;i<=2;++i)
{
if(i%2==1)isOdd = true;
else isOdd = false;
a+=i*(isOdd?1:-1);
}
解析:
isOdd=false-->i=1-->isOdd=true-->a +1
    -->i=2-->isOdd=false-->a -2
線程一: +1  -2  +1  -2    +1  -2
線程二: +1  -2      +1  -2    +1  -2
可能結果:1)兩個線程同時運行 a+1-2=-1;
  2)一個線程的第二次覆蓋另一個線程的寫入 a+1+1-2=0;
  3)一個線程完全落後另一個線程 a+1-2+1-2=-2;

2.關於Float,下列說法錯誤的是()  正確答案: C   
   Float是一個類
   Float在java.lang包中
   Float a=1.0是正確的賦值方法
   Float a= new Float(1.0)是正確的賦值方法
解析:Float是類,float不是類.
     8種基本類型都在java.lang包中
     Float正確複製方式是Float f=1.0f,若不加f會被識別成double型,
     double無法向float隱式轉換.
     Float a= new Float(1.0)是正確的賦值方法,但是在1.5及以上版本
          引入自動裝箱拆箱後,會提示這是不必要的裝箱的警告,
   通常直接使用Float f=1.0f.

3.以下哪個式子有可能在某個進制下成立()?
正確答案: A   
13*14=204 12*34=568 14*14=140 1+1=3

4.以下哪個接口的定義是正確的?( )
正確答案: D   
interface  B
{  void print()  {  } ;}
interface  B
{ static void print() ;}
abstract  interface  B  extends  A1, A2  //A1、A2爲已定義的接口
{ abstract  void  print(){  };}
interface  B
 {  void  print();}
解析:接口中的方法默認爲public abstract,屬性默認爲public static final。接口中的方法不能有實現,Java中類只支持單繼承,而接口可以支持多繼承。
A、C中方法不能有方法體,B中方法前不能有static ;

5.關於類的敘述正確的是()。
正確答案: B   
在類中定義的變量稱爲類的成員變量,在別的類中可以直接使用
局部變量的作用範圍僅僅在定義它的方法內,或者是在定義它的控制流塊中
使用別的類的方法僅僅需要引用方法的名字即可
只要沒有定義不帶參數的構造函數,JVM都會爲類生成一個默認構造函數
解析:
     A在類中定義的變量稱爲類的成員變量,在別的類中不可以直接使用局部變量的,
     類是一個封裝,類的成員只能在類內部使用,外部需要 “對象名.變量名” 來引用。
     C使用別的類的方法需要通過該類的對象引用方法的名字
     D如果類沒有構造方法,JVM會生成一個默認構造方法,
     如果定義了任意類型的構造方法,編譯器都不會自動生成構造方法。

6.閱讀下列程序,選擇哪一個是正確的輸出結果
class HelloA{
public HelloA()
    {
        System.out.println("I’m A class ");
    }
    static
    {
    System.out.println("static A");
    }
}
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();
    }
}
正確答案: C   
static A I’m A class static B I’m B class
I’m A class I’m B class static A static B
static A static B I’m A class I’m B class
I’m A class static A I’m B class static B
解析:該題目中的執行順序:
   父類的靜態變量和靜態塊賦值(按照聲明順序)
   自身的靜態變量和靜態塊賦值(按照聲明順序)
   父類成員變量和塊賦值(按照聲明順序)
   父類構造器賦值
   自身成員變量和塊賦值(按照聲明順序)
   自身構造器賦值
類的靜態代碼塊是屬於類級別,執行優先級高於普通代碼塊>構造函數。
總結就是:父類的靜態代碼塊(包括靜態變量賦值)優先執行,
 然後執行自身的靜態代碼塊,然後執行父類的普通代碼塊,
 再執行父類的構造函數,然後執行自身的普通代碼塊,
 再執行自身的構造函數。

7.下面有關servlet service描述錯誤的是?
正確答案: B   
不管是post還是get方法提交過來的連接,都會在service中處理
doGet/doPost 則是在 javax.servlet.GenericServlet 中實現的
service()是在javax.servlet.Servlet接口中定義的
service判斷請求類型,決定是調用doGet還是doPost方法
解析:doGet/doPost 則是在 javax.servlet.http.HttpServlet 中實現的

8.如果希望監聽TCP端口9000,應該怎樣創建socket?
正確答案: B   
new Socket("localhost",9000);
new ServerSocket(9000);
new Socket(9000);
new ServerSocket("localhost",9000);
解析:  ServerSocket(int port) 是服務端綁定port端口,
    調accept()監聽等待客戶端連接,它返回一個連接隊列中的一個socket。
       Socket(InetAddress address , int port)是創建客戶端
    連接主機的socket流,其中InetAddress是用來記錄主機的類,
    port指定端口。

9.true、false、null、sizeof、goto、synchronized 哪些是Java關鍵字?
正確答案:goto,synchronized
解析:1. const和goto既是保留字又是關鍵字
     2. 除了const和goto,其餘保留字和關鍵字是嚴格區分開的。
1,Java 關鍵字列表 (依字母排序 共50組):
abstract, assert, boolean, break, byte, case, catch, char, class,
const(保留關鍵字), continue, default, do, double, else, enum,
extends, final, finally, float, for, goto(保留關鍵字), if,
implements, import, instanceof, int, interface, long, native,
new, package, private, protected, public, return, short, static,
strictfp, super, switch, synchronized, this, throw, throws,
transient, try, void, volatile, while
2,保留字列表 (依字母排序 共14組),Java保留字是指現有Java版本
尚未使用,但以後版本可能會作爲關鍵字使用:
byValue, cast, false, future, generic, inner, operator, outer,
rest, true, var, goto (保留關鍵字) , const (保留關鍵字) , null

10.
byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7;
b3=(b1+b2);  /*語句1*/
b6=b4+b5;    /*語句2*/
b8=(b1+b4);  /*語句3*/
b7=(b2+b5);  /*語句4*/
System.out.println(b3+b6);
下列代碼片段中,存在編譯錯誤的語句是()
正確答案: B C D   
語句2
語句1
語句3
語句4
解析:
     Java表達式轉型規則由低到高轉換:
1、所有的byte,short,char型的值將被提升爲int型;
2、如果有一個操作數是long型,計算結果是long型;
3、如果有一個操作數是float型,計算結果是float型;
4、如果有一個操作數是double型,計算結果是double型;
5、被fianl修飾的變量不會自動改變類型,當2個final修飾相操作時,結果會根據左邊變量的類型而轉化。
--------------解析--------------
語句1錯誤:b3=(b1+b2);自動轉爲int,所以正確寫法爲b3=(byte)(b1+b2);或者將b3定義爲int;
語句2正確:b6=b4+b5;b4、b5爲final類型,不會自動提升,所以和的類型視左邊變量類型而定,即b6可以是任意數值類型;
語句3錯誤:b8=(b1+b4);雖然b4不會自動提升,但b1仍會自動提升,所以結果需要強轉,b8=(byte)(b1+b4);
語句4錯誤:b7=(b2+b5); 同上。同時注意b7是final修飾,即只可賦值一次,便不可再改變。  








































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章