### Java面向对象基础知识知识点解析
#### 一、类及类成员的访问控制符
Java中的类及类成员可以通过不同的访问控制符来限定其可见性范围。主要有以下几种:
1. **public**:公共访问级别,类及其成员可以被任何其他类访问。
2. **protected**:受保护访问级别,类及其成员可以被同一包内的类以及不同包中的子类访问。
3. **默认**(无修饰符):包访问级别,类及其成员只能在同一包内被访问。
4. **private**:私有访问级别,类及其成员只能在当前类内部被访问。
#### 二、类及其成员的修饰符
下列选项中,哪些是类及其成员的修饰符?
1. **public**:用于修饰类或类成员,表示公共访问级别。
2. **synchronized**:用于同步代码块或方法,不属于类及其成员的修饰符。
3. **class**:定义类的关键字,不是修饰符。
4. **void**:用于定义方法返回类型为空,不是修饰符。
5. **private**:用于修饰类成员,表示私有访问级别。
6. **protected**:用于修饰类成员,表示受保护访问级别。
7. **final**:用于修饰类、方法或变量,表示不可变。
8. **double**:基本数据类型之一,不是修饰符。
因此,正确的选项是:**public**、**private**、**protected** 和 **final**。
#### 三、关键字static的作用
**static** 关键字主要用于修饰类成员,包括:
- 变量:表示该变量为类变量,属于类本身,而不是某个特定对象。
- 方法:表示该方法为类方法,可以通过类名直接调用,无需实例化对象。
#### 四、程序语句编写
1. **显示对象属性**:假设`Object1`有一个名为`field1`的属性,则可以使用如下代码显示该属性:
```java
System.out.println(Object1.getField1());
```
2. **调用对象方法并获取返回值**:
```java
Hold = Object1.method1();
```
3. **定义私有变量**:
```java
private int Mine;
```
4. **定义公有变量**:
```java
public int field2;
```
5. **构造函数无参数**:
```java
public Class2() {}
```
6. **构造函数有两个整型参数**:
```java
public Class2(int param1, int param2) {}
```
7. **创建静态整型变量**:
```java
static int s_data;
```
8. **定义浮点常量**:
```java
final double PIE = 3.1415926;
```
#### 五、判断题解析
1. **错误**:类中的私有变量仍可以在本类内部的方法中访问。
2. **错误**:即使未显式定义构造函数,Java也会提供一个默认构造函数。
3. **正确**:抽象类中的抽象方法确实需要在其非抽象子类中具体实现。
4. **错误**:抽象类可以包含非抽象方法。
5. **正确**:最终类(final class)不能派生子类,最终方法(final method)不能被重写。
#### 六、程序错误及改正
1. **错误**:`abstract`和`final`不能同时修饰类。
- **改正**:删除`final`。
2. **错误**:`final`变量必须初始化。
- **改正**:添加初始化值。
```java
final int MAX_NUMBER = 20;
```
3. **错误**:`final`变量一旦初始化后不能修改。
- **改正**:删除`++`。
4. **错误**:非静态方法不能访问静态方法中的非静态变量。
- **改正**:将`var`声明为静态变量。
```java
static int var = 100;
static int getVar() { return var; }
```
5. **错误**:构造器应与类同名。
- **改正**:修改构造器名称。
```java
Label prompt = new Label("请输入数据");
```
6. **错误**:构造器应与类同名。
- **改正**:修改构造器名称。
```java
public MyClass1(int d) {
data = d;
}
```
7. **错误**:`IamAbstract`为抽象类,不能直接实例化。
- **改正**:创建一个非抽象子类进行实例化。
8. **错误**:变量声明格式错误。
- **改正**:修正变量声明。
```java
abstract class IamAbstract {
final int f;
double d;
abstract void method1();
}
```
#### 七、构造函数的功能和特点
构造函数的功能是在创建对象时初始化对象的状态。其特点是:
- 名称与类名相同。
- 没有返回类型。
- 主要用于初始化对象的成员变量。
给出的构造函数示例存在以下错误:
- 错误1:构造函数应具有与类相同的名称。
- 错误2:构造函数不应有返回值,因此不需要`return`语句。
- 错误3:变量命名应遵循Java命名规范,首字母大写。
- 错误4:构造函数中的局部变量应使用正确的变量类型。
- 错误5:构造函数参数类型与变量类型应保持一致。
**改正后的构造函数**:
```java
public Student(int sno, String sname) {
this.studentNo = sno;
this.studentName = sname;
}
```
这里假设类名为`Student`,且类中已经声明了`studentNo`和`studentName`两个成员变量。