Java SE 易錯題
一、初始JAVA
1、Java虛擬機器就是一個虛擬的用於執行 位元組碼檔案 的計算機。它是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; |
5、char型別變數可以儲存一個Unicode字元,在記憶體中佔2個位元組,該字元可以是一個漢字。( 對 )
6、^ 是異或位運算子,運算規則是如果兩個運算元相同,結果是0,否則結果是1。( 對 )
7、賦值運算子優先級別低於條件運算子,條件運算子優先級別低於算術運算子。(對 )
8、賦值和條件運算子是運算級別最低的兩種運算子,都具有自右向左的結合性。( 對 )
9、00101010 & 00010111語句的執行結果為00111111( 錯 )
三、選擇語句+迴圈語句
1、for迴圈的語法格式是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.
6、Java中所有的變數,不管是成員變數還是區域性變數,在使用前都必須進行初始化。( 錯 )
成員變數會自動初始化。
7、在Java中物件可以賦值,只要使用賦值運算子即可,相當於生成了一個各屬性與賦值物件相同的新物件。( 錯 )
物件儲存的是地址。引用型別只有一份真實資料。所有還是同一個物件。
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、 | 以下關於this和super關鍵字的說法錯誤的是( BD )。(選擇二項) | |
A. | this關鍵字指向當前物件自身,super關鍵字指向當前物件的直接父類 | |
B. | 在main方法中可以存在this或super關鍵字,但不能同時存在。 | |
C. | this和super關鍵字都可以訪問成員屬性,成員方法和構造方法 | |
D. | 在一個類的構造方法中可以同時使用this和super來呼叫其他構造方法 解析:此題考點----this super關鍵字 選項A:this代表本類物件的一個引用,super代表本類直接父類的一個引用 選項B:靜態方法、靜態程式碼塊等,不允許使用this super關鍵字。 因為:靜態方法等優先開闢空間,在使用this時,物件可能還沒有 建立,所以JVM不允許在靜態方法、靜態程式碼塊中使用他們。 選項C:this 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、 | 下列選項中關於Java中super關鍵字的說法正確的是( AD )。(選擇二項) | |
A | super關鍵字是在子類物件內部指代其父類物件的引用 | |
B. | super關鍵字不僅可以指代子類的直接父類,還可以指代父類的父類 | |
C. | 子類通過super關鍵字只能呼叫父類的方法,而不能呼叫父類的屬性 | |
D. | 子類通過super關鍵字可以呼叫父類的構造方法 解析:此題考點-----super關鍵字 選項A: super作為子類直接父類物件的一個引用存在,正確; 選項B:super只能引用子類的直接父類物件,不能一次引用父類的父類。 選項C:為了區分父類和子類重複的屬性或方法時,可以使用super進行分割槽 選項D:允許使用super呼叫父類的構造方法,則必須是在首行進行呼叫。 |
4、對子類例項化物件需要呼叫超類的建構函式進行初始化工作,完成對子類中的超類例項變數的初始化,則子類可以繼承超類的建構函式。( × )
解析: 構造方法,子類只能呼叫,不能繼承。
5、父類Person中定義了一個private void show()的方法,那麼子類要重寫這個方法時,方法的訪問修飾符可以是預設的,protected或public。( × )
解析:父類私有的方法,子類不能繼承,同時也不能重寫。
方法的重寫,是建立在繼承的基礎之上,既然不能繼承就無談重寫。
但是私有方法,允許在本類中進行過載,對許可權修飾符沒有限制。
6、構造方法中,第一句話總是super。( × )
解析:不一定是使用super,也可以使用this關鍵字呼叫本類其他物件。
7、Object類有一個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. |