1. 如果將類 MyClass 聲明為 public,它的文件名必須是 (? ?) 才能正常編譯。
解:① 如果一個類被聲明為 public,則必須以 .java 作為文件拓展名。
答案:MyClass.java
2. 定義類頭時能使用的修飾符是(? )
A. private? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??????????????? B. static
C. abstract? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????? D. protected
解:
① 普通外部類中可以使用的修飾符:public、abstract,不可以使用的修飾符:private、protected、static;
② private 表示僅自身可見,其他類根本無法引用它;protected 本意為 “自己和子類可用”,而非子類無法看到它;static 表示無主仆,屬于類而非實例。
答案:C
3. 閱讀下列源文件,并回答問題。
public class Person {void speakHello() {System.out.print("您好,很高興認識您");System.out.println(" nice to meet you");}
}class Xiti {public static void main(String args[]) {Person zhang = new Person();zhang.speakHello();}
}
(a) 上述源文件的名字是(? )
(b) 編譯上述源文件將生成的字節碼文件都是(? )
解:核心:
① 源文件名規則判斷:當源文件中包含 public class 時,文件名必須與該 public 類名完全一致(包括大小寫),在后面加 .java
public class Person { ... } // 公有類
源文件必須為 Person.java
② 字節碼文件生成規則:每個獨立類生成一個 .class 文件,找到 class 的那段代碼,字節碼文件為: Person.class、Xiti.class
4.?下列哪個敘述是正確的??
A. 5.0 / 2 + 10 的結果 double 類數據
B. (int)5.8 + 1.0 的結果是 int 數據
C. ‘蘋’ + ‘果’ 的結果是 char 型數據
D. (short)10 + 'a' 的結果是 short 類數據
解:
① 記憶口訣:小算必大,遇雙則雙。“小算必大”,遇到 short / char 這兩個,運算結果必須是 int;遇到含 double 的運算,結果必是 double。
② 小數不加 f,必是 double。
過程:A項,5.0 是 double 類型,/2 后依然是 double 類型,故 A項 正確;B項,1.0 是 double 類型,遇到含 double 的運算,結果一定是 double,所以 B項 錯誤;C 項,char 類型會轉化為 int 類型,故 C項 錯誤;D項,short 類型會自動轉化為 int 類型,故 D項 錯誤。
答案:A
5. 下列的哪個賦值語句是不正確的?
A. float d = 3.14f
B. double d = 5.3E12
C. float f = 11.1
D. double f = 11.1E10f
解:
① double 是默認類型:在 Java 中,如果你直接在代碼里寫一個小數(比如3.14、11.1)或者用科學計數法表示但沒有后綴(比如5.3E12),Java 編譯器會默認它是一個 double 類型的數值。
② float 需要顯示標記:float 類型能表示的小數范圍和精度比 double 小。如果你想要告訴編譯器某個小數是 float 類型,必須在數字后面加上后綴 f 或 F。
③ 大容器裝小東西沒問題,反過來不行:Java 允許將 float 值賦值給 double 變量,但是不允許將 double 值直接賦值給 float 變量。
過程:C項,11.1 默認視為 double 類型,而 float 類型是不能直接賦值給 double 的,故本題為 C項
答案:C
6. 說出下列 E類中 【代碼1】-【代碼2】的輸出結果
class Fish{ int weight = 1; } // Fish類(初始weight=1)class Lake{ Fish fish; void setFish(Fish s){ fish = s; } // 設置魚void foodFish(int m){ fish.weight = fish.weight + m; } // 喂魚(增加重量)
}public class E {public static void main(String args[]) {Fish redFish = new Fish();System.out.println(redFish.weight); //【代碼1】Lake lake = new Lake();lake.setFish(redFish); // 將redFish傳入Lakelake.foodFish(120); // 喂魚System.out.println(redFish.weight); //【代碼2】}
}
解:將代碼一行一行的進行分析:
① 第一段:
class Fish {int weight = 1; // 定義Fish類,所有Fish對象初始重量為1
}
② 第二段:?
class Lake {Fish fish; // Lake類有一個"魚槽"(fish變量),可以存放魚的引用(初始為空)void setFish(Fish s) {fish = s; // 🔄 核心操作:把傳入的魚"遙控器"放進魚槽(不是創建新魚)}void foodFish(int m) {fish.weight = fish.weight + m; // 用魚槽里的遙控器給魚增重}
}
③ 第三段:
public class E {public static void main(String args[]) {// 🌟 第一步:創建紅魚對象Fish redFish = new Fish(); // 在內存中創建1條魚(重量=1)// 這時【代碼1】輸出魚的當前重量:System.out.println(redFish.weight); // 輸出:1 → (1)1 ?// 🌟 第二步:創建湖泊Lake lake = new Lake(); // 創建空湖泊(lake.fish為空)// 🔄 核心操作:把紅魚放進湖泊lake.setFish(redFish); // 相當于把紅魚的"遙控器副本"放進了lake.fish// 現在有兩個引用指向同一條魚:// redFish (你的遙控器)// lake.fish (湖泊的遙控器)// 🍖 第三步:通過湖泊喂魚lake.foodFish(120); // 執行后:魚.weight = 1 + 120 = 121// 此操作通過lake.fish這個遙控器修改了魚的實際重量// 🌟 第四步:再次查看你的紅魚System.out.println(redFish.weight); //【代碼2】// 輸出:121 → (2)121 ?// 因為你的redFish遙控器控制的還是同一條魚}
}
答案:
1
121
7. 下列關于子類的繼承的描述中,錯誤的是(? )
A. 一個子類只允許一個父類
B. 一個父類只能生成一個子類
C. 繼承不改變成員權限
D. 私有成員和構造方法不能繼承
解:
① Java 是單繼承語言,每個子類只能直接繼承一個父類,但是一個父類可以有多個子類繼承它。
② 子類無法直接訪問父類的私有成員,子類也不會繼承父類的構造方法。
答案:B
8. 完成實驗 1:
實驗1 一個簡單的應用程序
一、實驗目的
本實驗的目的是讓學生掌握開發Java應用程序的3個步驟:編寫源文件、編譯源文件和運行應用程序。
二、實驗要求
編寫一個簡單的Java應用程序,該程序在命令行窗口輸出兩行文字:“你好,歡迎學習Java”和“We are students”。
三、程序效果示例
程序運行效果如圖1.1所示。
圖1.1 簡單的應用程序
四、程序模板
請按模板要求,將【代碼】替換為Java程序代碼。
public class Hello {public static void main(String args[]) {[代碼] // 命令行窗口輸出“你好,歡迎學習Java”A a = new A();a.fA();}
}class A {void fA() {[代碼] // 命令行窗口輸出“We are students”}
}
解:
① 如果要使用兩個 class 來運行,那么下面的 class A 要改成 public class A,之后運行 Hello.java? 的 java.application
② 如果是寫成 class A ,那么只用創建一個 class 即可。