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",但是由于Java中字符串是不可变的,所以这个修改只会在方法内部生效,而不会影响到main方法中的x变量。
changeArr方法的功能是将传入的字符串数组参数strs中每个元素都加上它自己的下标i,并且返回修改后的新数组。
1.2 main方法的x有没有被改变?为什么?
没有改变。Java中的参数传递是值传递,而不是将变量本身传递给方法。在changeStr中,对参数x进行了重新赋值操作,但并不影响main方法中的x变量。在changeArr中,虽然修改了strs数组中的元素值,但不影响main方法中args数组中的元素值,因为它们指向不同的内存地址。
1.3 main方法的args数组的内容有没有被改变?为什么?
有。在changeArr方法中修改args数组元素的值会影响到main方法中原来args数组所的字符串对象。
1.4 args数组中的值是从哪里来的?要怎么才能给他赋值。
从命令行参数中来。使用IDE的运行配置手动输入参数赋值或者cmd命令。
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数组,指向了同一个对象。所以当第四行代码修改了arr[0]的值时,实际上也改变了arrX[0]的值。
String[] strArr = {"aa","bb","cc"};
strArr[1] = "xx";
System.out.println(Arrays.toString(strArr));
2.2 字符串是不可变类,为什么可以对strArr[1]赋值"xx"。
在Java中,字符串数组是可变的。这里修改的是数组中元素的引用,而不是字符串本身。
3.使用int[5][] 定义一个二维数组,其第二维到底有多长?尝试补全代码,然后使用foreach获其他循环方法遍历这个二维数组?
第二维的长度是不确定的,需要动态分配。
for (int[] row : arr) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
4.类与对象的区别是什么? Math类有对象吗?String类有什么属性是private的,有什么方法是public的,为什么这样设计(尝试举两例说明)?
类是一种模板或蓝图,用于定义对象的属性和方法。而对象是类的一个实例,它具有该类定义的属性和方法。由于Math类中所有方法都是静态方法(已经自定义好的),因此不需要创建Math对象就可以直接使用其中的方法。String类中有许多私有属性,如value、coder等等。这些私有属性在外部无法直接访问和修改。同时,String类中也有许多公共方法,如charAt、indexOf、substring等等。这样设计的一个原因是为了保护数据的安全性和完整性;另一个原因则是为了提供更好的封装性和抽象性。
5.将类的属性设置为public可以方便其他类访问,但为什么Java中普遍使用setter/getter模式对对象的属性进行访问呢?这与封装性又有什么关系?
使用setter/getter模式可以在保证封装性的同时,提供更好的控制和安全性。
6.对象的属性可在什么时候进行初始化?都有哪些进行初始化的办法?
1.声明时初始化:直接赋值。
2.构造方法初始化:在对象被创建时用构造的方法赋值。
3.初始化块初始化:使用初始化块,在类或对象为其赋值。