java筆記---javase常見易錯筆試題及答案(長期更新)

1、下列java程序的輸出結果爲____。

public class Example{
    String str=new String("hello");
    char[]ch={'a','b'};
    public static void main(String args[]){
        Example ex=new Example();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str+" and ");
        System.out.print(ex.ch);
    }
    public void change(String str,char ch[]){
        str="test ok";
        ch[0]='c';
    }
}

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

A. hello and ab
B. hello and cb
C. hello and a
D. test ok and ab
E. test ok and cb
F. test ok and c

解析:
String類是不可變的,不能繼承和修改這個類。str=“tesk ok”,其實是隱含的讓Java生成一個新的String對象,那麼就與原來的“Hello”沒有任何關係,當函數結束,str作用結束,所以輸出的還是“Hello”。 char ch[] 是傳遞引用,修改了原內容。

2、給出以下代碼

public class TestObj{
    public static void main(String[] args){
        Object o=new Object(){
            public boolean equals(Object obj){
                return true;
            }
        };
        System.out.println(o.equals(“Fred”));
    }
}

請給出結果:()
正確答案: B 你的答案: D (錯誤)

A. 運行時拋出異常
B. true
C. Fred
D. 第三行編譯錯誤

解析:創建了一個匿名內部類,並將所創建的匿名對象賦給 Objec同時,該匿名內部類重寫了 Object 類的 equals 方法。任何情況下都返回true。

3、關於protected 修飾的成員變量,以下說法正確的是
正確答案: A 你的答案: B (錯誤)

A. 可以被該類自身、與它在同一個包中的其它類、在其它包中的該類的子類所訪問
B. 只能被該類本身和該類的所有的子類訪問
C. 只能被該類自身所訪問
D. 只能被同一個包中的類訪問

解析:

                public   protected   默認   private
同一個類            Y          Y       Y        Y
同一個包            Y          Y       Y        N
不同包的子類         Y          Y       N        N
不同包的非子類       Y          N       N        N

4、下面哪種情況會導致持久區jvm堆內存溢出?
正確答案: C 你的答案: D (錯誤)

A. 循環上萬次的字符串處理
B. 在一段代碼內申請上百M甚至上G的內存
C. 使用CGLib技術直接操作字節碼運行,生成大量的動態類
D. 不斷創建對象

解析:

java的堆內存分爲兩塊:permantspace(持久帶) 和 heap space。
持久帶中主要存放用於存放靜態類型數據,如 Java Class, Method 等, 與垃圾收集器要收集的Java對象關係不大。
而heapspace分爲年輕帶和年老帶 
年輕代的垃圾回收叫 Young GC, 年老代的垃圾回收叫 Full GC。
在年輕代中經歷了N次(可配置)垃圾回收後仍然存活的對象,就會被複制到年老代中。因此,可以認爲年老代中存放的都是一些生命週期較長的對象
年老代溢出原因有  循環上萬次的字符串處理、創建上千萬個對象、在一段代碼內申請上百M甚至上G的內存,既A B D選項
持久代溢出原因  動態加載了大量Java類而導致溢出

5、執行以下程序,最終輸出可能是:
*代表空格
正確答案: C 你的答案: B (錯誤)

A. 010 2123012 3434
B. 01201 340124 2334
C. 0012314 01223344**
D. 12345 12345 12345

解析:

第一個空格之前必然有 0 1 2 3 4 這四個數字,這是因爲第一個空格出現,意味着第一個線程執行完畢,
必然會打印這四個數字。又因爲線程併發執行,所以後面兩個線程個別數字可能會提前打印。

6、下面哪個不對?
正確的答案:C你的答案:A (錯誤)

A. RuntimeException是在Java虛擬機的正常操作期間可能引發的那些異常的超類。
B. 方法不需要在其throws子句中聲明在方法執行期間可能拋出但未被捕獲的RuntimeExeption的任何子類。
C. RuntimeException是Throwable的子類,它指示合理的應用程序不應嘗試捕獲的嚴重問題。
D. NullPointerException是RuntimeException的一種

解析:
在這裏插入圖片描述
7、下面哪些賦值語句是正確的()

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

A. long test=012
B. float f=-412
C. int other =(int)true
D. double d=0x12345678
E. byte b=128

解析:

A:012,int轉long,低轉高                                         正確
B:-412,默認是int,int轉float,低轉高                             正確
C:不同的類型不能轉                                                錯誤
D:0x12345678,16進制的123456,默認是int,int轉double,低轉高        正確
E:byte默認範圍是(-128 ~ 127)                                     錯誤

