Day42--試卷錯題
Java 基礎語法試卷
二、填空題(每題 3 分,共 30 分)
-
已知一個
ArrayList
集合list
,要獲取集合中元素的個數,可以使用list._length_________
方法。××××××××××××××××××××××××××××××××××××
在
ArrayList
集合中,要獲取元素的個數,應該使用的方法是size()
,正確的寫法是list.size()
-
如果要在子類中呼叫父類的構造方法,可以使用__________關鍵字。
在子類中呼叫父類的構造方法,需要使用的關鍵字是 “
super
”,
三、簡答題(每題 10 分,共 30 分)
-
簡述 Java 中
public
、private
、protected
修飾符的作用和區別。public
:被public
修飾的類、成員變數和方法可以在任何類中被訪問,具有最大的訪問許可權,只要能訪問到所在的類,就能訪問其public
成員,常用於對外提供公共的介面或者屬性等,方便其他類進行呼叫和操作。private
:被private
修飾的成員變數和方法只能在其所屬類的內部被訪問,外部類無法直接訪問,這實現了很好的資料封裝和隱藏,讓類內部的資料只能透過類自身提供的公共方法(比如get
、set
方法等)來間接操作,保證了資料的安全性以及類的可維護性。protected
:被protected
修飾的成員變數和方法可以在其所屬類、子類以及同一個包中的其他類中被訪問。它提供了一種介於public
和private
之間的訪問許可權,用於在繼承關係中控制成員的可見性,子類可以繼承並訪問父類中protected
修飾的成員,方便在繼承體系下進行程式碼的擴充套件和複用等情況。
-
解釋 Java 中的異常處理機制,包括
try-catch-finally
語句塊的執行流程。- 首先執行
try
塊中的程式碼,如果在try
塊中沒有發生異常,則跳過catch
塊,直接執行finally
塊(如果有finally
塊),然後繼續執行try-catch-finally
語句塊之後的程式碼。 - 如果在
try
塊中發生了異常,則立即停止try
塊中剩餘程式碼的執行,根據異常的型別去匹配catch
塊中的異常型別,如果匹配成功,則執行對應的catch
塊中的程式碼,處理完異常後,再執行finally
塊(如果有),然後繼續執行try-catch-finally
語句塊之後的程式碼。如果沒有匹配到合適的catch
塊,則異常會向上層丟擲,直到被處理或者導致程式終止。 finally
塊中的程式碼無論是否發生異常都會被執行,通常用於釋放資源等操作,如關閉檔案流、資料庫連線等,哪怕try
塊中使用了return
語句,finally
塊依然會執行,並且如果finally
塊中有return
語句,會覆蓋try
或catch
塊中的return
結果哦(這是個容易混淆的點,也可以提及一下)。
- 首先執行
-
描述 Java 中方法的引數傳遞方式,是值傳遞還是引用傳遞?並舉例說明。
- 回答指出了是值傳遞這點正確,但舉例可以更詳細完善些呀,例如:
- 對於基本資料型別,傳遞的是實際的值,在方法內部對引數的修改不會影響到方法外部的變數。比如:
public class Main { public static void changeValue(int num) { num = 10; } public static void main(String[] args) { int value = 5; changeValue(value); System.out.println(value); // 輸出仍然是 5,因為傳遞的是值的副本,方法內修改不影響外部變數 } }
- 對於引用資料型別,傳遞的是物件的引用地址的副本,雖然在方法內部可以透過引用修改物件的屬性,但如果在方法內部重新賦值引用變數,不會影響到方法外部的引用變數。例如:
public class Main { public static void changeArray(int[] arr) { arr[0] = 10; // 修改陣列元素,透過引用修改了物件(陣列)的屬性,外部能看到變化 arr = new int[]{20, 30}; // 重新賦值引用變數,相當於讓方法內的引用指向了新的陣列物件,不會影響外部的引用 } public static void main(String[] args) { int[] array = {1, 2, 3}; changeArray(array); System.out.println(array[0]); // 輸出 10,因為前面修改了陣列元素生效了,但重新賦值引用沒影響外部引用 } }
- 回答指出了是值傳遞這點正確,但舉例可以更詳細完善些呀,例如:
四、程式設計題(每題 10 分,共 10 分)
編寫一個Java
程式,定義一個Rectangle
類,包含私有屬性length
(長)和width
(寬),提供公共的get
和set
方法用於獲取和設定屬性值,以及一個計算矩形面積的方法getArea
。在main
方法中建立Rectangle
類的物件,設定長和寬的值,並輸出矩形的面積。
package com.liu.exercise;
//一個`Java`程式,定義一個`Rectangle`類,
// 包含私有屬性`length`(長)和`width`(寬),提供公共的`get`和`set`方法用於獲取和設定屬性值,以及一個計算矩形面積的方法`getArea`。
// 在`main`方法中建立`Rectangle`類的物件,設定長和寬的值,並輸出矩形的面積。
public class Rectangle {
private int length;
private int width;
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getArea(int a,int b){
return a*b;
}
public static void main(String[] args) {
Rectangle s1 = new Rectangle();
s1.width=3;
s1.length=7;
System.out.println("要計算的矩形面積為:"+s1.getArea(s1.length, s1.width));
}
}
上面的程式碼有些問題
getArea
方法引數問題:
在Rectangle
類中的getArea
方法,它不應該接收額外的引數a
和b
呀,因為這個方法是用於計算當前Rectangle
物件的面積,它應該直接使用類中的length
和width
屬性來計算,所以方法定義修改為public int getArea() { return length * width; }
更合適,這樣更符合物件導向的設計思路,透過物件自身的屬性來完成相關計算操作。
答案:
一、選擇題
- C 2. A 3. A 4. C 5. A 6. C 7. C 8. A 9. C 10. A
二、填空題
- String
- a + b
- continue
- String msg
- size
- 1, 2, 3
- 平方根
- super
- 自動
- 1
三、簡答題
-
public
:被public
修飾的類、成員變數和方法可以在任何類中被訪問,具有最大的訪問許可權。private
:被private
修飾的成員變數和方法只能在其所屬類的內部被訪問,外部類無法直接訪問,實現了資料的封裝和隱藏。protected
:被protected
修飾的成員變數和方法可以在其所屬類、子類以及同一個包中的其他類中被訪問。它提供了一種介於public
和private
之間的訪問許可權,用於在繼承關係中控制成員的可見性。
-
- Java 的異常處理機制用於處理程式執行過程中可能出現的錯誤情況,使程式能夠更加健壯和穩定。
try-catch-finally
語句塊的執行流程如下:- 首先執行
try
塊中的程式碼,如果在try
塊中沒有發生異常,則跳過catch
塊,直接執行finally
塊(如果有finally
塊),然後繼續執行try-catch-finally
語句塊之後的程式碼。 - 如果在
try
塊中發生了異常,則立即停止try
塊中剩餘程式碼的執行,根據異常的型別去匹配catch
塊中的異常型別,如果匹配成功,則執行對應的catch
塊中的程式碼,處理完異常後,再執行finally
塊(如果有),然後繼續執行try-catch-finally
語句塊之後的程式碼。如果沒有匹配到合適的catch
塊,則異常會向上層丟擲,直到被處理或者導致程式終止。 finally
塊中的程式碼無論是否發生異常都會被執行,通常用於釋放資源等操作,如關閉檔案流、資料庫連線等。
- 首先執行
- Java 中方法的引數傳遞方式是值傳遞。
- 對於基本資料型別,傳遞的是實際的值,在方法內部對引數的修改不會影響到方法外部的變數。例如:
public class Main {
public static void changeValue(int num) {
num = 10;
}
public static void main(String[] args) {
int value = 5;
changeValue(value);
System.out.println(value); // 輸出仍然是 5
}
}
- 對於引用資料型別,傳遞的是物件的引用地址的副本,雖然在方法內部可以透過引用修改物件的屬性,但如果在方法內部重新賦值引用變數,不會影響到方法外部的引用變數。例如:
public class Main {
public static void changeArray(int[] arr) {
arr[0] = 10; // 修改陣列元素
arr = new int[]{20, 30}; // 重新賦值引用變數,不會影響外部的引用
}
public static void main(String[] args) {
int[] array = {1, 2, 3};
changeArray(array);
System.out.println(array[0]); // 輸出 10
}
}
四、程式設計題
class Rectangle {
private double length;
private double width;
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getArea() {
return length * width;
}
}
public class Main {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle();
rectangle.setLength(5.0);
rectangle.setWidth(3.0);
System.out.println("矩形面積為:" + rectangle.getArea());
}
}
你可以根據這份試卷進行自我測試和學習鞏固,如有疑問可以隨時向我提問。