Java第二周课前思考

1. 方法相关问题

public class Main {
    static void changeStr(String x) {
        x = "xyz";
    }
    static void changeArr(String[] strs) {
        for (int i = 0; i < strs.length; i++) {
            strs[i] = strs[i]+""+i;
        }
    }

    public static void main(String[] args) {    
        String x = "abc";
        changeStr(x);
        System.out.println(x);
        changeArr(args);
        System.out.println(Arrays.toString(args));
    }
}

1.1 changeStr与changeArr的功能各是什么?
changeStr:将传入的字符串参数修改为 "xyz",参数传递为值传递,不会改变原字符串。
changeArr:遍历传入的字符串数组,将数组中的每个元素修改为原元素值加上其索引。

1.2 main方法的x有没有被改变?为什么?
没有。方法参数传递是值传递,修改发生在方法内部,而原变量x的引用并未改变。

1.3 main方法的args数组的内容有没有被改变?为什么?
有。changeArr方法接收的是数组args与原args指向同一个数组对象。

1.4 args数组中的值是从哪里来的?要怎么才能给他赋值。
args数组存储的是程序运行时传入的命令行参数。在IDEA中修改运行配置,添加程序实参。

2. 数组相关问题

对于如下程序

int[] arr = new int[3];
arr[0] = 1; arr[1] = 1;
int[] arrX = arr;
arr[0] = 2;
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(arrX));

2.1 这段程序输出结果是什么?为什么?
输出结果:
[2,1,0]
[2,1,0]
arr和arrx指向同一个数组对象,所以arrx的内容与arr一致。

String[] strArr = {"aa","bb","cc"};
strArr[1] = "xx";
System.out.println(Arrays.toString(strArr));

2.2 字符串是不可变类,为什么可以对strArr[1]赋值"xx"。
strArr[1] = "xx"的操作,并不是修改原 "bb" 字符串的内容,而是将数组第 1 个位置的引用从指向 "bb" 对象改为指向"xx" 对象。

3. 二维数组问题

使用int[5][]定义一个二维数组,其第二维到底有多长?尝试补全代码,然后使用foreach获其他循环方法遍历这个二维数组?
第二维的长度是不确定的。

import java.util.Arrays;
public class TwoDArrayWithoutSecondDimension {
    public static void main(String[] args) { 
        int[][] twoDArray = new int[5][]; 
        System.out.println("二维数组内容:");
        for (int i = 0; i < twoDArray.length; i++) {
            System.out.print("第" + i + "行:");
            if (twoDArray[i] == null) {
                System.out.println("null)");
            } else { 
                for (int j = 0; j < twoDArray[i].length; j++) {
                    System.out.print(twoDArray[i][j] + " ");
                }
                System.out.println();
            }
        }
    }
}

4. 类与对象的区别是什么? Math类有对象吗?String类有什么属性是private的,有什么方法是public的,为什么这样设计(尝试举两例说明)?

类是抽象概念,对象是具体存在,对象由类实例化而来。
Math类没有对象。
Char[] value是private的,字符串的获取、比较等都是public的。
private属性隐藏了字符串的存储细节,防止外部直接修改,确保 String 的不可变性,public方法提供了安全的操作接口,既满足了外部对字符串的常用需求,又不会破坏内部的不可变性。
private 属性示例
private final char value[]:存储字符串的字符数组。
这是 String 类的核心属性,用于保存字符串的实际内容。
public 方法示例
public int length():返回字符串的长度。
外部需要知道字符串的长度,但无需直接访问value数组,通过方法封装实现安全访问。

5. 将类的属性设置为public可以方便其他类访问,但为什么Java中普遍使用setter/getter模式对对象的属性进行访问呢?这与封装性又有什么关系?

(1)实现封装性,隐藏内部细节
(2)控制属性的访问权限和合法性
(3)提供灵活性和可扩展性

6. 对象的属性可在什么时候进行初始化?都有哪些进行初始化的办法?

(1)声明时直接初始化
(2)构造方法时初始化
(3)通过setter方法初始化
(4)初始化块

posted @ 2025-09-11 14:44  Writing  阅读(8)  评论(0)    收藏  举报