8、java是一門支持反射的語言,基於反射爲Java提供了豐富的動態性支持,下面關於Java反射的描述,哪些是錯誤的:( )
正確答案: A D F 你的答案: B D (錯誤)

A. Java反射主要涉及的類如Class, Method, Filed,等,他們都在java.lang.reflet包下
B. 通過反射可以動態的實現一個接口,形成一個新的類,並可以用這個類創建對象,調用對象方法
C. 通過反射,可以突破Java語言提供的對象成員、類成員的保護機制,訪問一般方式不能訪問的成員
D. Java反射機制提供了字節碼修改的技術,可以動態的修剪一個類
E. Java的反射機制會給內存帶來額外的開銷。例如對永生堆的要求比不通過反射要求的更多
F. Java反射機制一般會帶來效率問題,效率問題主要發生在查找類的方法和字段對象,因此通過緩存需要反射類的字段和方法就能達到與之間調用類的方法和訪問類的字段一樣的效率

解析:

Class在java.lang包下, Java反射機制一般會帶來效率問題,性能會降低。

9、代碼 的運行結果是()

package com.sunline.java;
public class A implements B extends C{
    public static void main(String args[]){
        System.out.println("hello sunline!");
    }
}

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

A. 在控制檯打印hello sunline!
B. 報異常java.lang.NullPoninterException
C. 編譯報錯
D. 報異常java.lang.RuntimeExcception

解析:

Java 中單實現通過 implements 關鍵字,多實現通過 extends 關鍵字。Java 中單繼承通過 extends 關鍵字,沒有多繼承。如果同時出現繼承和實現,則必須先繼承(extends)再實現(implements)

10、下列關於java併發的說法中正確的是:
正確答案: B 你的答案: 空 (錯誤)

A. copyonwritearraylist適用於寫多讀少的併發場景
B. readwritelock適用於讀多寫少的併發場景
C. concurrenthashmap的寫操作不需要加鎖,讀操作需要加鎖
D. 只要在定義int類型的成員變量i的時候加上volatile關鍵字,那麼多線程併發執行i++這樣的操作的時候就是線程安全的了

解析:

CopyOnWriteArrayList適合使用在讀操作遠遠大於寫操作的場景裏,比如緩存。
ReadWriteLock 當寫操作時,其他線程無法讀取或寫入數據,而當讀操作時,其它線程無法寫入數據,但卻可以讀取數據 。適用於 讀取遠遠大於寫入的操作。
ConcurrentHashMap是一個線程安全的Hash Table,它的主要功能是提供了一組和HashTable功能相同但是線程安全的方法。ConcurrentHashMap可以做到讀取數據不加鎖,並且其內部的結構可以讓其在進行寫操作的時候能夠將鎖的粒度保持地儘量地小,不用對整個ConcurrentHashMap加鎖。
volatile只能保證變量的安全,不能保證線程的安全。

11、下面哪些描述是正確的:( )

public class Test {
public static class A {
private B ref;
public void setB(B b) {
ref = b;
}
}
public static Class B {
private A ref;
public void setA(A a) {
ref = a;
}
}
public static void main(String args[]) {
…
start();
….
}
public static void start() { A a = new A();
B b = new B();
a.setB(b);
b = null; //
a = null;
…
}
}

正確答案: B C 你的答案: 空 (錯誤)
A. b = null執行後b可以被垃圾回收
B. a = null執行後b可以被垃圾回收
C. a = null執行後a可以被垃圾回收
D. a,b必須在整個程序結束後才能被垃圾回收
E. 類A和類B在設計上有循環引用,會導致內存泄露
F. a, b 必須在start方法執行完畢才能被垃圾回收

解析:

a引用指向一塊空間,這塊空間裏麪包含着b對象
b引用指向一塊空間,這塊空間是b對象
A選項,b = null執行後b可以被垃圾回收。這裏"b可以被垃圾回收"中的b指的是引用b指向的內存。這塊內存即使不被引用b指向,還是被引用a指向着,不會被回收。
B選項,a = null執行後b可以被垃圾回收。從代碼中可以看到,a = null是在b = null後執行的,該行執行後,引用a和b都沒有指向對象,對象會被回收。
C選項,同理。

12、以下哪種方式實現的單例是線程安全的
正確答案: A B C D 你的答案: B D (錯誤)

