Java问题解决指南
立即解锁
发布时间: 2025-08-18 00:35:31 阅读量: 1 订阅数: 2 


Java编程基础:科学家与工程师的必备技能
### Java 问题解决指南
#### 1. 引言
在以往的编程中,我们常常将所有代码都写在 `main` 方法里。然而,随着程序变得愈发复杂,这种做法会变得难以管理。因此,我们需要一种更好的代码结构方式,而面向对象编程就是一个不错的选择。采用更好的代码结构有诸多原因:
- 当问题变得复杂时,将其分解成小部分逐个解决,比一次性解决整个问题要容易得多。
- 逻辑清晰的代码不仅便于我们自己阅读和理解,也方便其他程序员。
特别是当我们采用面向对象的方式来组织代码时,还会带来更多好处:
- 以对象而非过程的方式思考问题,往往更加自然。虽然对于习惯过程式编程的人来说,一开始可能会觉得不适应,但随着学习的深入,你会逐渐体会到面向对象编程的优势。
- 对象将数据和操作这些数据的方法封装在一起,形成一个逻辑单元。这样的对象是一个独立的单元,其他程序员可以很容易地将其作为组件重复使用,而无需了解其具体实现细节。
- 我们可以使用继承,这是一个强大的概念。
#### 2. 类提供者、类使用者和最终用户
在编写程序时,我们会扮演不同的角色,具体如下表所示:
| 角色 | 描述 |
| ---- | ---- |
| 类提供者 | 编写供其他程序员使用的类的程序员。有时你需要扮演这个角色,编写通用代码供他人(包括你自己)使用。 |
| 类使用者 | 也是程序员,使用类提供者编写的类。有时你可能先扮演类提供者的角色,然后再扮演类使用者的角色来测试类是否正常工作。 |
| 最终用户 | 不是程序员,而是使用最终程序的人。他们通过用户界面与程序交互,只能看到程序的最终产品,而看不到源代码。所有程序员都应该专注于编写满足最终用户需求的程序。 |
例如,程序员 Andy 编写了 `Graph` 类,此时他扮演的是类提供者的角色。当我们编写使用 `Graph` 类的程序时,我们就是类使用者。而当我们运行程序并查看输出(图形窗口)时,我们就成了最终用户。
#### 3. 对象和类的概念
在声明变量时,我们必须指定类型。类型可以是基本数据类型(如 `int`、`char` 或 `float`),也可以是类(如 `Turtle` 或 `Graph`)。基本数据类型以小写字母开头,而类以大写字母开头。当我们声明一个类类型的变量时,我们称其为对象。例如:
```java
int x; // 变量 x 是整数类型
Turtle fred; // 变量 fred 是 Turtle 类型
```
在上述例子中,`fred` 是一个对象,而 `x` 是一个基本数据变量。对象与基本变量主要有两点不同:
1. 基本数据变量只包含数据,而对象既包含数据又包含方法,即对象可以执行操作。例如,`fred` 可以向前移动或右转,而基本变量 `x` 没有方法。
2. 对象和基本变量在内存中的存储方式不同。
下面我们深入了解一下 `Turtle` 类。在之前的学习中,我们使用过其他程序员编写的类,无需查看其 Java 源代码,只需知道可以使用哪些方法即可。这些方法列表被称为类的接口。以 `Turtle` 类为例,我们可以在不查看源代码的情况下使用它。类的内部实现是隐藏的,我们只需要知道可用的方法就能使用该类。
一个 `Turtle` 对象由以下变量组成:
- `xCoordinate` 和 `yCoordinate`:存储 `Turtle` 对象在显示窗口中的当前位置,初始值都为 0(窗口原点),随着 `Turtle` 的移动而改变。
- `angle`:存储 `Turtle` 所面对的当前方向,初始值为 0,会根据 `right` 和 `left` 方法(以及 `home` 方法)而改变。
- `draw`:布尔型变量,存储 `Turtle` 对象移动时是否绘制,初始值为 `true`,调用 `penUp` 方法后变为 `false`。
- `colour`:存储 `Turtle` 对象绘制的颜色。
类中存储的变量有多种称呼,我们通常称其为数据成员,也可称为数据属性或字段。
#### 4. 编写和使用简单类
下面我们通过一个简单的例子,来展示如何编写、编译和使用一个类。注意,这里我们编写的不是包含 `main` 方法的类,而是一个可以被其他类的 `main` 方法使用的类。
**步骤如下**:
1. 在名为 `Square.java` 的文件中输入以下 Java 代码:
```java
class Square
{
int size = 2;
char pattern = '*';
void draw()
{
for(int row = 1; row <= size; row++)
{
for(int col = 1; col <= size; col++)
System.out.print(pattern);
System.out.println();
}
System.out.println();
}
// draw method
}
// Square class
```
2. 编译这个文件,但不要运行它。因为没有 `main` 方法,运行会产生错误。
3. 在名为 `UseSquare.java` 的文件中输入以下代码:
```java
public class UseSquare
{
public static void main (String[] args)
{
Square s1 = new Square();
s1.draw();
s1.size = 5;
s1.draw();
s1.pattern = '&';
s1.draw();
} // main method
} // UseSquare class
```
4. 编译并运行 `UseSquare` 类,你将看到相应的输出。
`Square` 类定义了 `Square` 对象的模板,即描述了对象的外观和行为。代码中的 `int size = 2;` 和 `char pattern = '*';` 定义了类的数据成员,通过声明这些属性,我们定义了一个新的类型 `Square`,它包含一个整数和一个字符两个基本数据变量。
在 `UseSquare` 类的 `main` 方法中,首先创建了一个 `Square` 对象 `s1`,此时 `s1` 的 `size` 为 2,`pattern` 为 `*`。然后调用 `draw` 方法绘制正方形。接着,将 `size` 修改为 5 后再次调用 `draw` 方法,会绘制一个更大的正方形。最后,将 `pattern` 修改为 `&` 并再次调用 `draw` 方法,会绘制一个由 `&` 组成的正方形。
#### 5. 内存工作原理
理解内存的工作原理非常重要,因为基本数据变量和对象的行为会因其存储方式的不同而有所差异。
**内存的概念**:
内存是计算机硬件的一部分,用于存储数据。计算机中有两种主要的数据存储方式:内存和磁盘存储。
- 磁盘存储即计算机的硬盘,是一个圆形磁盘,开机时会旋转。磁盘存储具有持久性,即保存到磁盘上的任何数据在关机后仍然存在。文件存储在硬盘上,目前大多数 PC 的硬盘容量以千兆字节(约 10⁹ 字节)为单位衡量。
- 内存通常以兆字节为单位衡量,也称为随机存取存储器(RAM)。内存是临时存储,计算机关机后数据会丢失。当你使用程序(如文字处理器)时,文档会存储在内存中,按下保存按钮后,数据会写入磁盘,从而避免因停电而丢失。现在很多程序都有定期自动备份功能。你可以将内存想象成一个大表格,每个格子都有一个地址,用于存储数据。
**对象和基本数据在内存中的存储方式**:
当我们声明一个基本数据变量时,会为该变量预留一小部分内存,预留的内存量取决于变量的类型。例如,存储一个布尔型变量只需要 1 位(1 表示 `true`,0 表示 `false`),而存储一个 `int` 则需要 32 位。当创建一个对象时,会为类中的所有数据成员分配内存。
以下是一个示例程序:
```java
public class Memory
{
public static void main(String[] args)
{
int x = 25;
Square s1 = new Square();
s1.size = 5;
Square s2;
s2 = new Square();
s2.pattern = '$';
}
}
```
在这个程序中,第一个语句声明并初始化了一个基本数据变量 `x
0
0
复制全文
相关推荐










