Java编程:引用变量、对象行为与封装
立即解锁
发布时间: 2025-08-18 01:34:23 阅读量: 2 订阅数: 8 


Head First Java: Fun and Engaging Learning Experience
### Java编程:引用变量、对象行为与封装
#### 1. 引用变量与对象匹配问题
在一个风雨交加的夜晚,Tawny走进程序员办公区,希望有人帮忙为关键类添加一个新方法,该方法将被加载到客户的新的Java手机中,且手机内存堆空间紧张。她承诺,谁创建的方法内存效率最高,就带谁去毛伊岛参加客户的发布会并协助安装新软件。
第二天,Bob和Kate展示了他们的方案。
- **Bob的方案**:
```java
Contact [] contacts = new Contact[10];
while (x < 10 ) { // make 10 contact objects
contacts[x] = new Contact();
x = x + 1;
}
// do complicated Contact list updating with contacts
```
Bob表示,虽然内存紧张,但需求要求能访问所有十个联系人的信息,这是他能想出的最佳方案。
- **Kate的方案**:
```java
Contact contactRef;
while ( x < 10 ) { // make 10 contact objects
contactRef = new Contact();
x = x + 1;
}
// do complicated Contact list updating with contactRef
```
Kate认为自己的方案节省了大量引用变量占用的内存。然而,Tawny选择了Bob的方法。原因是Kate的方法存在严重缺陷,虽然使用的引用变量少,但除了最后一个联系人对象,其他九个对象都无法访问。每次循环都会将新对象赋给同一个引用变量,之前引用的对象被留在堆中无法访问,该方法因此无用。
#### 2. 代码练习与谜题解答
- **TestArrays类**:
```java
class TestArrays {
public static void main(String[] args) {
int[] index = new int[4];
index[0] = 1;
index[1] = 3;
index[2] = 0;
index[3] = 2;
String[] islands = new String[4];
islands[0] = "Bermuda";
islands[1] = "Fiji";
islands[2] = "Azores";
islands[3] = "Cozumel";
int y = 0;
int ref;
while (y < 4) {
ref = index[y];
System.out.print("island = ");
System.out.println(islands[ref]);
y = y + 1;
}
}
}
```
该代码通过索引数组访问字符串数组中的元素并输出。
- **Triangle类**:
```java
class Triangle {
double area;
int height;
int length;
public static void main(String[] args) {
int x = 0;
Triangle[] ta = new Triangle[4];
while (x < 4) {
ta[x] = new Triangle();
ta[x].height = (x + 1) * 2;
ta[x].length = x + 4;
ta[x].setArea();
System.out.print("triangle " + x +
", area");
System.out.println(" = " + ta[x].area);
x = x + 1;
}
int y = x;
x = 27;
Triangle t5 = ta[2];
ta[2].area = 343;
System.out.print("y = " + y);
System.out.println(", t5 area = " +
t5.area);
}
void setArea() {
area = (height * length) / 2;
}
}
```
此代码创建了一个三角形数组,计算每个三角形的面积并输出,同时展示了对象引用的使用。
#### 3. 对象行为:方法使用实例变量
对象具有状态和行为,分别由实例变量和方法表示。状态影响行为,行为也影响状态。每个类的实例可以有自己独特的实例变量值。例如,Dog类的不同实例可以有不同的名字和体重,而体重会影响狗的叫声。
```java
class Dog {
int size;
String
```
0
0
复制全文
相关推荐