A. 枚舉
B. 靜態內部類
C. 雙檢鎖模式
D. 餓漢式

解析:

1.餓漢式(線程安全,調用效率高,但是不能延時加載);
2.懶漢式(線程安全,調用效率不高,但是能延時加載);
3.Double CheckLock實現單例:DCL也就是雙重鎖判斷機制(由於JVM底層模型原因,偶爾會出問題,不建議使用);
4.靜態內部類實現模式(線程安全,調用效率高,可以延時加載); 
5.枚舉類(線程安全,調用效率高,不能延時加載,可以天然的防止反射和反序列化調用)。

13、關於繼承和實現說法正確的 是 ? ( )
正確答案: A 你的答案: B (錯誤)

A. 類可以實現多個接口,接口可以繼承(或擴展)多個接口
B. 類可以實現多個接口,接口不能繼承(或擴展)多個接口
C. 類和接口都可以實現多個接口
D. 類和接口都不可以實現多個接口

解析:

類與類之間的關係爲繼承,只能單繼承,但可以多層繼承。 類與接口之間的關係爲實現,既可以單實現,也可以多實
現。接口與接口之間的關係爲繼承,既可以單繼承,也可以多繼承。

14、下面程序的運行結果:()

public static void main(String args[]) {
        Thread t=new Thread(){
        public void  run(){
            dianping();
             
        }
    };
    t.run();
    System.out.print("dazhong");
    }
    static void dianping(){
        System.out.print("dianping");
}

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

A. dazhongdianping
B. dianpingdazhong
C. a和b都有可能
D. dianping循環輸出,dazhong夾雜在中間

解析:

在上面main()方法中,並沒有創建一個新的線程,只是簡單地方法調用而已,如果想要創建線程,需要t.start();創建線程,等待cpu時間片,而run()方法只是簡單地方法調用,所以先執行run(),在輸出dazhong

15、以下程序段的輸出結果爲:

public class EqualsMethod
{
    public static void main(String[] args)
    {
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.print(n1 == n2);
        System.out.print(",");
        System.out.println(n1 != n2);
    }
}

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

A. false,false
B. false,true
C. true,false
D. true,true

16、假定Base b = new Derived(); 調用執行b.methodOne()後,輸出結果是什麼?

public class Base
{
public void methodOne()
{
System.out.print("A");
methodTwo();
}
 
public void methodTwo()
{
System.out.print("B");
}
}
 
public class Derived extends Base
{
public void methodOne()
{
super.methodOne();
System.out.print("C");
}
 
public void methodTwo()
{
super.methodTwo();
System.out.print("D");
}
}

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

A. ABDC
B. AB
C. ABCD
D. ABC

解析:

不管是methodTwo()還是this.methodTwo()都是父類類型Base 的Derived(多態),只有super纔會直接使用父類的對
象方法,所以父類中的methodTwo()是調用Derived對象的

17、在Java中,對於不再使用的內存資源,如調用完成的方法,“垃圾回收器”會自動將其釋放。( )
正確答案: B 你的答案: A (錯誤)

A. 正確
B. 錯誤

解析:

方法調用時,會創建棧幀在棧中,調用完是程序自動出棧釋放,而不是gc釋放,gc釋放的一般是對象。

18、在JAVA中,下列哪些是Object類的方法()
正確答案: B C D 你的答案: B C D E (錯誤)

A. synchronized()
B. wait()
C. notify()
D. notifyAll()
E. sleep()

解析:

A.Synchronized是一個關鍵字不是方法
E.sleep()是Thread的方法。對了,sleep與wait的區別經常出題

19、
下面程序的輸出是:()

String x="fmn";
x.toUpperCase();
String y=x.replace('f','F');
y=y+"wxy";
System.out.println(y);

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

A. FmNwxy
B. fmnwxy
C. wxyfmn
D. Fmnwxy

解析:

本題主要考察String對象的不可變性。
toUpperCase()會對當前對象進行檢查 如果不需要轉換直接返回當前對象,否則new一個新對象返回;
replace()如果兩個參數相同,則直接返回,否則new一個新對象,所以這裏y指向"Fmn";
y=y+"wxy" 這裏修改y所指向的字符串對象,讓它由指向"Fmn"變成指向"Fmnxyz".

20、運行下面代碼,輸出的結果是()


