Java基础快速入门:面向对象高级与信息管理系统实战

Java实战项目二:学生信息管理系统 本实战项目运用Java语言,设计并实现了学生信息管理系统。通过精心构建`Student`类与`StudentManager`类,完成了对学生信息的封装、增删改查等核心功能模块开发。利用集合类实现数据高效存储,并结合文件读写操作实现信息持久化。项目涵盖了面向对象设计原则、文件I/O处理以及集合类应用等多个关键知识点,提供菜单式交互界面,有效提升了用户体验和系统实用性。通过实际编程实践,使学习者充分理解并掌握了Java编程中的重要概念和技术点。 阅读详情

本文纲要

  1. 案例驱动教学概述
  2. 分类思想
    2.1 代码臃肿与可维护性问题
    2.2 分工协作:专人干专事
    2.3 信息管理系统的类职责划分
    2.4 类之间的交互流程
  3. 分包思想与包的使用
    3.1 包的本质与创建
    3.2 package、import 与全类名访问
    3.3 包使用的注意事项
  4. static 关键字
    4.1 static 的特点
    4.2 static 的内存图解
    4.3 static 的注意事项
    4.4 解决学号重复问题
  5. 信息管理系统实战
    5.1 项目结构
    5.2 环境搭建
    5.3 菜单搭建
    5.4 添加功能实现
    5.5 查询功能实现
    5.6 删除功能实现
    5.7 修改功能实现
    5.8 代码优化
    5.9 老师管理系统实现
  6. 总结

案例驱动学习概述

采用案例驱动的学习方式:先用已掌握的知识点实现一个案例,然后找出案例中存在的重复代码多、业务逻辑耦合紧、可维护性差等问题,再通过新的知识点进行解决。这样能让大家对知识点的应用场景有更深刻的认知。

基础班的学生管理系统将所有增删改查功能写在一个类中,导致阅读困难、维护不便。实际开发中,我们需要将代码进行分类管理,并引入分类思想和分包思想来提升代码的复用性、可读性和维护性。

分类思想

1 ) 代码臃肿与可维护性问题
如果将多个业务功能集中在一个类文件中,代码量会急剧膨胀,阅读和修改都非常痛苦。例如,学生管理系统的添加和修改方法中,键盘录入学生信息并封装为对象的代码完全重复,导致代码臃肿。

2 ) 分工协作:专人干专事
分类思想的核心是分工协作,专人干专事。就像物流公司,刚开始只有一名员工负责客服、发货、仓库管理,业务量增大后,需要招聘新员工,分别负责客服、发货、库管,这样职责清晰,管理方便。

编写代码也一样,我们应该将不同职责的代码划分到不同的类中,每个类只负责自己的事情

3 ) 信息管理系统的类职责划分
在信息管理系统中,结合分类思想,我们设计出以下类:

类名角色比喻职责
Student数据实体封装学生信息(id, name, age, birthday)
StudentDao库管负责访问存储数据的数组或集合,进行增删改查操作
StudentService业务员负责业务逻辑处理,如判断学号是否存在
StudentController客服与用户交互,接收用户需求,采集数据,打印结果

注意:DAO 是 Data Access Object(数据访问对象)的缩写,不要读作“到”。

4 )类之间的交互流程
用户的操作会依次经过 Controller → Service → Dao,最后将结果返回给用户。

例如添加学生:

数组/集合StudentDaoStudentServiceStudentController用户数组/集合StudentDaoStudentServiceStudentController用户我要添加学生请输入学生ID输入ID判断ID是否存在查询数据访问数组返回查询结果返回结果ID不存在,可以继续请输入姓名、年龄、生日输入信息封装为Student对象执行添加操作将对象存入数组写入数组添加成功添加成功提示"添加成功"

这种分层设计,使得每个类职责清晰,便于维护和扩展。

分包思想与包的使用

1 ) 包的本质与创建

如果项目中有很多类文件,全部放在一起不便于管理。包(package) 就是用来对类文件进行分门别类管理的,它在硬盘上就是一个文件夹。

创建包的规范:

  • 使用多级包,用 . 分隔,如 com.wb.edu.info.manager
  • 命名惯例:公司域名倒写,去掉 www,例如 www.wb.com → com.wb
    包名全部小写

在 IDEA 中,右键 src → New → Package,输入 com.wb.edu.info.manager 即可创建多级包。

