第02周 预习、实验与作业:Java基础语法2、面向对象入门

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的功能各是什么?
答:changerStr的功能是把形参 x 重新指向字面值 "xyz";changerArr的功能是把数组每个元素改成 “原内容 + 下标” 的新字符串。
1.2 main方法的x有没有被改变?为什么?
答:没有;因为x是“abc”的引用地址,main方法内只给形参赋新值只改了副本,main 的 x 仍指向 "abc";
1.3 main方法的args数组的内容有没有被改变?为什么?
答:有;changeArr 通过下标修改的是堆中数组元素。
1.4 args数组中的值是从哪里来的?要怎么才能给他赋值。
答:由 JVM 启动时把命令行参数按空格拆成字符串数组传进来;通过命令行,例如java main d e f;

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];arrX 只是 arr 的 引用副本,二者指向同一块堆内存
String[] strArr = {"aa","bb","cc"};
strArr[1] = "xx";
System.out.println(Arrays.toString(strArr));
2.2 字符串是不可变类,为什么可以对strArr[1]赋值"xx"。
答:这里并未修改原 "bb" 对象,而是把 strArr[1] 这个 引用变量 重新指向新 String 对象 "xx"

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

答:int[][] a= new int[5][]; for(int i = 0;i < a.length;i++) a[i] = new int[i+1] for(int[] row : a){for(int val : row){System.out.println(val + " ")}System.out.println()}

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

答:类是抽象模板,对象是具体实例;构造器private屏蔽,无法new;所有成员静态,因此没有对象。private final char[] value;public char charAt(int i)

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

答:封装性:把变化隔离。以后可在setter里加校验、日志、触发事件,而调用方代码无需改动。只读/只写控制:可去掉setter实现只读,或去掉getter实现只写。
多态与接口:可通过接口方法屏蔽具体字段,支持继承、代理、架反射(JavaBean 规范)。
直接public字段失去这些灵活性,违反 “高内聚、低耦合” 的OO原则。

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

答:new时数字型 0,boolean false,引用null;

posted @ 2025-09-15 22:46  lzzzzzzx  阅读(9)  评论(0)    收藏  举报