第二周作业

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的功能是改变字符串x的值,将其值变为"xyz"

changeArr的功能是改变字符串中每个字符的值,在原值基础上加上空和i

1.2 main方法的x有没有被改变?为什么?

没有,方法中只是创建了原有变对象的复制模板,因此在方法中只是改变了复制模板的值,原对象的值并未改变

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

被改变了。因为虽然在Java中字符串不变,但字符串引用可变,在args字符串数组中,调用changeArr方法本质上是更改了args数组中字符串引用的值,将引用更改到了新创建的值上

1.4 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] 

因为数组arr与arrX的引用相同,因此对arrX的更改也会更改arr的元素

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

2.2 字符串是不可变类,为什么可以对strArr[1]赋值"xx"。

因为虽然在Java中字符串不变,但字符串引用可变,在strArr字符串数组中,调用changeArr方法本质上是更改了strArr数组中字符串引用的值,将引用更改到了新创建的值上

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

第二维长度不确定,其长度具体取决于程序启动时的状态;

补全代码如下

int [][] arr=new int [5][];
for (int[] row : array){
    for (int num : row) {
        System.out.print(num + " ");
    }
    System.out.println();
}

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

类相当于一个未填充数据的模板,而对象则是已经填好数据的一个具体模板。math类是有对象的,但是math是一个静态类,因此对math类创建对象是不必要的。String存储字符的变量是私有的,为的是确保String存储的对象数据的可靠性,而lenth()方法则是公共的,因为要方便程序员获取字符串的长度。

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

为的是实现封装,这样方法或方法内变量的安全性就可以得到保障,外界调用方法或变量只需要会使用,而不用考虑内部的具体实现。

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

在初始化块中进行初始化,在声明时初始化或者在方法中初始化

7.进阶(可选):尝试使用作用域来说明封装性。

private使得方法或变量只能由内部访问,确保了其对外界的透明性(作用域在本类内)

public则可以让方法或变量被外界访问并修改,从而可以用来修饰getset方法来获取已封装的方法(作用域可以到达外部成员)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值