2 ) package、import 与全类名访问

package 关键字:声明当前类所属的包,必须放在文件的第一条可执行代码之前(注释不算可执行代码)。每个类文件只能有一个 package 声明。

import 关键字:当需要在不同包下访问类时,可以使用 import 导包,然后直接使用类名。
全类名访问:包名 + 类名,如 com.wb.test2.Student stu = new com.wb.test2.Student();。这种方式主要用于解决多个包下存在同名类时的冲突。

示例代码:

// 不同包下的访问方式
package com.wb.test;
 
// 方式一:import导包
import com.wb.test2.Student;
 
public class TestPackage {
    public static void main(String[] args) {
        Student stu = new Student(); // 使用test2包下的Student
 
        // 方式二:全类名访问,区分同名类
        com.wb.test3.Student stu2 = new com.wb.test3.Student();
    }
}

3 ) 包使用的注意事项

package 语句必须是程序的第一条可执行代码(注释可放在前面)
一个 Java 文件中最多只能有一个 package 语句

如果没有写 package,默认表示无包名,但一般不建议这样做
三个关键字的位置顺序:package → import → class

static 关键字

1 ) static 的特点
static 是“静态”的意思,可以修饰成员变量和成员方法。被它修饰的内容具有以下特点:

  1. 被所有对象共享:一个对象修改了静态变量的值,其他对象也会看到变化。
  2. 随着类的加载而加载,优先于对象存在:类加载时静态变量就在内存中初始化了,不用等到创建对象。
  3. 多了一种调用方式:可以通过 类名.静态成员 直接调用,如 Student.school = “网炐学院”;。

2 ) static 的内存图解

堆内存

静态存储区

school = '网炐学院'

stu1对象
name='张三'
age=23

stu2对象
name=null
age=0

静态变量 school 存储在堆内存的静态存储区,只有一份。
所有对象通过指针共享这份数据。

3 ) static 的注意事项
静态方法中只能访问静态成员(变量和方法),不能访问非静态成员,因为静态存在时对象可能还没创建。
非静态方法中既可以访问静态成员,也可以访问非静态成员。
静态方法中没有 this 关键字,因为 this 代表当前对象,而静态方法不依赖于对象。

public class Student {
    String name;
    int age;
    static String school;
 
    public void show() {
        // 非静态方法可以访问静态和非静态成员
        System.out.println(name + " " + age + " " + school);
    }
 
    public static void method() {
        // 静态方法不能访问非静态成员,也不能使用this
        // this.name = "张三"; // 编译错误
        // name = "张三"; // 编译错误
        school = "程序员"; // 正确 
    }
}

4 ) 解决学号重复问题

在添加学生功能中,如果每次调用 addStudent 方法都 new 一个 StudentController,会导致 StudentDao 中的数组对象被多次创建,数据不共享,学号重复判断失效。

解决方案:将 StudentDao 中的数组声明为 static,使其成为所有对象共享的同一份数据。

public class StudentDao {
    private static Student[] stus = new Student[5]; // 静态共享数组
    // ...
}

这样无论创建多少个 Controller 对象,操作的都是同一个数组,学号重复判断就能正常工作了。

信息管理系统实战

1 ) 项目结构

wb-edu-info-manager
└─ src
   └─ com.wb.edu.info.manager
       ├─ domain
       │   ├─ Person.java
       │   ├─ Student.java
       │   └─ Teacher.java
       ├─ dao
       │   ├─ StudentDao.java
       │   └─ TeacherDao.java
       ├─ service
       │   ├─ StudentService.java
       │   └─ TeacherService.java
       ├─ controller
       │   ├─ StudentController.java
       │   └─ TeacherController.java
       └─ entry
           └─ InfoManagerEntry.java

2 ) 环境搭建

创建模块 wb-edu-info-manager
在 src 下按照上述包结构创建包
创建实体类 Student 和 Teacher,都继承自 Person
创建 Dao、Service、Controller 类,并在 entry 包中创建入口类 InfoManagerEntry

3 ) 菜单搭建
主菜单循环显示,用户选择进入学生管理或老师管理,退出时使用 System.exit(0) 结束 JVM
学生管理菜单也类似,退出时使用带标签的 break 返回主菜单。

