1. 程式人生 > >Java SE 易錯題

Java SE 易錯題

一、初始JAVA

1Java虛擬機器就是一個虛擬的用於執行  位元組碼檔案         的計算機。它是Java最核心的技術,是Java跨平臺的基礎。

2一個Java源程式是由若干個類組成。如果原始檔中有多個類時,則只能有一個類是

  Public        類,並且這個類必須與原始檔名同名。

3

以下選項中關於Java跨平臺原理的說法正確的是(AC  )。(選擇二項)

A

Java源程式要先編譯成與平臺無關的位元組碼檔案(.class),然後位元組碼檔案再被解釋成機器碼執行

B.

Java的跨平臺原理決定了其效能比C/C++高

C.

Java虛擬機器是可執行Java位元組碼檔案的虛擬計算機。不同平臺的虛擬機器是不同的,但它們都提供了相同的介面

D.

Java語言具有一次編譯,到處執行的特點,可以在所有的平臺上執行

4

在Java中,原始檔Test.java中包含如下程式碼,則程式編譯執行的結果是(  B  )。(選擇一項)

publicclass Test {

publicstaticvoid main(String[ ] args) {

system.out.println("Hello!");

}

}

A

輸出:Hello

B.

編譯出錯,提示“無法解析system

C.

執行正常,但沒有輸出任何內容

D.

執行時出現異常

System首字母大寫

5、Java具有一次編譯,到處執行的特點,其含義是Java的原始碼可以一次性編譯成計算機的機器碼,並在不同的平臺上執行。( 

     應該是位元組碼。

6、Java的位元組碼檔案的副檔名是class,是一種平臺獨立的非二進位制檔案。錯 )-

是一個與平臺無關的二進位制檔案。

二、資料型別和運算子:

1使用位運算子來實現運算效率最高,所以最有效率的方法算出2乘以8等於多少的語句是       2<<3             

2基本資料型別的型別轉換中,要將double型別的常量3.14159賦給為整數型別變數n的語句是_____int n=(int)3.14159;________________

3

下面的賦值語句中錯誤的是( A   )。(選擇一項)

A

float f = 11.1;    

B.

double d = 5.3E12;

C.

double d = 3.14159;

D.

double d = 3.14D;

4

如下寫法哪些是不對的(BD )(選擇二項)

A

byte b = 30;

B.

byte c = 500;

C.

long d = 2343223;

D.

float f = 3.14;

5char型別變數可以儲存一個Unicode字元,在記憶體中佔2個位元組,該字元可以是一個漢字。(    

6^ 是異或位運算子,運算規則是如果兩個運算元相同,結果是0,否則結果是1對 )

7賦值運算子優先級別低於條件運算子,條件運算子優先級別低於算術運算子。(對   )

