当前位置: 首页 > news >正文

java-wxj02

Java 核心概念深度解析:方法、数组与类

一、方法参数传递机制

示例代码分析

import java.util.Arrays;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); // 输出:abcchangeArr(args);System.out.println(Arrays.toString(args));}
}

1.1 方法功能解析

  • changeStr方法:接收String参数并尝试修改其值,但实际无法改变原始变量
  • changeArr方法:接收String数组参数并修改其元素内容,能够改变原始数组

1.2 字符串参数为何不变?

Java采用值传递机制:

  • 基本类型:传递值的副本
  • 引用类型:传递引用的副本(而非对象本身)

当调用changeStr(x)时:

  1. 传递的是x引用的副本(指向"abc")
  2. 方法内x = "xyz"只是让副本指向新对象
  3. 原始x的引用保持不变,仍指向"abc"

1.3 数组参数为何改变?

  • 传递的是数组引用的副本
  • 副本和原始引用指向同一个数组对象
  • 通过引用修改对象内容,会影响所有指向该对象的引用

1.4 args数组的赋值方式

  • 来源:命令行参数
  • 赋值方式:运行程序时在命令行指定
java Main hello world 123

此时args数组内容为:["hello", "world", "123"]

二、数组特性深入解析

2.1 数组引用传递示例

import java.util.Arrays;public class ArrayTest {public static void main(String[] args) {int[] arr = new int[3];arr[0] = 1; arr[1] = 1;int[] arrX = arr;  // 引用赋值arr[0] = 2;        // 修改原始数组System.out.println(Arrays.toString(arr));  // [2, 1, 0]System.out.println(Arrays.toString(arrX)); // [2, 1, 0]}
}

关键点arrX = arr使两个变量指向同一数组对象,任一变量修改都会影响另一变量。

2.2 字符串数组的"修改"原理

String[] strArr = {"aa","bb","cc"};
strArr[1] = "xx";  // 看似修改字符串,实为修改引用
  • 字符串不可变:String对象内容创建后不可更改
  • 数组元素可重新赋值:改变的是引用指向,而非字符串内容本身

2.3 二维数组的灵活结构

int[][] arr = new int[5][];  // 只定义第一维长度// 第二维可定义不同长度
arr[0] = new int[2];  // 长度2
arr[1] = new int[3];  // 长度3
// ...其余类似// 遍历不规则二维数组
for (int i = 0; i < arr.length; i++) {if (arr[i] != null) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}System.out.println();}
}

三、类与对象核心概念

3.1 类与对象的区别

类别 定义 示例
对象的蓝图/模板 class Car { ... }
对象 类的具体实例 Car myCar = new Car();

Math类的特殊性

  • 构造方法私有化(private Math() {}
  • 所有方法均为静态方法
  • 无需创建实例,直接通过类名调用:Math.random()

3.2 String类的封装设计

// 内部实现关键代码示意
public final class String {private final char value[];  // 私有最终字符数组private int hash;            // 缓存哈希值// 公共访问方法public int length() {return value.length;}public char charAt(int index) {if (index < 0 || index >= value.length) {throw new StringIndexOutOfBoundsException(index);}return value[index];}
}

设计优势

  1. 不可变性保障:final修饰防止继承修改,final数组成员防止数组引用被修改
  2. 安全性:防止外部直接修改内部数据
  3. 线程安全:不可变对象天然线程安全
  4. 性能优化:哈希值缓存等优化手段

3.3 Setter/Getter模式的价值

传统直接访问的问题

public class Person {public int age;  // 直接公共访问
}// 外部可能设置非法值
person.age = -100;  // 逻辑错误但无法阻止

Setter/Getter模式优势

public class Person {private int age;public void setAge(int age) {if (age >= 0 && age <= 150) {  // 数据验证this.age = age;} else {throw new IllegalArgumentException("无效年龄");}}public int getAge() {return age;}
}

3.4 对象属性初始化时机

初始化方式 执行时机 示例
声明时初始化 类加载时 private String name = "默认值";
实例初始化块 构造函数前 { age = 18; }
构造方法初始化 对象创建时 Person() { name = "张三"; }
Setter方法初始化 运行时动态设置 person.setName("李四");

四、封装性与作用域

4.1 访问修饰符的作用范围

修饰符 同类 同包 子类 其他包
private
default
protected
public

4.2 封装性的实际价值

  1. 数据保护:防止意外修改关键数据
  2. 接口稳定性:内部实现可变更而不影响外部调用
  3. 模块化设计:明确各模块的职责边界
  4. 代码可维护性:降低代码耦合度,便于调试和测试

总结

Java的核心概念体现了其设计哲学:简单性、安全性和可维护性。理解这些基础概念的关键点:

  1. 方法参数传递:始终是值传递,区别在于传递的是基本值还是引用值
  2. 数组特性:引用类型,需要区分引用本身和引用指向的对象
  3. 字符串特殊性:不可变对象,修改操作实际创建新对象
  4. 类与对象:类是模板,对象是实例,封装是核心设计原则
  5. 封装性:通过访问控制实现信息隐藏,提高代码质量

掌握这些基础概念,不仅能够编写正确的Java代码,更能理解Java语言的设计思想,为深入学习高级特性和框架打下坚实基础。

http://www.wxhsa.cn/company.asp?id=4782

相关文章:

  • 停止win10自动升级操作
  • vue3 - elementPlus
  • GAS_Aura-Target Data
  • windows 把恢复分区调整到 c 盘前面
  • wso2~对已发布api的元信息管理
  • 利用Myo臂环采集肌电信号和角速度来实现实时手势识别
  • 实用指南:leetcode 966. 元音拼写检查器 中等
  • 三轴传感开发新纪元:exvib扩展库让精准检测触手可及!
  • List与Dictionary区别
  • OpenStack Cinder 架构
  • 完整教程:IC(输入捕获)
  • HiMarket 正式开源,为企业落地开箱即用的 AI 开放平台
  • 如何统计DrawMeshInstancedIndirect绘制物体的Triangle数据
  • VK1S68C点钟LED驱动控制专用芯片高抗干扰数显驱动IC 可支持134的点阵LED显示面板
  • 基于MATLAB的海洋中尺度涡旋诊断
  • 从混乱到有序:Tita 项目一体化管理的全场景赋能
  • SpringBoot入门指南:让Java开发变得像搭积木一样简单 - 教程
  • 汇编语言[王爽]-13 int指令【中断实现loop、jmp】
  • Supabase云同步架构:Flutter应用的数据同步策略
  • 汇编语言[王爽]-12 内中断
  • 【SPIE出版】第五届先进制造技术与电子信息国际学术会议(AMTEI 2025)
  • 2025.9.15 考试总结
  • 汇编语言[王爽]-01 基础知识
  • 贪心外套计数
  • 汇编语言[王爽]-02 寄存器
  • 汇编语言[王爽]-03 寄存器(内存访问)
  • 汇编语言[王爽]-05 [BX]和loop指令
  • 完整教程:YOLO数据集格式转换工具v1.0-微智启软件工作室
  • 2.docker 安装
  • 树形DP2F