数组是数据的容器类是对象的蓝图成员变量是对象的状态。本文带你彻底理清这三者的核心概念、内存模型和实战陷阱。一、Java数组存储同类型数据的利器1. 数组的声明与初始化// 声明推荐方式int[] arr1; // 首选int arr2[]; // 也合法但不推荐// 动态初始化指定长度默认值int[] arr3 new int[5]; // 每个元素默认为0String[] arr4 new String[3]; // 默认null// 静态初始化直接赋值int[] arr5 {1, 2, 3, 4};int[] arr6 new int[]{10, 20, 30}; // 显式写法2. 数组的内存模型重要· 数组变量存储在栈中指向堆内存中的数组对象。· 数组对象存储在堆中包含长度和所有元素。· 基本类型数组元素值直接存储在堆中。· 引用类型数组元素存储的是对象的引用地址。int[] a new int[3]; // a在栈数组对象在堆元素默认0String[] s new String[2]; // s在栈数组对象在堆元素默认null3. 数组的遍历// 普通forfor (int i 0; i arr.length; i) {System.out.println(arr[i]);}// 增强forforeachfor (int num : arr) {System.out.println(num);}// 使用Arrays工具类import java.util.Arrays;System.out.println(Arrays.toString(arr)); // 打印数组内容4. 多维数组以二维为例// 声明与初始化int[][] matrix new int[3][4]; // 3行4列默认0int[][] matrix2 {{1,2},{3,4,5},{6}}; // 不规则数组每行长度可变// 遍历for (int i 0; i matrix2.length; i) {for (int j 0; j matrix2[i].length; j) {System.out.print(matrix2[i][j] );}System.out.println();}5. 常见陷阱 ⚠️错误操作 后果 正确做法int[] arr new int[-1]; 运行时异常 NegativeArraySizeException 长度必须非负访问 arr[arr.length] 数组越界 IndexOutOfBoundsException 最大索引为 length-1未初始化直接使用 编译报错局部变量或空指针 先 new 或赋值二维数组未初始化内层 NullPointerException 每行都要 new 或直接赋值---二、类Class对象的模具1. 类的定义// 一个简单的学生类public class Student {// 成员变量属性String name;int age;String studentId;// 构造方法无参public Student() {}// 有参构造public Student(String name, int age, String studentId) {this.name name;this.age age;this.studentId studentId;}// 成员方法行为public void study() {System.out.println(name 正在学习...);}public void showInfo() {System.out.println(学号 studentId 姓名 name 年龄 age);}}2. 对象的创建与使用// 使用无参构造Student s1 new Student();s1.name 张三;s1.age 20;s1.studentId 2024001;// 使用有参构造Student s2 new Student(李四, 22, 2024002);s1.study(); // 输出张三 正在学习...s2.showInfo(); // 输出学号、姓名、年龄3. 构造方法要点· 构造方法名必须与类名相同无返回值连void都不能有。· 若未定义任何构造方法编译器会提供默认无参构造。· 若定义了有参构造默认无参构造将不再提供建议显式写出无参构造。· 构造方法可以重载多个参数列表不同的构造。---三、成员变量字段/属性1. 实例变量 vs 类变量静态变量类型 关键字 归属 存储位置 访问方式 生命周期实例变量 无static 每个对象独立 堆内存对象内 对象引用.变量名 随对象创建而存在回收而消亡类变量 static 类本身所有对象共享 方法区JDK8后元空间 类名.变量名或对象.但不推荐 随类加载而初始化类卸载才消亡class Person {String name; // 实例变量static String species 人类; // 类变量静态}public class Test {public static void main(String[] args) {Person p1 new Person();p1.name 小明;Person p2 new Person();p2.name 小红;System.out.println(p1.name); // 小明System.out.println(Person.species); // 人类推荐类名访问System.out.println(p1.species); // 人类不推荐但合法}}2. 访问修饰符与封装修饰符 同类 同包 子类不同包 任意位置private ✅ ❌ ❌ ❌默认无 ✅ ✅ ❌ ❌protected ✅ ✅ ✅ ❌public ✅ ✅ ✅ ✅最佳实践成员变量通常设为 private通过 getter/setter 对外暴露以实现封装。public class Student {private String name;private int age;public String getName() { return name; }public void setName(String name) { this.name name; }public int getAge() { return age; }public void setAge(int age) {if (age 0 age 150) {this.age age;} else {System.out.println(年龄不合法);}}}3. 成员变量的初始化顺序· 类变量static在类加载时按声明顺序初始化先静态代码块后静态变量但按顺序执行。· 实例变量在创建对象时先执行默认初始化赋零值/null再执行显式赋值或构造方法。· 完整顺序同一个类① 静态变量/静态代码块按源文件顺序 → ② 实例变量/实例代码块按顺序 → ③ 构造方法class InitOrder {static int a 10; // 1. 静态变量static { a 20; } // 2. 静态代码块覆盖为20int b 5; // 3. 实例变量{ b 15; } // 4. 实例代码块覆盖为15public InitOrder() { // 5. 构造方法b 25;}}// 最终 a20, b254. final 成员变量· final 修饰的成员变量必须在构造方法结束前完成赋值显式赋值或构造中赋值。· 静态 final 变量必须在静态代码块或声明时赋值。· 一旦赋值不可修改通常用作常量如 public static final double PI 3.14159;。---四、综合实战图书管理系统简单建模public class Book {private String title;private String author;private double price;private static int totalBooks 0; // 统计图书总数public Book(String title, String author, double price) {this.title title;this.author author;this.price price;totalBooks;}public void display() {System.out.printf(《%s》 作者%s 价格%.2f\n, title, author, price);}public static int getTotalBooks() {return totalBooks;}public static void main(String[] args) {Book[] library new Book[3];library[0] new Book(Java核心技术, Cay Horstmann, 129.0);library[1] new Book(Effective Java, Joshua Bloch, 99.0);library[2] new Book(深入理解Java虚拟机, 周志明, 149.0);for (Book b : library) {b.display();}System.out.println(总图书数 Book.getTotalBooks()); // 输出3}}五、最常见的 5 个错误与建议1. 数组越界使用 而非 导致访问 arr[length]。✅ 解决循环条件统一用 i arr.length。2. 空指针异常引用变量未初始化或指向 null 却调用方法/访问成员。✅ 解决使用前检查 if (obj ! null)。3. 将数组当成方法参数时方法内修改数组会影响原数组因为传递的是引用。✅ 注意若想避免修改可复制数组或使用不可变集合。4. 静态成员访问实例成员静态方法不能直接访问非静态成员需要先创建对象。✅ 理解静态属于类实例属于对象类加载时实例尚不存在。5. 类变量与实例变量命名冲突局部变量、成员变量、静态变量同名时就近原则。✅ 建议使用 this 区分实例变量使用 类名. 区分静态变量。---六、总结思维导图Java核心基础├── 数组│ ├── 一维声明int[] arr、初始化new / {}│ ├── 多维不规则数组、遍历│ ├── 内存栈引用 堆对象│ └── 工具Arrays.toString() / sort()├── 类│ ├── 定义class 关键字│ ├── 构造方法重载默认构造│ ├── 对象创建new│ └── 方法成员行为└── 成员变量├── 分类实例变量非static vs 类变量static├── 修饰符private封装 / public / protected├── 初始化顺序静态→实例→构造└── final常量不可变数组是容器类是模板成员变量是属性。三者配合构成了Java面向对象编程的基石。熟练运用它们你就能构建出结构清晰、可维护性强的程序。下一期我们将深入探讨继承与多态敬请期待如果觉得这篇笔记对你有帮助请点赞、收藏、评论三连
企业数字化 ERP 产品动态
相关推荐
如何运用SPSS交叉表功能解析暴露因素与疾病的关联强度 1. 交叉表分析的基础概念
交叉表(Crosstab)是SPSS中最常用的数据分析工具之一,它能够清晰地展示两个分类变量之间的关系。在公共卫生和临床研究中,我们经常需要分析某种暴露因素(如吸烟、病毒感染)与疾病结… · 2026/9/24 17:17:35
Mac外接显示器终极控制指南:免费开源神器MonitorControl完整评测 Mac外接显示器终极控制指南:免费开源神器MonitorControl完整评测 【免费下载链接】MonitorControl 🖥 Control your displays brightness & volume on your Mac as if it was a native Apple Display. Use Apple Keyboard keys or custom shortcuts.… · 2026/9/25 14:58:53
智能电视上网新革命:TV Bro浏览器让大屏浏览如此简单 智能电视上网新革命:TV Bro浏览器让大屏浏览如此简单 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro
您是否曾经坐在舒适的沙发上,想要在智能电视… · 2026/9/21 23:52:46
Python数据分析案例教程:用TaoToken统一Key跑通pandas+Matplotlib实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 12:35:40
ESP32优化等级从-Og切到-O2就崩溃?嵌入式未定义行为排查指南 1. 从一次“编译通过、烧录即崩”的诡异现象说起如果你正在用 ESP32 做嵌入式开发,某天觉得 Debug 版本跑得太慢,顺手把编译优化等级从-Og(或者-O0)改成-O2,结果编译一路绿灯,烧录进去设备却直接崩溃、重启… · 2026/9/26 12:35:40
STM32嵌入式C++实战:CMake+Renode从零搭建点灯工程 1. 从“光看不练”说起:为什么这个系列让人憋得慌“看了三篇了,一行都没让我写呢”——这句话我第一次看到的时候,差点笑出声。因为这正是我自己当年学STM32的真实写照。翻了一篇又一篇的教程,从GPIO看到时钟树,从寄存… · 2026/9/26 12:35:40
USB转I2C高速模式3.4MHz总线速率测试与Excel上位机扫描实战 1. 3400KHz总线速率测试到底在测什么先把场景说清楚。这个项目标题里的"USB TO I2C"指的是用一颗USB转I2C的桥接芯片,把PC端的USB接口虚拟成一个I2C主机,然后通过PC上的上位机软件(这里用的是Excel作为操作界面)去读写挂… · 2026/9/26 12:35:34
AI增强电机瞬态仿真:从加速计算到物理推演 1. 这不是“用AI跑个仿真”——而是重新定义电机研发的临界点电机瞬态动力学仿真,这个词组里藏着两个硬核世界:一个是传统电机工程师熬了十几年才摸清门道的物理场耦合、非线性材料建模、多时间尺度耦合求解;另一个是最近两年突然闯进实验室的… · 2026/9/26 12:35:34
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46