8賦值和條件運算子是運算級別最低的兩種運算子,都具有自右向左的結合性。(    

900101010 & 00010111語句的執行結果為00111111(    

三、選擇語句+迴圈語句

1for迴圈的語法格式是for (表示式1;表示式2;表示式3) {迴圈體},其中在整個迴圈過程中只執行一次的部分是  表示式1         

2

以下程式碼的執行結果是( B   )。(選擇一項)  ???

if(m = false){

System.out.println("false");

}else{

System.out.println("true");

}

A.

false

B.

true

C.

編譯錯誤

D.

無結果

3.

閱讀下列檔案定入的Java程式碼,其執行結果是(  D   )。(選擇一項)

public class Test {

public static void main(String[] args) {

char ch = 'c';

switch (ch) {

    case 'a':

    System.out.print("a"); break;

    case 'b':

    System.out.print("ab");

    case 'c':

    System.out.print("c");

    default:

    System.out.print("d");

}

}

}

A

a

B.

b

C.

c

D.

cd

4.

以下Java程式編譯執行後的輸出結果是( B   )。(選擇一項)

public class Test {

public static void main(String[] args) {

int i = 0, sum = 0;

while (i <= 10) {

sum += i;

i++;

if (i % 2 == 0)

continue;

}

System.out.println(sum);

}

}

A

0

B.

55

C.

50

D.

36

5.

Java中有如下程式碼,則編譯執行該類的輸出結果是( D   )。(選擇一項)

publicstaticvoid main(String[ ] args) {

for(inti=0;i<10;i++){

if (i%2!=0) 

return;

System.out.print(i);

}

}

A

13578

B.

02468

C.

0123456789

D.

0

四、多重迴圈+方法

1.

分析下面的Java多重迴圈程式碼片段,編譯執行後的輸出結果是(D    )。(選擇一項)

for (int i = 0; i < 6; i++) {

int k = ++i;

while (k < 5) {

System.out.print(i);

break;

}

}

A.

024

B.

02

C.

123

D.

13

2.

給定如下Java程式碼,編譯執行的結果是(b    )。(選擇一項)

public class Test {

public static void main(String[] args) {

int sum=0;

for(int i=1;i<10;i++){

do{

i++;

if(i%2!=0)

sum+=i;

}while(i<6);

}

System.out.println(sum);

}

}

A

8

B.

15

C.

24

D.

什麼也不輸出

3.

Java的程式類中如下方法定義正確的是(  ad  )。(選擇兩項)

A

publicint ufTest(int num){

int sum=num+100;

return sum;

}

B.

public String ufTest(int num){

int sum=num+100;

return sum;

}

C.

publicvoid ufTest(int num){

int sum=num+100;

return sum;

}

D.

publicfloat ufTest(int num){

int sum=num+100;

return sum;

}

4.

以下關於方法呼叫的程式碼的執行結果是( b   )。(選擇一項)

public class Test {

public static void main(String args[]) {

int i = 99;

mb_operate(i);

System.out.print(i + 100);

}

static void mb_operate(int i) { i += 100;   }

}

A.

99 

B.

199

C.

299

D.

99100

五、陣列

1建立陣列後,系統會給每一個數組元素一個預設的值,如String型別元素的預設值是____NULL________

2

Java中,以下程式段能正確為陣列賦值的是( AD    )。(選擇二項)

A

int a[]={1,2,3,4};

B.

int b[4]={1,2,3,4};

C.

int c[];c={1,2,3,4};

D.

int d[];d=new int[]{1,2,3,4};

3

陣列元素的索引可以是(D    )。(選擇一項)

A

整型常量

B.

整型變數

C.

整型表示式

D.

以上都可以

4、

Java中,以下定義陣列的語句正確的是(  Cd  )。(選擇二項)

A

int  t[10]=new int[ ];

B.

char [ ]a=”hello”; 

C.

String [ ] s=new String [10];

D.

double[ ] d [ ]=new double [4][ ]; 

5

以下選項中能夠正確建立一個數組的是( AD   )。(選擇二項)

A.

float []f[] = new float[6][6];

B.

float f[][] = new float[][];

C.

float [6][]f = new float[6][6];

D.

float [][]f = new float[6][];

6

下面的陣列定義哪些是正確的?(CD   )。(選擇二項)

A

int  a[][] = new int[3,3];

B.

int  a[3][3] = new int[][];

C.

int  a[][] = new int[3][3];

D.

int  []a[] = new int[3][3];

7陣列可以宣告為任何資料型別,包括任何基本資料型別和引用資料型別。( 對   

六、類和物件

1執行Person p = new Person();語句後,將在___堆記憶體________中給Person物件分配空間,並在棧記憶體中給引用變數p分配空間,存放Person物件的引用。

2  package       關鍵字作為Java原始檔的第一條非註釋性語句,指明該原始檔定義的類所有的包。

3

分析如下Java程式的程式碼所示,則編譯執行後的輸出結果是(C    )。(選擇一項)

publicclass Test {

int count=9;

publicvoid count1(){

count=10;

System.out.println("count1="+count);

}

publicvoid count2(){

System.out.println("count2="+count);

}

publicstaticvoid main(String[ ] args) {

Test t=new Test();

t.count1();

t.count2();

}

}

A

count1=9;

count2=9;

B.

count1=10;

count2=9;

C.

count1=10;

count2=10;

D.

count1=9;

count2=10;

在成員方法裡修改成員變數的值後,值就變了。

4

下列選項中關於Java中類方法的說法錯誤的是(  AC   )。(選擇二項)

A

在類方法中可用this來呼叫本類的類方法 

B.

在類方法中呼叫本類的類方法時可直接呼叫

C.

在類方法中只能呼叫本類中的類方法

D.

在類方法中呼叫例項方法需要先建立物件

5如果沒有為類中的某些成員賦初始值,Java會為類成員賦予固定的初始值,如數值變數的值為0,布林變數的值為true,未初始化的引用為null。(     

布林變數的值為false.

6Java中所有的變數,不管是成員變數還是區域性變數,在使用前都必須進行初始化。(    

成員變數會自動初始化。

7Java中物件可以賦值,只要使用賦值運算子即可,相當於生成了一個各屬性與賦值物件相同的新物件。( 錯   

物件儲存的是地址。引用型別只有一份真實資料。所有還是同一個物件。

8、構造方法用於建立物件,一般不允許有任何返回值,因此需要在構造方法返回型別處標註為void。( 錯   

   構造方法沒有返回值型別

9畫出如下程式的記憶體結構:

class Engine {

int speed;

int weight;

}

class Car {

staticint tyreNum = 4;

Engine engine;

String color; // char sequence :字元序列

void changeColor(String c) {

color = c;

}

void showColor() {

System.out.println("我的顏色是:" + color);

}

}

//測試類和物件

publicclass TestObject {

publicstaticvoid main(String[] args) {

Car c1 = new Car();

c1.changeColor("紅色");

c1.showColor();

System.out.println(Car.tyreNum);

System.out.println(c1.tyreNum);

Car c2 = new Car();

Engine e = new Engine();

e.speed = 1000;

e.weight = 10;

c2.engine = e;

c2.color = "黑色";

c2.tyreNum = 10;

System.out.println(c1.tyreNum);

}

}

 

七、封裝作業:

1.

使用許可權修飾符( C   )修飾的類的成員變數和成員方法,可以被當前包中所有類訪問,也可以被它的子類(同一個包以及不同包中的子類)訪問。(選擇一項)

A

public

B.

protected

C.

預設

D.

private

2.

給出如下程式碼,如何使成員變數m被方法fun()直接訪問(  C  )。(選擇一項)

class Test {

private int m;

public static void fun() {

}

}

A

將private int m 改為protected int m

B.

將private int m 改為public int m

C.

將private int m 改為static int m

D.

將private int m 改為int m

解析:此題考點-----成員變數如何在靜態方法內訪問

靜態方法----優先在方法區開闢空間,非靜態成員變數在本類物件建立時才會

在堆記憶體中開闢空間,一個是先開闢另一個是後開闢,所以不能直接訪問。

靜態方法內訪問成員變數兩種方式:

   其一:成員變數前加static ,其二:建立物件進行呼叫。

八、繼承作業

1

以下關於thissuper關鍵字的說法錯誤的是( BD   。(選擇二項)

A.

this關鍵字指向當前物件自身,super關鍵字指向當前物件的直接父類

B.

main方法中可以存在thissuper關鍵字,但不能同時存在。

C.

this和super關鍵字都可以訪問成員屬性,成員方法和構造方法

D.

在一個類的構造方法中可以同時使用thissuper來呼叫其他構造方法

解析:此題考點----this  super關鍵字

選項Athis代表本類物件的一個引用,super代表本類直接父類的一個引用

選項B:靜態方法、靜態程式碼塊等,不允許使用this  super關鍵字。

        因為:靜態方法等優先開闢空間,在使用this時,物件可能還沒有

        建立,所以JVM不允許在靜態方法、靜態程式碼塊中使用他們。

選項Cthis  super代表的是一個引用,可以呼叫類的屬性和方法。

選出D:類的構造方法,首行要麼是使用this,要麼使用super,只能是二選一

2

以下Java程式編譯執行後的輸出結果是(  A  )。(選擇一項)

class HelloA {

public HelloA( ) {

System.out.println("HelloA");

}

{   System.out.println("I'm A class");

}

static {

System.out.println("static A");// ① 

}

}

public class HelloB extends HelloA {

public HelloB( ) {

System.out.println("HelloB");

}

{   System.out.println("I'm B class");

}

static {

System.out.println("static B");// 

}

public static void main(String[] args) {

new HelloB( );

}

}

A

static A

static B

I'm A class

HelloA

I'm B class

HelloB

C.

static A

I'm A class

HelloA

static B

I'm B class

HelloB

B.

static A

static B

I'm A class

I'm B class

HelloA

HelloB

D

static A

static B

HelloA

HelloB 

I'm A class

I'm B class

解析:此題考點-----構造方法、普通程式碼塊、靜態程式碼塊

      構造方法---使用new關鍵字進行呼叫。

              ---執行子類的構造方法時,JVM先執行一次父類的構造方法。

      普通程式碼塊-----從屬於物件,只有建立物件時才會開闢空間執行程式碼。

      靜態程式碼塊-----優先建立物件時,在方法區內開闢空間。

      三者的優先順序順序:

         靜態程式碼塊   >  普通程式碼塊  >  構造方法

      綜上所述,得出結論: A

3

下列選項中關於Javasuper關鍵字的說法正確的是(  AD   。(選擇二項)

A

super關鍵字是在子類物件內部指代其父類物件的引用

B.

super關鍵字不僅可以指代子類的直接父類,還可以指代父類的父類

C.

子類通過super關鍵字只能呼叫父類的方法,而不能呼叫父類的屬性

D.

子類通過super關鍵字可以呼叫父類的構造方法

解析:此題考點-----super關鍵字

選項A: super作為子類直接父類物件的一個引用存在,正確;

選項B:super只能引用子類的直接父類物件,不能一次引用父類的父類。

選項C:為了區分父類和子類重複的屬性或方法時,可以使用super進行分割槽

選項D:允許使用super呼叫父類的構造方法,則必須是在首行進行呼叫。

4對子類例項化物件需要呼叫超類的建構函式進行初始化工作,完成對子類中的超類例項變數的初始化,則子類可以繼承超類的建構函式。(  ×  )

解析: 構造方法,子類只能呼叫,不能繼承

5父類Person中定義了一個private void show()的方法,那麼子類要重寫這個方法時,方法的訪問修飾符可以是預設的,protectedpublic。(  ×  

解析:父類私有的方法,子類不能繼承,同時也不能重寫。

方法的重寫,是建立在繼承的基礎之上,既然不能繼承就無談重寫。

但是私有方法,允許在本類中進行過載,對許可權修飾符沒有限制。

6構造方法中,第一句話總是super。( × )

解析:不一定是使用super,也可以使用this關鍵字呼叫本類其他物件。

 

7Object類有一個public方法是toString( ),一個物件通過呼叫該方法可以獲得該物件的字串表示。(  √  )

解析:此題考點------Object類的toString方法

      此方法目的: 讓子類進行重寫,重寫之後就不會再輸出物件在記憶體當中的

                   地制值,而是物件所包含的具體內容。

Object 類的 toString 方法返回一個字串,該字串由類名(物件是該類的一個例項)、at 標記符“@”和此物件雜湊碼的無符號十六進位制表示組成。換句話說,該方法返回一個字串,它的值等於: 

getClass().getName() + '@' + Integer.toHexString(hashCode())

九、多型作業

1.

編譯執行如下Java程式碼,輸出結果是(  D   )。(選擇一項)

class Base {

public void method(){

System.out.print ("Base method");

}

}

class Child extends Base{

public void methodB(){

System.out.print ("Child methodB");

}

}

class Sample {

public static void main(String[] args) {

Base base= new Child();

base.methodB();

}

}

A

Base method

B.

Child methodB

C.

Base method

Child methodB

D.

編譯錯誤

解析:此題考點-----物件的多型和父類物件能否呼叫子類方法。

      子類: 在父類中只要不是使用private修飾,子類都可以繼承,子類

             都可以呼叫。

      父類: 父類物件只能呼叫自身的方法,子類的方法和屬性無權呼叫;

             如果父類的某個方法,被子類重寫,那麼父類物件呼叫這個方

             法時,呼叫的是被子類重寫之後的方法。

             此種情況的前提: 使用物件的向上轉型來建立父類物件。

       通過發現,父類物件再呼叫子類的方法,明顯的編譯錯誤。

十、抽象類+介面

1.

Person類和Test類的程式碼如下所示,則程式碼中的錯誤語句是( C   )。(選擇一項)

publicclass Person {

public String name;

public Person(String name) {

this.name = name;

}

}

publicclass Test {

publicstaticvoid main(String[] args) {

final Person person = new Person("歐歐");

        person.name = "美美";

        person = new Person("亞亞");

    }

A.

final Person person = new Person("歐歐");

B.

person.name = "美美";

C.

person = new Person("亞亞");

D.

沒有錯誤

解析:

 final Person person = new Person("歐歐");  person是一個final修飾的物件,所以它的記憶體地址不能改變

此題考點----final關鍵字

      可以修飾類,此類變為終結類,不能有子類。例如:System Math

      可以修飾變數,此變數變為常量,值不能再改變。

      可以修飾方法,此方法不能被重寫,允許被過載。

      可以修飾物件,此物件引用地址不能再改變,但是物件的值允許改變

 

2.