// 主菜单 
while (true) {
    System.out.println("--------欢迎来到信息管理系统--------");
    System.out.println("请输入您的选择: 1.学生管理  2.老师管理  3.退出");
    String choice = sc.next();
    switch (choice) {
        case "1":
            new StudentController().start(); break;
        case "2":
            new TeacherController().start(); break;
        case "3":
            System.out.println("感谢您的使用");
            System.exit(0); break;
        default:
            System.out.println("您的输入有误, 请重新输入");
    }
}

4 ) 添加功能实现

基本添加流程:

  1. StudentController.addStudent() 接收用户输入的学号、姓名、年龄、生日,封装为 Student 对象,传递给 StudentService.addStudent(stu)
  2. StudentService.addStudent(stu) 将对象传给 StudentDao.addStudent(stu),并返回添加结果
  3. StudentDao.addStudent(stu) 遍历数组找到第一个 null 位置,存入对象,返回 true;若数组已满返回 false

加入学号重复判断:
在 Controller 中,先接收学号,调用 StudentService.isExists(id) 判断是否存在
如果存在,循环提示重新输入;如果不存在,跳出循环,继续录入其他信息
StudentService.isExists(id) 调用 StudentDao.findAllStudent() 获取数组,遍历比对 id

关键代码:

// Controller 中
public void addStudent() {
    String id;
    while (true) {
        System.out.println("请输入学生id:");
        id = sc.next();
        if (studentService.isExists(id)) {
            System.out.println("学号已被占用, 请重新输入");
        } else {
            break;
        }
    }
    Student stu = inputStudentInfo(id); // 封装对象
    boolean result = studentService.addStudent(stu);
    System.out.println(result ? "添加成功" : "添加失败");
}
 
// Dao 中
public boolean addStudent(Student stu) {
    int index = -1;
    for (int i = 0; i < stus.length; i++) {
        if (stus[i] == null) {
            index = i;
            break;
        }
    }
    if (index == -1) return false;
    stus[index] = stu;
    return true;
}

5 ) 查询功能实现

Controller 调用 studentService.findAllStudent() 得到数组
如果数组为 null(无数据),提示“查无信息”;否则遍历数组,跳过 null 元素,打印学生信息
Service 中 findAllStudent() 调用 Dao 获取数组,判断数组中是否有非 null 元素,有则返回数组,否则返回 null

6 ) 删除功能实现

Controller 中先调用 inputStudentId() 方法获取一个存在的学号(循环判断)
调用 studentService.deleteStudentById(id) 执行删除,并提示“删除成功”
Dao 中根据 id 找到索引,将该位置置为 null

// 获取索引的通用方法
public int getIndex(String id) {
    int index = -1;
    for (int i = 0; i < stus.length; i++) {
        Student stu = stus[i];
        if (stu != null && stu.getId().equals(id)) {
            index = i;
            break;
        }
    }
    return index;
}

7 ) 修改功能实现

Controller 获取存在的学号,再录入新信息并封装为 Student 对象。
调用 studentService.updateStudent(updateId, newStu),提示“修改成功”。
Dao 中通过 getIndex 找到索引,用新对象替换旧对象

8 ) 代码优化

抽取重复代码,提高复用性:
inputStudentId():封装“录入学号并判断是否存在”的逻辑,返回一个存在的学号(用于删除、修改)或一个不存在的学号(用于添加,添加逻辑单独处理)
inputStudentInfo(String id):封装录入学生信息并封装成对象的逻辑,返回 Student 对象

// 抽取的方法 
public String inputStudentId() {
    String id;
    while (true) {
        System.out.println("请输入学生id:");
        id = sc.next();
        if (!studentService.isExists(id)) {
            System.out.println("您输入的id不存在, 请重新输入:");
        } else {
            break;
        }
    }
    return id;
}
 
public Student inputStudentInfo(String id) {
    System.out.println("请输入学生姓名:");
    String name = sc.next();
    System.out.println("请输入学生年龄:");
    String age = sc.next();
    System.out.println("请输入学生生日:");
    String birthday = sc.next();
    Student stu = new Student();
    stu.setId(id);
    stu.setName(name);
    stu.setAge(age);
    stu.setBirthday(birthday);
    return stu;
}

9 ) 老师管理系统实现
老师管理系统的实现与学生管理系统完全对称,只需将 Student 相关类替换为 Teacher 即可
包括:

  • 实体类 Teacher
  • TeacherDao、TeacherService、TeacherController
  • 菜单、增删改查及代码优化方法均与学生管理相同

总结

