如果一个文件含有两个类,只有一个类可以为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
:私有, 同C++
为防止对数据域的直接修改,数据域应声明为私有,称为数据域封装。同时,为了能访问它们,必须提供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.