一、回顾与启程在上一篇文章中我们成功搭建了Java开发环境编写了第一个Hello World程序掌握了Java程序的基本结构。现在让我们开始探索Java编程的核心基础——变量、数据类型和面向对象编程。今天我们将创建一个学生类这是构建学生信息管理系统的第一步。二、变量与数据类型什么是变量变量是存储数据的容器就像生活中的盒子可以存放不同类型的物品。Java中的基本数据类型整数类型javabyte age 20; // 字节型范围-128 ~ 127short year 2024; // 短整型范围-32768 ~ 32767int studentId 1001; // 整型最常用范围约±21亿long population 1400000000L; // 长整型注意后面的L浮点类型小数javafloat price 99.9f; // 单精度浮点注意后面的fdouble score 89.5; // 双精度浮点最常用字符类型javachar grade ‘A’; // 单个字符使用单引号char chineseChar ‘学’; // 中文字符也可以布尔类型javaboolean isPassed true; // 只有true和false两个值boolean hasComputer false;字符串类型注意String是类不是基本类型javaString name “张三”;String className “计算机科学与技术2023级1班”;三、声明和使用变量变量的声明与初始化java// 1. 先声明后赋值int age;age 20;// 2. 声明的同时赋值推荐String name “李四”;double score 92.5;// 3. 同时声明多个同类型变量int x 10, y 20, z 30;变量命名规则必须以字母、下划线(_)或美元符号($)开头后续可以是字母、数字、下划线或美元符号不能使用Java关键字区分大小写建议使用驼峰命名法camelCase好的变量名示例javaString studentName; // 学生姓名int studentAge; // 学生年龄double averageScore; // 平均分数boolean isGraduated; // 是否毕业不好的变量名示例javaString a; // 太简单不知道什么意思int x1; // 没有意义double 123score; // 以数字开头错误boolean class; // 使用关键字错误四、创建第一个类Student类什么是类类是对现实世界事物的抽象是对象的模板。比如学生这个类可以包含学号、姓名、年龄等属性。创建Student类的步骤步骤1在IntelliJ IDEA中创建新类打开上一篇文章创建的MyFirstProject项目右键点击src文件夹 → New → Java Class输入类名Student按Enter键创建步骤2编写Student类的基本结构java// Student.javapublic class Student {// 属性成员变量private String id; // 学号private String name; // 姓名private int age; // 年龄private String className; // 班级private double score; // 成绩// 构造方法 - 用于创建对象时初始化属性 public Student(String id, String name, int age, String className, double score) { this.id id; this.name name; this.age age; this.className className; this.score score; } // 方法显示学生信息 public void displayInfo() { System.out.println( 学生信息 ); System.out.println(学号 id); System.out.println(姓名 name); System.out.println(年龄 age); System.out.println(班级 className); System.out.println(成绩 score); System.out.println(); } // Getter和Setter方法用于访问和修改私有属性 public String getId() { return id; } public void setId(String id) { this.id id; } public String getName() { return name; } public void setName(String name) { this.name name; } // 其他Getter和Setter方法类似...}五、深入理解Student类的各个部分访问修饰符public公开的任何地方都可以访问private私有的只能在当前类内部访问protected受保护的在同一个包或子类中可以访问默认不写在同一个包中可以访问构造方法Constructor方法名与类名相同没有返回类型连void都没有在创建对象时自动调用可以重载多个构造方法java// 无参构造方法public Student() {this.id “未知”;this.name “未知”;this.age 0;this.className “未知”;this.score 0.0;}// 有参构造方法public Student(String id, String name) {this.id id;this.name name;this.age 18; // 默认年龄this.className “未分配”;this.score 0.0;}// 全参构造方法public Student(String id, String name, int age, String className, double score) {this.id id;this.name name;this.age age;this.className className;this.score score;}3. this关键字this表示当前对象用于区分成员变量和局部变量javapublic void setAge(int age) {this.age age; // this.age是成员变量age是参数}4. Getter和Setter方法封装是面向对象的重要特性通过公有方法访问私有属性java// Getter获取属性值public int getAge() {return age;}// Setter设置属性值可以添加验证逻辑public void setAge(int age) {if (age 0 age 150) {this.age age;} else {System.out.println(“年龄不合法”);}}六、创建和使用Student对象创建测试类StudentTest在同一个项目中创建新类StudentTest在main方法中测试Student类java// StudentTest.javapublic class StudentTest {public static void main(String[] args) {System.out.println(“ 学生信息管理系统测试 ”);// 1. 使用构造方法创建学生对象 Student student1 new Student(2023001, 张三, 20, 计算机1班, 89.5); Student student2 new Student(2023002, 李四, 21, 计算机2班, 92.0); Student student3 new Student(2023003, 王五, 19, 计算机1班, 85.0); // 2. 调用方法显示学生信息 System.out.println(\n--- 学生1信息 ---); student1.displayInfo(); System.out.println(\n--- 学生2信息 ---); student2.displayInfo(); System.out.println(\n--- 学生3信息 ---); student3.displayInfo(); // 3. 使用Getter方法获取学生信息 System.out.println(\n 使用Getter方法 ); System.out.println(学生1的姓名 student1.getName()); System.out.println(学生2的成绩 student2.getScore()); // 4. 使用Setter方法修改学生信息 System.out.println(\n 修改学生信息 ); student1.setScore(95.0); // 修改成绩 student2.setAge(22); // 修改年龄 System.out.println(修改后学生1的成绩 student1.getScore()); System.out.println(修改后学生2的年龄 student2.getAge()); // 5. 显示修改后的信息 System.out.println(\n--- 修改后的学生信息 ---); student1.displayInfo(); student2.displayInfo(); }}七、运算符的使用算术运算符javaint a 10, b 3;System.out.println(a b (a b)); // 13System.out.println(a - b (a - b)); // 7System.out.println(a * b (a * b)); // 30System.out.println(a / b (a / b)); // 3整数除法System.out.println(a % b (a % b)); // 1取余数double x 10.0, y 3.0;System.out.println(x / y (x / y)); // 3.333…浮点数除法2. 赋值运算符javaint score 85;score 5; // score score 5现在score90score - 10; // score score - 10现在score80score * 2; // score score * 2现在score160score / 4; // score score / 4现在score403. 比较运算符javaint age1 20, age2 22;System.out.println(age1 age2: (age1 age2)); // falseSystem.out.println(age1 age2: (age1 age2)); // trueSystem.out.println(age1 age2: (age1 age2)); // falseSystem.out.println(age1 ! age2: (age1 ! age2)); // true4. 逻辑运算符javaboolean isAdult true;boolean hasIDCard false;System.out.println(isAdult hasIDCard: (isAdult hasIDCard)); // false与System.out.println(“isAdult || hasIDCard: (isAdult || hasIDCard)); // true或System.out.println(”!isAdult: (!isAdult)); // false非八、实践项目增强版Student类让我们创建一个更实用的Student类添加更多功能java// EnhancedStudent.javapublic class EnhancedStudent {// 属性private String id;private String name;private int age;private String className;private double[] scores; // 使用数组存储多门课程成绩// 构造方法 public EnhancedStudent(String id, String name, int age, String className) { this.id id; this.name name; this.age age; this.className className; this.scores new double[3]; // 假设有3门课程 } // 设置成绩 public void setScores(double chinese, double math, double english) { scores[0] chinese; scores[1] math; scores[2] english; } // 计算平均分 public double calculateAverage() { double sum 0; for (double score : scores) { sum score; } return sum / scores.length; } // 判断是否及格平均分60 public boolean isPassed() { return calculateAverage() 60; } // 获取成绩等级 public String getGrade() { double avg calculateAverage(); if (avg 90) return A; else if (avg 80) return B; else if (avg 70) return C; else if (avg 60) return D; else return E; } // 显示详细信息 public void displayDetails() { System.out.println( 学生详情 ); System.out.println(学号 id); System.out.println(姓名 name); System.out.println(年龄 age); System.out.println(班级 className); System.out.println(语文成绩 scores[0]); System.out.println(数学成绩 scores[1]); System.out.println(英语成绩 scores[2]); System.out.println(平均成绩 String.format(%.2f, calculateAverage())); System.out.println(成绩等级 getGrade()); System.out.println(是否及格 (isPassed() ? 是 : 否)); System.out.println(); } // 简洁信息用于列表显示 public String getSimpleInfo() { return String.format(%s\t%s\t%d\t%s\t%.2f\t%s, id, name, age, className, calculateAverage(), getGrade()); }}九、测试增强版Student类java// EnhancedStudentTest.javapublic class EnhancedStudentTest {public static void main(String[] args) {System.out.println(“ 增强版学生信息测试 \n”);// 创建学生对象 EnhancedStudent student1 new EnhancedStudent(2023001, 张三, 20, 计算机1班); EnhancedStudent student2 new EnhancedStudent(2023002, 李四, 21, 计算机2班); // 设置成绩 student1.setScores(85.5, 92.0, 88.0); student2.setScores(75.0, 68.5, 59.0); // 显示详细信息 System.out.println(--- 学生1详细信息 ---); student1.displayDetails(); System.out.println(\n--- 学生2详细信息 ---); student2.displayDetails(); // 显示简洁信息 System.out.println(\n 学生列表 ); System.out.println(学号\t姓名\t年龄\t班级\t平均分\t等级); System.out.println(student1.getSimpleInfo()); System.out.println(student2.getSimpleInfo()); // 测试其他功能 System.out.println(\n 功能测试 ); System.out.println(学生1是否及格 (student1.isPassed() ? 是 : 否)); System.out.println(学生2是否及格 (student2.isPassed() ? 是 : 否)); System.out.println(学生1成绩等级 student1.getGrade()); System.out.println(学生2成绩等级 student2.getGrade()); }}十、常见问题与调试技巧问题1NullPointerException空指针异常javaString name null;System.out.println(name.length()); // 错误name为null解决确保对象在使用前已经初始化问题2ArrayIndexOutOfBoundsException数组越界javadouble[] scores new double[3];scores[3] 90.0; // 错误有效索引是0,1,2解决注意数组索引从0开始最大索引是长度-1问题3变量作用域问题javapublic void someMethod() {if (true) {int x 10;}System.out.println(x); // 错误x只在if块内有效}解决了解变量的作用域在合适的位置声明变量IntelliJ IDEA调试技巧设置断点点击代码行号左侧开始调试点击右上角的虫子图标或按ShiftF9单步执行按F8逐行执行查看变量在调试窗口的Variables面板查看变量值条件断点右键断点可以设置条件十一、作业完善学生信息管理系统作业要求创建一个StudentManagementSystem类在main方法中实现以下功能创建至少3个Student对象显示所有学生的基本信息计算并显示所有学生的平均年龄找出成绩最高的学生并显示其信息统计及格和不及格的学生人数作业示例框架javapublic class StudentManagementSystem {public static void main(String[] args) {// 1. 创建学生数组EnhancedStudent[] students new EnhancedStudent[3];// 2. 初始化学生信息 students[0] new EnhancedStudent(2023001, 张三, 20, 计算机1班); students[0].setScores(85, 90, 88); students[1] new EnhancedStudent(2023002, 李四, 21, 计算机2班); students[1].setScores(75, 82, 79); students[2] new EnhancedStudent(2023003, 王五, 19, 计算机1班); students[2].setScores(92, 95, 90); // 3. 显示所有学生信息 System.out.println( 所有学生信息 ); for (EnhancedStudent student : students) { student.displayDetails(); } // 4. 计算平均年龄 int totalAge 0; for (EnhancedStudent student : students) { totalAge student.getAge(); // 需要添加getAge()方法 } double averageAge (double) totalAge / students.length; System.out.printf(平均年龄%.2f岁\n, averageAge); // 5. 找出成绩最高的学生 // 需要先为EnhancedStudent添加getAverageScore()方法 // 6. 统计及格人数 int passCount 0; for (EnhancedStudent student : students) { if (student.isPassed()) { passCount; } } System.out.println(及格人数 passCount); System.out.println(不及格人数 (students.length - passCount)); }}作业扩展挑战可选添加根据成绩排序学生的功能添加按班级筛选学生的功能创建一个学生成绩排名表添加输入功能让用户从键盘输入学生信息十二、学习总结通过本篇文章的学习你已经掌握了✓ Java的基本数据类型和变量✓ 类的定义和对象的创建✓ 构造方法的使用✓ Getter和Setter方法的实现✓ 基本的运算符使用✓ 如何设计一个实用的Student类核心概念回顾类 vs 对象类是模板对象是根据模板创建的实例封装将数据和方法包装在一起隐藏内部实现细节构造方法用于初始化对象this关键字引用当前对象方法重载同一个类中方法名相同但参数不同十三、下一步学习预告在下一篇文章中我们将学习集合框架ArrayList存储多个学生对象控制流语句循环遍历学生集合实现简单的菜单系统创建学生信息管理系统的完整框架十四、学习资源推荐练习平台LeetCode新手村https://leetcode.cn/problemset/algorithms/牛客网Java练习https://www.nowcoder.com/ta/javaCodingBat Java练习https://codingbat.com/java参考书籍《Java核心技术 卷I》适合系统学习《Head First Java》适合初学者图文并茂《Effective Java》适合进阶学习在线工具Java API文档https://docs.oracle.com/javase/8/docs/api/在线Java编译器https://www.jdoodle.com/online-java-compiler/代码可视化工具https://pythontutor.com/java.html记住编程是实践的艺术。不要只看不练多动手编写代码多思考如何改进。当你遇到问题时学会如何查找资料和调试程序这比记住所有语法更重要。加油期待看到你的作业成果