java第二周预习作业

1.使用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 方法接收一个 String 类型的参数 x,然后将 x 的引用指向了字符串常量 “xyz”。
 changeArr 方法接收一个 String 数组 strs,然后遍历这个数组,在每个元素后面追加一个序号的字符串。
 1.2  main方法的x有没有被改变?为什么?
 main 方法中的 x 没有被改变。这是因为 String 对象在 Java 中是不可变的,且方法参数是按值传递的。在调用 changeStr(x) 时,实际上是将 x 的值(即引用)传递给了 changeStr 方法,该方法内部对参数的修改并不会影响 main 方法中的 x。
 1.3 main方法的args数组的内容有没有被改变?为什么?
 main 方法中的 args 数组的内容被改变了。这是因为数组是可变的对象,在方法调用时,传递的是数组的引用。因此,changeArr 方法中对数组元素的修改会反映到原始数组 args 上。
 1.4 args数组中的值是从哪里来的?要怎么才能给他赋值。
 args 数组中的值通常来自于程序启动时传递给该程序的命令行参数。想要给 args 赋值,可以在启动程序时提供命令行参数.

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]
因为在 Java 中,数组是可变的对象。当你创建了一个数组 arr 并将其赋值给 arrX 时,实际上是将同一个数组的引用赋给了 arrX。这意味着 arr 和 arrX 引用的是同一个数组对象。所以arr被修改时其所指对象也被改变所以arrX=中的[0]也被修改为2.
2.2 字符串是不可变类,为什么可以对strArr[1]赋值"xx"。
String 对象不可变,但指向 String 对象的引用是可以改变的。因此,虽然 strArr[1] 指向的 String 对象的内容不能改变,但 strArr[1] 这个引用本身可以被赋予一个新的 String 对象。

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

1.int[5][] 定义了一个二维数组,其中第一维的长度是 5,但是第二维的长度没有指定,因此它可以是任意长度。
2.(1)使用foreach循环
for (int[] subArray : twoDimArray) {
            for (int value : subArray) {
            ···
            }
    (2)使用for循环
    for (int i = 0; i < twoDimArray.length; i++) {
            for (int j = 0; j < twoDimArray[i].length; j++) {
                twoDimArray[i][j] = count++;
            }
        }

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

1.类是抽象的,对象是具体的。
2.Math 类是一个包含数学运算方法的工具类可以直接使用类名进行使用不需要创建对象。
3.private final char value[];和private final int hash;是私有的;public int length()和public char charAt(int index)是共有的。

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

1.使用 setter/getter 模式它有助于保持代码的清晰、安全和可维护性。
2.它允许类定义其内部数据的访问级别,从而保护数据不被不恰当的访问和修改。
它提供了对外部代码的接口,这些接口可以包含验证逻辑,以确保数据的完整性和一致性。
它使得类的内部实现可以独立于外部代码进行改变,而不会影响到使用该类的其他部分。

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

1.对象的属性可以在创建对象时进行初始化,也可以在对象创建后通过方法或代码块进行初始化。
2. 声明时初始化,构造方法中初始化,实例初始化块中初始化,方法中初始化,使用 getter 和 setter 方法初始化,静态初始化块中初始化,

7.尝试使用作用域来说明封装性

1.在函数内部定义的变量具有局部作用域,只能在该函数内部被访问。这就类似于封装在类中的私有成员变量,只能被类内部的方法访问。
2.在面向对象编程中,类定义了一个作用域。类中的成员变量和方法可以具有不同的访问级别,如私有、保护和公有.私有成员只能在类内部被访问,保护成员可以在类及其子类中被访问,公有成员可以在任何地方被访问。这种访问控制机制体现了封装性,将类的内部实现细节隐藏起来,只对外提供必要的接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值