第01周 预习、实验与作业:绪论与Java基本语法

Java 核心概念解析

1. 方法与参数传递特性

1.1 changeStrchangeArr 方法功能

  • changeStr 方法:尝试将传入的 String 类型参数 x 赋值为 "xyz"
    但由于 String 是不可变对象,方法内对 x 的重新赋值仅修改局部变量引用,不影响外部实参。
  • changeArr 方法:遍历传入的 String 数组 strs,将数组中每个元素与自身索引拼接(例如原元素 "a" 且索引为 0 时,处理后变为 "a0")。

1.2 main 方法的 x 是否被改变?为什么?

  • 结论:未被改变。
  • 原因String 是不可变对象,changeStr 方法中仅修改了局部变量 x(形参)的引用(指向 "xyz"),而 main 方法中原始 x(实参)的引用未变,因此输出仍为 "abc"

1.3 main 方法的 args 数组内容是否被改变?为什么?

  • 结论:被改变。
  • 原因:数组是引用类型,changeArr 方法中的形参 strsmain 方法的 args 指向同一个数组对象。对数组元素的修改会直接影响原数组,因此 args 内容会变化。

1.4 args 数组的值来源及赋值方式

  • 值来源:程序运行时的命令行参数。
  • 赋值方式
    • IDE 中:在运行配置中设置命令行参数。
    • 命令行中:执行 java Main 参数1 参数2 ...,参数会被传入 args 数组。

2. 数组与字符串特性

2.1 数组引用特性示例

输出结果

[2, 1, 0]
[2, 1, 0]

原因
在 Java 中,数组是引用类型。int[] arrX = arr; 表示 arrXarr 指向同一个数组对象。当执行 arr[0] = 2; 时,对共同指向的数组元素的修改会同步反映到两个引用,因此输出相同。

2.2 字符串的不可变性

字符串对象一旦创建,内容不可修改。
例如:strArr[1] = "xx" 并非修改原 "bb" 对象的内容,而是让 strArr[1] 重新指向新对象 "xx"。原 "bb" 对象若无其他引用,会被垃圾回收机制回收。

3. 二维数组的定义与遍历

int[5][] 定义的二维数组中,第二维数组长度不确定,需后续初始化。

补全代码及遍历示例

import java.util.Arrays;
public class ArrayTest {
    public static void main(String[] args) {
        int[][] twoDArr = new int[5][];
        // 初始化每一个一维数组
        twoDArr[0] = new int[2];
        twoDArr[1] = new int[3];
        twoDArr[2] = new int[4];
        twoDArr[3] = new int[5];
        twoDArr[4] = new int[6];
        
        // 使用 for-each 遍历
        System.out.println("使用 for-each 遍历:");
        for (int[] arr : twoDArr) {
            for (int num : arr) {
                System.out.print(num + " ");
            }
            System.out.println();
        }
        
        // 使用普通 for 循环遍历
        System.out.println("使用普通 for 循环遍历:");
        for (int i = 0; i < twoDArr.length; i++) {
            for (int j = 0; j < twoDArr[i].length; j++) {
                System.out.print(twoDArr[i][j] + " ");
            }
            System.out.println();
        }
    }
}

4. 类与对象的区别及特殊类说明

4.1 类与对象的区别

  • :对具有相同属性和行为的对象的抽象描述(模板),例如“汽车设计图”。
  • 对象:类的实例(具体实体),例如“某一辆具体的汽车”。

4.2 特殊类说明

  • Math:无对象,所有方法均为静态方法,可直接通过类名调用(如 Math.sqrt(4))。
  • String
    • private 属性:内部 private final char value[] 存储字符,封装内部细节,保证不可变性。
    • public 方法:如 length()(获取长度)、charAt(int index)(获取指定字符),提供安全访问方式,不允许直接修改 value 数组。

5. setter/getter 模式与封装性

5.1 使用原因

若属性为 public,外部可任意修改,可能破坏对象状态。
setter 方法可校验/过滤值,getter 方法控制访问方式,保证数据完整性和安全性。

5.2 与封装性的关系

封装性通过隐藏属性和方法,仅暴露有限接口实现。
setter/getter 模式是封装性的体现:隐藏属性直接访问,通过方法控制操作,便于内部实现修改且不影响外部使用。

6. 对象属性的初始化时机

  1. 声明时初始化:如 private int age = 18;
  2. 构造方法中初始化:创建对象时调用构造方法赋值。
  3. 实例初始化块中初始化:每次创建对象时执行。
  4. setter 方法初始化:对象创建后,通过 setter 方法设置值。

7. 作用域与封装性的关系

  • 作用域:变量或方法的可访问范围。
  • 封装性:通过 privateprotectedpublic 等修饰符控制成员作用域,隐藏内部信息。例如:
    • 属性设为 private 时,仅类内部可访问。
    • 外部通过 public 方法(如 setter/getter)间接访问,保证数据安全和可维护性。
posted @ 2025-09-13 11:44  救苦救难观世音  阅读(7)  评论(0)    收藏  举报