Java 核心概念解析
1. 方法与参数传递特性
1.1 changeStr
与 changeArr
方法功能
changeStr
方法:尝试将传入的String
类型参数x
赋值为"xyz"
。
但由于String
是不可变对象,方法内对x
的重新赋值仅修改局部变量引用,不影响外部实参。changeArr
方法:遍历传入的String
数组strs
,将数组中每个元素与自身索引拼接(例如原元素"a"
且索引为0
时,处理后变为"a0"
)。
1.2 main 方法的 x
是否被改变?为什么?
- 结论:未被改变。
- 原因:
String
是不可变对象,changeStr
方法中仅修改了局部变量x
(形参)的引用(指向"xyz"
),而main
方法中原始x
(实参)的引用未变,因此输出仍为"abc"
。
1.3 main 方法的 args
数组内容是否被改变?为什么?
- 结论:被改变。
- 原因:数组是引用类型,
changeArr
方法中的形参strs
与main
方法的args
指向同一个数组对象。对数组元素的修改会直接影响原数组,因此args
内容会变化。
1.4 args
数组的值来源及赋值方式
- 值来源:程序运行时的命令行参数。
- 赋值方式:
- IDE 中:在运行配置中设置命令行参数。
- 命令行中:执行
java Main 参数1 参数2 ...
,参数会被传入args
数组。
2. 数组与字符串特性
2.1 数组引用特性示例
输出结果:
[2, 1, 0]
[2, 1, 0]
原因:
在 Java 中,数组是引用类型。int[] arrX = arr;
表示 arrX
与 arr
指向同一个数组对象。当执行 arr[0] = 2;
时,对共同指向的数组元素的修改会同步反映到两个引用,因此输出相同。
2.2 字符串的不可变性
字符串对象一旦创建,内容不可修改。
例如:strArr[1] = "xx"
并非修改原 "bb"
对象的内容,而是让 strArr[1]
重新指向新对象 "xx"
。原 "bb"
对象若无其他引用,会被垃圾回收机制回收。
3. 二维数组的定义与遍历
int[5][]
定义的二维数组中,第二维数组长度不确定,需后续初始化。
补全代码及遍历示例:
import java.util.Arrays;
public class ArrayTest {public static void main(String[] args) {int[][] twoDArr = new int[5][];// 初始化每一个一维数组twoDArr[0] = new int[2];twoDArr[1] = new int[3];twoDArr[2] = new int[4];twoDArr[3] = new int[5];twoDArr[4] = new int[6];// 使用 for-each 遍历System.out.println("使用 for-each 遍历:");for (int[] arr : twoDArr) {for (int num : arr) {System.out.print(num + " ");}System.out.println();}// 使用普通 for 循环遍历System.out.println("使用普通 for 循环遍历:");for (int i = 0; i < twoDArr.length; i++) {for (int j = 0; j < twoDArr[i].length; j++) {System.out.print(twoDArr[i][j] + " ");}System.out.println();}}
}
4. 类与对象的区别及特殊类说明
4.1 类与对象的区别
- 类:对具有相同属性和行为的对象的抽象描述(模板),例如“汽车设计图”。
- 对象:类的实例(具体实体),例如“某一辆具体的汽车”。
4.2 特殊类说明
Math
类:无对象,所有方法均为静态方法,可直接通过类名调用(如Math.sqrt(4)
)。String
类:- private 属性:内部
private final char value[]
存储字符,封装内部细节,保证不可变性。 - public 方法:如
length()
(获取长度)、charAt(int index)
(获取指定字符),提供安全访问方式,不允许直接修改value
数组。
- private 属性:内部
5. setter/getter 模式与封装性
5.1 使用原因
若属性为 public
,外部可任意修改,可能破坏对象状态。
setter
方法可校验/过滤值,getter
方法控制访问方式,保证数据完整性和安全性。
5.2 与封装性的关系
封装性通过隐藏属性和方法,仅暴露有限接口实现。
setter/getter
模式是封装性的体现:隐藏属性直接访问,通过方法控制操作,便于内部实现修改且不影响外部使用。
6. 对象属性的初始化时机
- 声明时初始化:如
private int age = 18;
。 - 构造方法中初始化:创建对象时调用构造方法赋值。
- 实例初始化块中初始化:每次创建对象时执行。
- setter 方法初始化:对象创建后,通过
setter
方法设置值。
7. 作用域与封装性的关系
- 作用域:变量或方法的可访问范围。
- 封装性:通过
private
、protected
、public
等修饰符控制成员作用域,隐藏内部信息。例如:- 属性设为
private
时,仅类内部可访问。 - 外部通过
public
方法(如setter
/getter
)间接访问,保证数据安全和可维护性。
- 属性设为