通过本次实战,我们掌握了以下核心技能:

  • 分类思想:将代码按职责划分到不同类中,实现高内聚低耦合
  • 分包思想:使用包管理类文件,规范项目结构
  • static 关键字:解决数据共享问题,理解其内存模型和注意事项
  • 分层架构:Controller(交互)→ Service(业务)→ Dao(数据访问),职责清晰,便于维护。
  • 代码优化:抽取重复代码,提高复用性

这些思想和方法是 Java 项目开发的基础,在后续学习中多加练习,形成良好的编码习惯
本文结合案例驱动,从问题出发,逐步引入面向对象高级特性,并完成了一个完整的信息管理系统
代码示例已精简至核心逻辑

Java实现学生信息管理系统项目实战 在面向对象的设计中,属性是类的核心组成部分,它们代表了对象的状态。Student类的属性应能够完整地描述学生的基本信息,包括学号、姓名、性别、年龄、成绩等。本章围绕ArrayList和HashMap两种集合结构,详细讲解了其在学生信息管理系统中的应用。通过代码示例,实现了学生数据的增删改查操作,并探讨了集合数据的持久化、排序、过滤以及线程安全等高级话题。这些内容为后续实现完整的CRUD功能模块打下了坚实基础。 阅读详情

相关推荐

零基础入门Python编程——课件与代码实战下载

在Python中,变量是程序中最基本的操作单元之一,用于存储和引用数据对象。与其他静态类型语言不同,Python采用动态类型系统,使得变量的创建与赋值过程更加灵活,但也带来了潜在的理解误区。掌握变量绑定的本质、命名规则及其编码风格要求,是构建高质量Python代码的第一步。使用def定义函数时,Python 会在当前命名空间创建一个函数对象,并将其名称绑定到该对象。作用域分析:nameprefixmessage属于局部作用域函数外部无法访问这些变量。

weixin_36483050的博客 949

Java基础快速入门:面向对象高级之接口、多态与内部类

本文通过优化学生信息管理系统,系统讲解Java面向对象的三大高级特性。首先将数组存储改进为ArrayList集合实现,并抽取公共DAO抽象类;随后将抽象类升级为接口,详细解析接口的定义、特点及不同JDK版本的演进(默认方法、静态方法、私有方法)。接着引入多态概念,分析其前提条件、转型风险及解决方案。最后探讨内部类的四种形式(成员、静态、局部、匿名)及其应用场景。全文采用"项目驱动+理论解析"的方式,通过信息管理系统逐步迭代展示接口、多态与内部类的实际应用价值,配套完整测试代码帮助理解核心概念。

Wang的专栏 372

Java办公信息管理系统实战开发

企业级信息管理系统是指在企业范围内使用的,用于处理业务数据、控制业务流程、提供决策支持等的综合信息处理系统。随着技术的不断进步,特别是Java技术的成熟,企业级信息管理系统逐渐演化成为更加复杂和功能全面的解决方案。Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是简化新Spring应用的初始搭建以及开发过程。它使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

weixin_42611310的博客 849

Java基础快速入门: 面向对象高级之继承、抽象类、代码块与final关键字

本文系统讲解了Java继承的相关知识,包括继承的基本概念、特点、成员访问规则、方法重写、权限修饰符以及构造方法的继承特点。主要内容如下: 继承基础:介绍继承的概念、语法格式,通过黑马信息管理系统案例展示如何通过继承提高代码复用性。 继承特点:Java支持单继承和多层继承,但不支持多继承。子类可访问父类非私有成员,遵循"就近原则"查找变量。 成员访问规则:详细讲解成员变量和成员方法的访问特点,包括this和super关键字的使用,以及方法重写的规则和应用场景。 高级特性:涵盖抽象类、final关键字、代码块等

Wang的专栏 456

Java基础入门PPT全面解析与实战指南

Java作为一门广泛应用于企业级开发的高级编程语言,其设计初衷是“一次编写,到处运行”。这一特性依托于Java虚拟机(JVM)的核心机制:Java源代码经编译生成字节码(.class文件),由JVM在不同平台上解释执行,从而实现跨平台兼容性。Java平台分为三个主要版本:Java SE(Standard Edition):提供核心语法与基础类库,适用于桌面与通用应用开发;Java EE。

weixin_36304957的博客 440

全面的Java学生信息管理系统教程与代码