class A {
    public A() {
        System.out.println("class A");
    }
    { System.out.println("I'm A class"); } 
    static { System.out.println("class A static"); }
}
public class B extends A {
    public B() {
        System.out.println("class B");
    }
    { System.out.println("I'm B class"); }
    static { System.out.println("class B static"); }
     
    public static void main(String[] args) { 
 new B(); 
}
}

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

A. class A static
   class B static
   I'm A class
   class A
   I'm B class
   class B
B. class A static
   I'm A class
   class A
   class B static
   I'm B class
   class B
C. class A static
   class B static
   class A
   I'm A class
   class B
   I'm B class
D. class A static
   class A
   I'm A class
   class B static
   class B
   I'm B class

解析:

Java程序初始化順序:
父類的靜態代碼塊
子類的靜態代碼塊
父類的普通代碼塊
父類的構造方法
子類的普通代碼塊
子類的構造方法

21、下列代碼執行結果爲()

public static void main(String args[])throws InterruptedException{
            Thread t=new Thread(new Runnable() {
                public void run() {
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                    System.out.print("2");
                }
            });
            t.start();
             
            t.join();
            System.out.print("1");
        }

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

A. 21
B. 12
C. 可能爲12,也可能爲21
D. 以上答案都不對

解析:

因爲子線程的休眠時間太長,因此主線程很有可能在子線程之前結束也就是輸出結果是12,但是子線程用了join函
數,因此主線程必須等待子線程執行完畢才結束因此輸出結果只能是21

22、關於Spring MVC的核心控制器DispatcherServlet的作用,以下說法錯誤的是( )?

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

A. 它負責處理HTTP請求
B. 加載配置文件
C. 實現業務操作
D. 初始化上下應用對象ApplicationContext

解析:
在這裏插入圖片描述
23、有一個源代碼,只包含import java.util.* ; 這一個import語句,下面敘述正確的是? ( )
正確答案: C 你的答案: B (錯誤)

A. 只能寫在源代碼的第一句
B. 可以訪問java/util目錄下及其子目錄下的所有類
C. 能訪問java/util目錄下的所有類,不能訪問java/util子目錄下的所有類
D. 編譯錯誤

解析:

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

24、
關於下面的程序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 你的答案: B (錯誤)

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

25、下面有關 java 類加載器,說法正確的是?()
正確答案: A B C D 你的答案: 空 (錯誤)

A. 引導類加載器(bootstrap class loader):它用來加載 Java 的核心庫,是用原生代碼來實現的
B. 擴展類加載器(extensions class loader):它用來加載 Java 的擴展庫。
C. 系統類加載器(system class loader):它根據 Java 應用的類路徑(CLASSPATH)來加載 Java 類
D. tomcat 爲每個 App 創建一個 Loader,裏面保存着此 WebApp 的 ClassLoader。需要加載 WebApp 下的類時,就取出 ClassLoader 來使用

解析:

類的加載是由類加載器完成的,類加載器包括:根加載器( BootStrap )、擴展加載器( Extension )、系統加
載器( System )和用戶自定義類加載器( java.lang.ClassLoader 的子類)。從 Java 2 ( JDK 1.2 )
開始,類加載過程採取了父親委託機制( PDM )。 PDM 更好的保證了 Java 平臺的安全性,在該機制中, JVM 自帶的 Bootstrap 是根加載器,其他的加載器都有且僅有一個父類加載器。類的加載首先請求父類加載器加載,父類加載器無能爲力時才由其子類加載器自行加載。 JVM 不會向 Java 程序提供對 Bootstrap 的引用。下面是關於幾個類加載器的說明:
Bootstrap :一般用本地代碼實現,負責加載 JVM 基礎核心類庫( rt.jar );
Extension :從 java.ext.dirs 系統屬性所指定的目錄中加載類庫,它的父加載器是 Bootstrap ;
system class loader :又叫應用類加載器,其父類是 Extension 。它是應用最廣泛的類加載器。它從環境變量 classpath 或者系統屬性 java.class.path 所指定的目錄中記載類,是用戶自定義加載器的默認父加載器。
用戶自定義類加載器: java.lang.ClassLoader 的子類 
父類委託機制是可以修改的,有些服務器就是自定義類加載器優先的。

26、java 接口的修飾符可以爲()
正確答案: D 你的答案: C (錯誤)

A. private
B. protected
C. final
D. abstract

解析:

