Java对象编程基础:变量、构造器与数据封装
立即解锁
发布时间: 2025-08-17 02:21:37 阅读量: 1 订阅数: 5 

### Java 对象编程基础:变量、构造器与数据封装
#### 1. 类和实例变量的访问
在 Java 中,除了静态修饰符,还可以使用可选的访问修饰符(如 `private`、`public` 或 `protected`)来声明字段。
- **`private` 修饰符**:在 `Book` 类中,我们使用 `private` 声明所有实例变量。`private` 关键字表示该变量仅在类内部可见,只能由类内的方法直接操作。例如:
```java
public class Book {
private String author;
private String title;
// 其他私有变量
}
```
外部类的方法无法直接访问私有变量,但我们可以提供公共方法让其他类设置和访问这些私有变量的值,从而确保类数据只能通过类内的方法修改。
- **`public` 修饰符**:声明为 `public` 的变量可以从类外部直接访问。例如,如果 `Discount` 被声明为 `public`,其他类可以使用 `Book.Discount` 访问并随意修改它。但这种做法通常不被鼓励,因为类会失去对其数据的控制。
```java
public class Book {
public static double Discount = 0.25;
}
```
- **`protected` 修饰符**:声明为 `protected` 的变量可以被类本身、其子类以及同一包中的其他类直接访问。在本介绍中暂不使用 `protected` 变量。
- **默认访问修饰符**:如果未指定访问修饰符,变量只能被同一包中的其他类直接访问。
类内的方法可以直接通过变量名引用类中的任何变量(静态或非静态、公共或私有),但静态方法不能访问非静态变量。如果静态变量在类外部可见(即非私有),则需要使用类名限定引用,如 `Book.Discount` 和 `Book.MinBooks`。从类外部,非私有实例变量只能通过所属对象引用。
#### 2. 类和实例变量的初始化
当 `Book` 类被加载时,会立即为类变量 `Discount` 和 `MinBooks` 分配存储,并分别赋予初始值 0.25 和 5。这些变量适用于所有书籍,因此声明为静态变量,避免为每本书的数据重复存储这些值。所有书籍对象都可以访问这些变量的单一副本。
当类首次加载时,不会为实例(非静态)变量分配存储,此时只有实例变量的规范,没有实际的变量存在。实例变量在从类创建对象时才会存在,对象的数据由实例变量决定。创建对象时,会为类中定义的所有实例变量分配存储,每个创建的对象都有自己的实例变量副本。创建对象使用 `new` 关键字,例如:
```java
Book b;
b = new Book();
```
或者简写为:
```java
Book b = new Book();
```
需要注意的是,`Book` 变量 `b` 不能直接持有 `Book` 对象,它只能持有对 `Book` 对象的引用。
对象创建后,除非另有指定,其实例字段将按以下方式初始化:
| 字段类型 | 初始值 |
| ---- | ---- |
| 数值字段 | 0 |
| 字符字段 | `'\0'`(精确为 Unicode `'\u0000'`) |
| 布尔字段 | `false` |
| 对象字段 | `null` |
例如:
```java
Book b = new Book();
// b.author 为 null
// b.title 为 null
// b.price 为 0.0
// b.pages 为 0
// b.binding 为 '\0'
// b.inStock 为 false
```
我们也可以在声明实例变量时指定初始值,例如:
```java
public class Book {
private static double Discount = 0.25;
private static int MinBooks = 5;
private String author = "No Author";
private String title;
private double price;
private int pages;
private char binding = 'P'; // 表示平装
private boolean inStock = true;
}
```
此时创建对象 `b`:
```java
Book b = new Book();
```
字段将按以下方式初始化:
- `author` 被设置为 `"No Author"`。
- `title` 被设置为 `null`。
- `price` 被设置为 0.0。
- `pages` 被设置为 0。
- `binding` 被设置为 `'P'`。
- `inStock` 被设置为 `true`。
#### 3. 构造器
构造器为对象创建时初始化对象状态提供了更灵活的方式。例如:
```java
Book b = new Book();
```
这里的 `Book()` 被称为构造器。如果类定义中没有编写构造器,Java 会提供一个默认的无参构造器,它只是将实例变量设置为默认初始值。
我们可以编写自定义构造器,例如,希望在创建书籍对象时自动分配作者和标题:
```java
public class Book {
private String author;
private String title;
// 其他变量
public Book(String a, String t) {
author = a;
title = t;
}
}
```
使用方式如下:
```java
Book b = new Book("Noel Kalicharan", "DigitalMath");
```
构造器的一些重要特点:
- 构造器的名称与类名相同,且通常声明为 `public`,以便其他类使用。
- 构造器可以有零个或多个参数,调用时必须提供适当数量和类型的参数。
- 构造器的主体包含调用构造器时将执行的代码。
- 构造器没有返回类型,甚至不是 `void`。
- 如果在实例变量声明中提供了初始值,这些值会在构造器调用之前存储。
#### 4. 构造器重载
Java 允许一个类有多个构造器,只要每个构造器的签名不同,这称为构造器重载。例如:
```java
public class Book {
private static double Discount = 0.25;
private static int MinBooks = 5;
private String author = "No Author";
private String title;
private double price;
private int pages;
private char binding = 'P';
private boolean inStock = true;
public Book() { }
public Book(String a, String t) {
author = a;
title = t;
}
```
0
0
复制全文
相关推荐