Java学生信息管理系统是一套基于Java语言开发,利用现代信息技术提高学生信息管理效率和准确性的软件解决方案。该系统旨在为教育机构提供一个可靠的平台,用于存储、处理和分析学生的个人和学术信息。它通常包含了学生的基本信息管理、成绩管理、课程安排等多个模块,帮助教育工作者高效完成日常管理任务,同时为学生提供一个查询个人详细信息的途径。在设计学生信息管理系统时,通常会采用模块化思想,每一个模块都承担特定的功能。

weixin_42551310的博客 740

【粉丝福利社】PyQt从入门到精通

在大数据、人工智能应用越来越普遍的今天,Python可以说是当下世界上热门、应用广泛的编程语言之一,人工智能、爬虫、数据分析、游戏、自动化运维等各个方面,无处不见其身影。这些开发的前提是需要界面来进行支撑的,PyQt5作为强大的GUI界面开发库之一,无疑成为Python开发人员的基础。本书提供了从PyQt5入门到编程高手所的各类知识,共分4篇。第1篇:基础知识。

愚公智库 13万+

Java SSM村民信息管理系统实战项目

在村民信息管理系统的功能需求分析与模块划分中,首先要明确系统的主要目标用户和他们的需求。村民信息系统的主要用户是村委会工作人员,他们需要一个能够高效管理村民基本信息、家庭结构、土地分配情况以及相关事务处理的平台。根据这些需求,我们可以将系统划分为几个核心模块:基本信息管理模块:用于录入、查询、更新和删除村民的基本信息,如姓名、年龄、性别、联系方式等。家庭信息管理模块:用于记录和管理家庭结构、成员信息、家庭成员的变动等。土地信息管理模块:包括土地分配、使用、流转等相关信息的管理。

weixin_42163404的博客 1161