接口是通用的,用來描述方法是幹什麼用的,方法的默認修飾符爲public abstract.不可以爲final 是因爲方法要
被重寫, 描述符如果爲private或者protected,那麼子類重寫的方法的描述符也可以爲private或者
protected,這樣就是有了訪問顯示,不符合接口所要達到的的任何人都可以使用了

27、
下列關於計算機系統和Java編程語言的說法,正確的是()

A. 計算機是由硬件、操作系統和軟件組成,操作系統是缺一不可的組成部分。
B. Java語言編寫的程序源代碼可以不需要編譯直接在硬件上運行。
C. 在程序中書寫註釋不會影響程序的執行,可以在必要的地方多寫一些註釋。
D. Java的集成開發環境(IDE),如Eclipse,是開發Java語言必需的軟件工具。

解析:

裸機也可以跑,以前搞嵌入式的時候,並不一定要安裝操作系統,直接操作寄存器就可以了,操作系統不是必須的。
計算機是由硬件和軟件組成,操作系統是軟件部分。
沒有IDE,用txt和javac也可以寫java

28、編譯並執行以下代碼片段的結果是什麼:

Boolean flag = false;
if (flag = true)
{
    System.out.println(true);
}
else
{
    System.out.println(false);
}

正確的答案:C你的答案:空 (錯誤)

