[Java] Introduction to Java Programming 筆記 Chapter 9. 物件和類
阿新 • • 發佈:2019-01-09
如果一個檔案含有兩個類,只有一個類可以為public,public 類和檔名同名,但此檔案編譯後,將生成兩個.class 檔案,一個類對應一個class檔案。
匿名物件:建立一個物件,但是並不將其引用賦給變數
new Circle();
// or
System.out.println("Area is " + new Circle(5).getArea());
資料域的預設值:
- 引用型別:
null
- 數值型別:
0
- boolean型別:
false
- char:
\u0000
區域性變數沒有預設值。
可見性修飾符:
public
: 對任意類可見,使用時仍要加 import
省略:對當前package可見
private
為防止對資料域的直接修改,資料域應宣告為私有,稱為資料域封裝。同時,為了能訪問它們,必須提供getter(accessor) 和 setter(mutator)), 約定簽名如下:
// getter
public returnType getPropertyName()
// getter, 因為是返回boolean型別,get變成is
public boolean isPropertyName()
// setter
public void setPropertyName(dataType propertyValue)
物件陣列的宣告和建立:
Circle[] circleArray = new Circle[10];
初始化:
for (int i = 0; i < circleArray.length; i++) {
circleArray[i] = new Circle();
}
物件陣列作為引數傳遞的例子:
public class TotalArea {
/** Main method */
public static void main(String[] args) {
// Declare circleArray
CircleWithPrivateDataFields[] circleArray;
// Create circleArray
circleArray = createCircleArray();
// Print circleArray and total areas of the circles
printCircleArray(circleArray);
}
/** Create an array of Circle objects */
public static CircleWithPrivateDataFields[] createCircleArray() {
CircleWithPrivateDataFields[] circleArray = new CircleWithPrivateDataFields[5];
for (int i = 0; i < circleArray.length; i++) {
circleArray[i] = new CircleWithPrivateDataFields(Math.random() * 100);
}
// Return Circle array
return circleArray;
}
/** Print an array of circles and their total area */
public static void printCircleArray(
CircleWithPrivateDataFields[] circleArray) {
System.out.printf("%-30s%-15s\n", "Radius", "Area");
for (int i = 0; i < circleArray.length; i++) {
System.out.printf("%-30f%-15f\n", circleArray[i].getRadius(),
circleArray[i].getArea());
}
System.out.println("—————————————————————————————————————————-");
// Compute and display the result
System.out.printf("%-30s%-15f\n", "The total area of circles is", sum(circleArray));
}
/** Add circle areas */
public static double sum(CircleWithPrivateDataFields[] circleArray) {
// Initialize sum
double sum = 0;
// Add areas to sum
for (int i = 0; i < circleArray.length; i++)
sum += circleArray[i].getArea();
return sum;
}
}
輸出結果:
Radius Area
89.893550 25386.740016
97.250042 29711.834270
62.785025 12384.030480
29.297762 2696.613926
2.639443 21.886411
—————————————————————————————————————————
The total area of circles is 70201.105103
以下4段程式碼:
A.
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = null;
m1(date);
System.out.println(date);
}
public static void m1(Date date) {
date = new Date();
}
}
輸出:
null
B.
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date(1234567);
m1(date);
System.out.println(date.getTime());
}
public static void m1(Date date) {
date = new Date(7654321);
}
}
輸出:
1234567
C.
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date(1234567);
m1(date);
System.out.println(date.getTime());
}
public static void m1(Date date) {
date.setTime(7654321);
}
}
輸出:
7654321
D.
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date(1234567);
m1(date);
System.out.println(date.getTime());
}
public static void m1(Date date) {
date = null;
}
}
輸出:
1234567
下列程式碼有何錯誤?
public class TestClass {
public static void main(String[] args) {
java.util.Date[] dates = new java.util.Date[10]; // 未初始化,初值為null
System.out.println(dates[0]);
// ERROR! java.lang.NullPointerException
System.out.println(dates[0].toString());
}
}
當使用new
操作符建立物件陣列時,陣列中的每一個元素都是一個引用變數,具有預設值null
。
如果一個物件一旦建立,其內容不可變,那麼這個物件稱為不可變物件,對應的類稱為不可變類。不可變物件和類必須滿足的條件:
- 所有的資料域必須為私有
- 不能有setter
- getter不允許返回可變資料域的引用。
Introduction to Java Programming 10th.