块速掌握Java:零基础30天从入门到实战(附代码+图解+避坑指南

/ 自定义异常类throw new AgeException("年龄必须在0-150之间");✅最佳实践不要忽略异常(空catch块)优先使用标准异常(如理解OOP思想:类、对象、封装、继承、多态是核心动手写代码:每天至少敲100行善用IDEA调试:断点、单步执行看变量变化从小项目开始:计算器 → 通讯录 → Web用户管理阅读源码:从ArrayListHashMap开始🌟记住Java不是用来“看懂”的,而是用来“设计”和“构建”的。坚持30天,你将拥有进入企业级开发的坚实基础!

2501_93573441的博客 650

Java学生信息管理系统实战教程

Java学生信息管理系统是一个专为教育机构设计的应用程序,旨在简化学生、教师、课程和成绩等信息的管理流程。它提供了高效的数据维护、查询和报告功能,有助于提升院校的行政效率。系统采用模块化设计,支持灵活扩展,能够适应不断变化的教育需求。

weixin_28721743的博客 686

Keil5芯片包下载后无法识别?手把手排查教程

遇到Keil5芯片包下载后不被识别的问题别慌,常见原因包括安装路径错误或包未正确注册。通过检查Pack Installer状态和手动更新设备支持列表,轻松排查故障,确保开发环境正常运行。

weixin_35459464的博客 881

Java入门基础:开启编程之旅的第一步

Java是由Sun Microsystems(现为Oracle公司的一部分)于1995年推出的,它的设计初衷是“写一次,到处运行”(Write Once, Run Anywhere),即通过在Java虚拟机(JVM)上跑,实现跨平台运行。Java语言具有简单、安全、可靠、高效等特点,是学习编程非常理想的起点,适合各种大型企业项目开发。Java的学习之路虽长,但每一步都充满乐趣与收获。作为初学者,保持好奇心,勇于尝试,不怕犯错,是快速成长的秘诀。希望本文能成为你Java学习旅程中的一盏明灯,照亮你前行的道路。

qq_48718865的博客 528

IntelliJ IDEA 中git使用说明书

IntelliJ IDEA 中git使用说明书

junyang2012的博客 5391

ElasticSearch快速入门实战

全文检索是一种通过对文本内容进行全面索引和搜索的技术。它可以快速地在大量文本数据中查找包含特定关键词或短语的文档,并返回相关的搜索结果。全文检索广泛应用于各种信息管理系统和应用中,如搜索引擎、文档管理系统、电子邮件客户端、新闻聚合网站等。它可以帮助用户快速定位所需信息,提高检索效率和准确性。查询:有明确的搜索条件边界。比如,年龄 15~25 岁,颜色 = 红色,价格 < 3000,这里的15、25、红色、3000 都是条件边界。即有明确的范围界定。

qq_27740127的博客 1527

SAP中错记虚拟利润中心的调整,冲销处理实例

我非CO专业顾问。工作中遇到的问题,也会找资料,分析,测试。有时这个过程会拿到结果,解决问题。遂将过程记录下来备查。读者请谨慎参考!EC-PCA: 利润中心记账流程_9ke0-优快云博客。

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 1798

QSPI Flash的原理与QSPI时序的Verilog实现

本节主要是讨论QSPI(Quad SPI,四线SPI总线)的相关内容。我的开发板上有一片型号是W25Q128BV的Quad SPI Flash存储器,本文将以它为例子来说明QSPI操作的一些内容。

Go Forward Forever! 4167

Java编程入门指南核心概念与实战实例

manager.addStudent(new Student(S101, 张三, 3.8));System.out.println(姓名: + name + , 年龄: + age);System.out.println(面积: + circle.area());System.out.println(狗在吃骨头);// 输出:“狗在吃骨头”System.out.println(资源释放);System.out.println(动物在进食);System.out.println(总和: + sum);

iBaaRUAw的博客 295

姿态传感器/陀螺仪之BMI270应用原理图设计

BMI270是一款由博世(Bosch)推出的高性能、超低功耗惯性测量单元(IMU),专为可穿戴设备、智能设备及物联网应用设计。

corlin6688的博客 2865

基于 JAVA 的医院门诊信息管理系统

系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对医院门诊信息的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的思想,在医院门诊信息管理系统实现了用户信息、医生信息、医院门诊、预约订单、就诊信息、诊治信息、患者病历、药品信息等的功能性。

QQ1039692211的博客 995

【华为OD机试】2024年真题C卷(python)-API集群负载统计

【华为OD机试】-API集群负载统计-【华为OD机试】-API集群负载统计:某个产品的 restful API 集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。 restful API 是由多个层级构成,层级之间使用/连接,如 A/B/C/D 这个地址,A属于第一级,B属于第二级,C属于第三级,D属于第四级。 现在负载均衡模块需要知道给定层级上某个名字出现的频次,未出现过用0

u014481728的博客 1497

短信验证码逻辑漏洞学习——各种绕过姿势技巧

短信验证码逻辑漏洞学习——各种绕过姿势技巧

记录并分享学习安全的知识点.. 2557

springboot“基于 JAVA 的医院门诊信息管理系统

Java,目前Internet中最流行的编程语言之一。它吸取了C++编程语言的长处的同时还摒弃了许多复杂抽象不易掌握的问题使得Java编程语言不但功能强大而且使用方便。Java技术在使用过程中有优势也有劣势。其优势在于,因为Java本身相对严格的语法,所以可以强化程序员在编程时的规范性问题,不容易出现明显结构错乱的问题。因此,规范将是Java的巨大优势。但是它也有劣势,就是不太适应互联网模式下的不断修改,总是修改容易破坏架构。面向对象的三种特征封装继承和多态。密封主要是指对数据信息的隐藏。

m0_61328269的博客 1141

RK3576 PCIE接口调试:基于RTL8111HS的网卡驱动移植

检查项方法电源电压复位时序检查设备树 reset-gpios链路速率设备识别lspci -vvv驱动加载。

小灰灰的博客 739

Java电影信息管理系统实战:从集合到面向对象设计

Java程序设计中,集合框架与面向对象封装是构建业务系统的两大基石。ArrayList作为最常用的动态数组实现,提供了便捷的增删改查操作,而其底层基于数组的扩容机制与迭代器设计,则决定了遍历时修改集合可能引发的并发修改异常。理解这些原理,不仅能写出健壮的代码,更能体会到业务逻辑与数据存储解耦的价值。在控制台应用场景下,从需求分析到分层设计,再到状态管理与异常处理,往往是初学者从语法迈向工程实践的关键一步。本文以一个电影信息管理系统为例,通过上架、下架、查询、修改、封杀等核心功能,完整演示了如何利用Java集

weixin_29758911的博客 250

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 301

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: Java基础快速入门:基于ArrayList从零打造学生管理系统
下一篇: Java基础快速入门: 面向对象高级之继承、抽象类、代码块与final关键字
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值