A. 該代碼無法在“ if”語句處編譯。
B. 運行時在“ if”語句中引發異常。
C. 顯示文本“ true”。
D. 顯示文本“ false”。
E. 什麼都沒有顯示。
if(flag = true{
}
中,只是一個賦值語句=======》隱含條件爲
if((flag = true== true{
}

29、What will happen when you attempt to compile and run the following code?

public class Test{
static{
   int x=5;
}
static int x,y;
public static void main(String args[]){
   x--;
   myMethod( );
   System.out.println(x+y+ ++x);
}
public static void myMethod( ){
  y=x++ + ++x;
 }
}

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

A. compiletime error
B. prints:1
C. prints:2
D. prints:3
E. prints:7
F. prints:8

解析:

1.靜態語句塊中x爲局部變量,不影響靜態變量x的值
2.x和y爲靜態變量,默認初始值爲0,屬於當前類,其值得改變會影響整個類運行。
3.java中自增操作非原子性的 
main方法中:
執行x--後 x=-1
調用myMethod方法,x執行x++結果爲-1(++),但x=0++x結果1,x=1 ,則y=0
x+y+ ++x,先執行x+y,結果爲1,執行++x結果爲2,得到最終結果爲3

30、局部內部類可以用哪些修飾符修飾?
正確答案: C D 你的答案: B D (錯誤)

A. public
B. private
C. abstract
D. final

解析:
在這裏插入圖片描述
31、關於依賴注入,下列選項中說法錯誤的是()

A. 依賴注入能夠獨立開發各組件,然後根據組件間關係進行組裝
B. 依賴注入使組件之間相互依賴,相互制約
C. 依賴注入提供使用接口編程
D. 依賴注入指對象在使用時動態注入

解析:

依賴注入(Dependency Injection,簡稱DI)是一個重要的面向對象編程的法則來削減計算機程序的耦合問題。

32、AccessViolationException異常觸發後,下列程序的輸出結果爲( )

static void Main(string[] args)  
{  
    try  
    {  
        throw new AccessViolationException();  
        Console.WriteLine("error1");  
    }  
    catch (Exception e)  
    {  
        Console.WriteLine("error2");  
    }  
    Console.WriteLine("error3");  
} 

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

A. error2
    error3
B. error3
C. error2
D. error1

33、以下說法錯誤的是()

A. 虛擬機中沒有泛型,只有普通類和普通方法
B. 所有泛型類的類型參數在編譯時都會被擦除
C. 創建泛型對象時請指明類型,讓編譯器儘早的做參數檢查
D. 泛型的類型擦除機制意味着不能在運行時動態獲取List<T>中T的實際類型

解析:

D通過反射可以得到。

34、在java中重寫方法應遵循規則的包括()
正確答案: B C 你的答案: A C (錯誤)

A. 訪問修飾符的限制一定要大於被重寫方法的訪問修飾符
B. 可以有不同的訪問修飾符
C. 參數列表必須完全與被重寫的方法相同
D. 必須具有不同的參數列表

解析:

方法的重寫(override)兩同兩小一大原則:
方法名相同,參數類型相同
子類返回類型小於等於父類方法返回類型,
子類拋出異常小於等於父類方法拋出異常,
子類訪問權限大於等於父類方法訪問權限。

35、java運行時內存分爲“線程共享”和“線程私有”兩部分,以下哪些屬於“線程共享”部分
正確答案: B D 你的答案: A B D (錯誤)

A. 程序計算器
B. 方法區
C. java虛擬機棧
D. java堆

解析:

私有線程區域:程序計數器、虛擬機棧、本地方法棧
線程共享區域:堆、方法區

36、關於多線程和多進程,下面描述正確的是():
正確答案: A C 你的答案: A B (錯誤)

A. 多進程裏,子進程可獲得父進程的所有堆和棧的數據;而線程會與同進程的其他線程共享數據,擁有自己的棧空間。
B. 線程因爲有自己的獨立棧空間且共享數據,所有執行的開銷相對較大,同時不利於資源管理和保護。
C. 線程的通信速度更快,切換更快,因爲他們在同一地址空間內。
D. 一個線程可以屬於多個進程。

解析:

1、一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程(通常說的主線程)。
2、資源分配給進程,同一進程的所有線程共享該進程的所有資源。
3、線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。
4、處理機分給線程,即真正在處理機上運行的是線程。
5、線程是指進程內的一個執行單元,也是進程內的可調度實體。

37、以下哪些jvm的垃圾回收方式採用的是複製算法回收
正確答案: A D 你的答案: B E (錯誤)

A. 新生代串行收集器
B. 老年代串行收集器
C. 並行收集器
D. 新生代並行回收收集器
E. 老年代並行回收收集器
F. cms收集器

解析:

複製算法:兩個區域A和B,初始對象在A,繼續存活的對象被轉移到B。此爲新生代最常用的算法
新生代:初始對象,生命週期短的,要清理的對象多。

38、

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 你的答案: A D (錯誤)

A. 語句2
B. 語句1
C. 語句3
D. 語句4

解析:

ava表達式轉型規則由低到高轉換:
1、所有的byte,short,char型的值將被提升爲int型;
2、如果有一個操作數是long型,計算結果是long型;
3、如果有一個操作數是float型,計算結果是float型;
4、如果有一個操作數是double型,計算結果是double型;
5、被fianl修飾的變量不會自動改變類型,當2final修飾相操作時,結果會根據左邊變量的類型而轉化。
--------------解析--------------
語句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修飾,即只可賦值一次,便不可再改變。

39、對於子類的構造函數說明,下列敘述中錯誤的是( )。
正確答案: A 你的答案: D (錯誤)

A. 子類可以繼承父類的構造函數。
B. 子類中調用父類構造函數不可以直接書寫父類構造函數,而應該用super();。
C.new創建子類的對象時,若子類沒有帶參構造函數,將先執行父類的無參構造函數,然後再執行自己的構造函數。
D. 子類的構造函數中可以調用其他函數。

解析:

java繼承中對構造函數是不繼承的,只是顯式或者隱式調用

40、麥秋時節,莊園主僱了個力大無窮的農民來幫他收割田裏的麥子。收穫的勞動量很大,農民必須在七天之內收割完。莊園主答應每天給他一塊金塊作工錢。但是這七塊相等的金子是連在一起的,然而工錢是必須每天結清的。農民不願意莊園主欠帳,而莊園主也不肯預付一天工錢。請問最少掰金子幾次可以完成上述任務?
正確答案: A 你的答案: C (錯誤)

A. 2
B. 3
C. 4
D. 7

41、What results from the following code fragment?

int i = 5;
int j = 10;
System.out.println(i + ~j);

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

A. Compilation error because”~”doesn’t operate on integers
B. -5
C. -6
D. 15

解析:

10原碼:0000000000000000,0000000000001010~101111111111111111,1111111111110101  變爲負數,計算機用補碼存儲
~10反碼:10000000000000000,0000000000001010
~10補碼:10000000000000000,0000000000001011,等於 -11
故程序結果-6

42、針對以下代碼,哪些選項執行後是true的:()

class CompareReference{
   public static void main(String [] args){
   float f=42.0f;
   float f1[]=new float[2];
   float f2[]=new float[2];
   float[] f3=f1;
   long x=42;
   f1[0]=42.0f;
  }
}

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

A. f1==f2
B. x==f1[0]
C. f1==f3
D. f2==f1[1]

解析:

C,f1 == f3,f3沒有new創建,而是由f1賦值,所以f3地址是指向f1的,f1值改變,相當於改變f3值,所以相等。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章