- 博客(44)
- 收藏
- 关注
原创 Javase基础-Java中equals和hashCode的契约解析
Java中的equals()和hashCode()方法在对象比较和集合操作中起关键作用。equals()用于判断对象逻辑相等,hashCode()则生成对象的哈希码用于快速查找。两者必须遵循契约:若equals()为true,hashCode()必须相同;反之则不一定。若只重写equals()而不重写hashCode(),会导致HashSet等集合出现严重错误——无法正确查找已存储对象,且可能存入重复元素。正确做法是同时重写这两个方法,确保参与equals比较的字段也参与hashCode计算。现代IDE可自
2025-09-11 20:33:22
604
原创 JavaEE-详解Java多线程(面试相关问题)
Java多线程进阶知识摘要(150字) 本文深入探讨Java并发编程核心机制:1)锁策略:对比悲观锁/乐观锁、公平锁/非公平锁、可重入锁等特性,分析适用场景;2)CAS原理:详解无锁并发实现,指出ABA问题及AtomicStampedReference解决方案;3)synchronized优化:解析锁升级过程(偏向锁→轻量级锁→重量级锁)及锁消除/粗化技术;4)JUC工具:对比ReentrantLock与synchronized,剖析ConcurrentHashMap分段锁演进;5)死锁防治:通过统一加锁顺
2025-09-11 11:59:25
768
原创 JavaEE-详解Java多线程(进阶)
Java多线程深度解析:从入门到进阶 本文系统性地讲解了Java多线程的核心知识,分为初阶和进阶两部分。初阶部分涵盖线程基础、创建方式、状态管理、线程安全及同步机制(synchronized和volatile),通过代码示例演示多线程的常见问题与解决方案。进阶部分深入锁策略(乐观/悲观锁、读写锁等)、CAS原理及ABA问题、synchronized的锁升级机制(偏向锁→轻量级锁→重量级锁)和JIT优化(锁消除/粗化)。全文结合逐行注释的代码,帮助开发者构建全面的并发编程知识体系,适用于提升性能与应对高并发场
2025-09-11 11:51:47
647
原创 JavaEE初阶-详解Java多线程(Multithreading)
本文系统讲解了Java多线程编程的核心知识,内容涵盖: 线程基础概念 线程与进程的区别 创建线程的两种方式(继承Thread/实现Runnable) 线程生命周期与状态转换(NEW/RUNNABLE/BLOCKED等) 线程安全机制 线程不安全的三大根源(原子性/可见性/有序性) synchronized关键字原理与使用(方法/代码块) volatile关键字的内存可见性保证 线程协作 wait/notify机制实现生产者-消费者模式 对比wait与sleep的区别 典型应用场景 线程安全的单例模式实现(双
2025-09-11 11:28:11
741
原创 JavaEE初阶-计算机工作原理:从开关到CPU的奥秘
本文从软件工程师视角深入解析计算机工作原理,首先回顾计算机发展历史,从机械时代到晶体管时代,最终形成现代集成电路计算机。核心部分详细阐述冯诺依曼体系结构的五大组件(运算器、控制器、存储器、输入/输出设备)及其协同工作流程。通过逻辑门构建算术逻辑单元(ALU),配合寄存器与内存实现数据存储,控制单元(CU)通过"取指-译码-执行"周期驱动程序运行。文章还探讨了编程语言从机器码到高级语言的发展,以及操作系统作为资源管理器和抽象接口的关键作用,特别是进程管理机制(PCB)如何实现多任务处理。整
2025-09-11 11:14:15
684
原创 数据库MySQL-Java的数据库编程: JDBC
本文全面介绍了Java JDBC编程的核心知识。JDBC作为Java与数据库交互的标准API,通过驱动管理器架构实现数据库无关性。文章详细解析了JDBC六大核心步骤:加载驱动、建立连接、创建语句、执行SQL、处理结果和释放资源,重点强调了PreparedStatement在防止SQL注入和提升性能方面的优势。通过学生信息管理案例,演示了增删改查操作的具体实现,并推荐使用try-with-resources进行资源管理。最后设置了实践作业,要求完成图书管理系统的查询、修改和删除功能。掌握JDBC编程是Java
2025-09-10 14:36:02
590
原创 数据库MySQL-索引 (Index)和 事务 (Transaction)
MySQL索引与事务是数据库性能与安全的两大核心。索引通过创建高效的数据结构大幅提升查询速度,但会降低写入性能并占用磁盘空间,适合高区分度且频繁查询的列。事务则确保多步操作的原子性,通过ACID特性(原子性、一致性、隔离性、持久性)保证数据一致性,典型应用如银行转账。通过案例分析和实践练习,可以深入理解索引的优化效果和事务的安全保障机制。
2025-09-10 14:25:45
654
原创 数据库MySQL-(进阶)数据库约束 (Constraints)、表关系设计(Table Relations)和复杂查询技术(Query)
本文深入讲解了MySQL表的增删改查进阶操作,重点介绍了数据库约束、表关系设计和复杂查询技术。主要内容包括:1. 数据库约束(NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY等)及其应用场景;2. 表关系的三种类型(一对一、一对多、多对多)及实现方法;3. 聚合查询(GROUP BY、HAVING)和函数使用;4. 联合查询(INNER JOIN、LEFT JOIN等)和多表连接操作;5. 子查询和合并查询技术。文章通过创建示例数据表,详细演示了各种约束的创建和使用,并提供了多
2025-09-10 12:02:33
730
原创 数据库MySQL-数据库基础操作
本文详细讲解了MySQL数据库的基础操作,主要包括数据库创建、表结构设计和数据类型选择三大部分。首先介绍了数据库的基本概念和操作命令,包括显示数据库(SHOW DATABASES)、创建数据库(CREATE DATABASE)、使用数据库(USE)和删除数据库(DROP DATABASE)。其次重点讲解了常用的数据类型,包括数值类型(INT、DECIMAL等)、字符串类型(VARCHAR、CHAR等)和日期时间类型(DATE、DATETIME等)。最后通过一个电商系统案例,演示了如何创建商品表、顾客表和订单
2025-09-10 11:58:45
873
原创 数据库MySQL-(初阶)Create(创建/新增)、Retrieve(读取/查询)、Update(更新/修改)、Delete(删除)
本文详细介绍了MySQL数据库基础的增删改查(CRUD)操作。包括: 新增数据(INSERT):使用全列插入和指定列插入两种方式,推荐指定列插入以提高安全性; 查询数据(SELECT):涵盖全列查询、指定列查询、表达式计算、别名、去重、排序、条件查询和分页等功能; 修改数据(UPDATE):强调WHERE子句的重要性,避免误修改整表; 删除数据(DELETE):同样强调WHERE子句,区分DELETE、TRUNCATE和DROP的差异。 文中特别强调了实际操作中的安全注意事项,并提供了课后练习建议。这些基础
2025-09-10 11:49:52
774
原创 Java集合和数据结构-Java三大核心特性:反射(Reflection)、枚举 (Enum)与Lambda表达式。
本文深入解析Java三大核心特性:反射、枚举与Lambda表达式。反射机制赋予程序运行时动态操作类的能力,是Spring等框架的基石,但存在性能开销和安全隐患;枚举类型提供类型安全的常量集合,支持丰富功能且天然防反射破坏;Lambda表达式通过简洁语法实现函数式编程,极大简化集合操作,但需注意可读性和调试难度。三者各具优势:反射实现动态性,枚举确保类型安全,Lambda提升编码效率,开发者应根据场景合理选择,兼顾灵活性与代码质量。
2025-09-08 11:12:19
660
原创 Java集合和数据结构-详解HashMap, TreeMap, HashSet, TreeSet 的使用,深入理解其内部原理
本文深入解析Java中Map与Set的核心数据结构(搜索树与哈希表),分为三部分: 基础使用 详细讲解Map(HashMap/TreeMap)和Set(HashSet/TreeSet)的API使用场景,包括键值对存储、去重、排序等核心功能,提供完整代码示例和最佳实践。 数据结构原理 二叉搜索树部分:系统阐述BST的查找/插入/删除(含三种情况处理)算法,分析其O(logn)理想性能和O(n)最坏情况,解释Java采用红黑树实现TreeMap/TreeSet的原因。 哈希表实现 深入剖析哈希函数设计、冲突解决
2025-09-08 10:45:09
662
原创 Java集合和数据结构-详解泛型 (Generics)
本文全面解析Java泛型机制,涵盖从基础概念到高级应用的完整知识体系。主要内容包括:泛型类定义与使用、类型边界约束、通配符应用(PECS原则)、泛型方法实现、类型擦除机制及其限制,并通过一个完整的泛型二叉搜索树案例进行实践演示。文章重点阐释了泛型如何通过编译时类型检查确保类型安全,提升代码复用性,同时深入探讨了父子类型关系不变性、通配符的协变/逆变特性等高级主题。最后通过实现Comparable接口的泛型二叉搜索树,展示了如何综合运用类型边界和方法重载构建类型安全的数据结构。全文系统性地呈现了Java泛型的
2025-09-08 10:32:42
1109
原创 Java集合和数据结构-详解排序(Sorting)-七大基于比较的排序算法(插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序和归并排序)以及非比较排序算法(计数排序、基数排序和桶排序)
本文系统介绍了计算机科学中的核心排序算法,包括七大基于比较的排序算法(插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序和归并排序)以及非比较排序算法(计数排序、基数排序和桶排序)。重点分析了各算法的原理、实现步骤、时间复杂度、空间复杂度和稳定性,特别强调了快速排序和归并排序的分治思想。文章还讨论了排序算法的优化策略、稳定性在实际应用中的重要性,以及Java内置排序方法的高效实现。最后,总结了根据不同场景选择合适排序算法的权衡考量,为读者提供了全面的排序算法知识体系。
2025-09-08 10:09:13
1016
原创 Java集合和数据结构-java对象的比较-深入剖析 Java 提供的三大核心比较机制(equals, Comparable, Comparator)-应用于 PriorityQueue 的理解和实现
本文系统讲解了Java中对象比较的三大机制:equals()、Comparable和Comparator。首先分析了基本类型和对象比较的区别,强调对象比较需明确规则。然后详细介绍了equals()方法的重写要点及与hashCode()的契约关系,Comparable接口提供的自然排序规则,以及Comparator接口实现的灵活定制排序。最后通过模拟实现PriorityQueue,展示了比较机制如何与堆数据结构结合应用。文章指出,掌握这些比较机制对正确使用Java集合框架至关重要,尤其是PriorityQue
2025-09-08 09:59:22
963
原创 Javase基础-静态绑定 (Static Binding) 和 动态绑定 (Dynamic Binding)
本文深入讲解了Java中的绑定机制(Binding),重点对比了静态绑定(Static Binding)和动态绑定(Dynamic Binding)。静态绑定发生在编译时,基于引用类型和方法参数确定调用关系,典型应用是方法重载(Method Overloading);动态绑定则在运行时根据实际对象类型确定调用关系,是实现方法重写(Overriding)和多态的核心机制。文章通过代码示例展示了两种绑定的具体应用场景,并总结了它们在决策时机、依据和方法类型上的关键区别,帮助读者深入理解Java面向对象编程的核心
2025-09-07 22:45:40
845
原创 Java集合和数据结构-@Override 的两大核心作用
Java中@Override的作用与重要性 摘要:@Override注解在Java中具有双重价值:它既是编译器的"安全网",也是代码可读性的重要标记。当方法签名正确时,不加@Override不会影响程序运行,但强烈建议始终使用它。因为当方法重写出现拼写错误或参数类型错误时,不加@Override会导致隐蔽的运行时错误,而加上它能让编译器立即发现这些问题。典型案例包括方法名拼写错误导致的意外父类方法调用,以及equals方法参数类型错误导致的集合操作失效。最佳实践是始终在重写方法时使用@O
2025-09-07 22:41:48
913
原创 Java集合和数据结构-优先级队列(Priority Queue)及其核心底层数据结构——堆(Heap)
从理论到实践,深入学习**优先级队列(Priority Queue)**及其核心底层数据结构——**堆(Heap)**的完整路径。这是一个在算法、操作系统、数据系统等领域都有着广泛应用的重要主题。
2025-09-07 11:26:31
588
原创 Java集合和数据结构-二叉树(Binary Tree)
·掌握二叉树数据结构的概念和基本实现·掌握二叉树前中后序的递归写法· 掌握二叉树层序的写法· 学习二叉树的前中后序的非递归写法· 完成二叉树相关的面试题练习
2025-09-07 11:11:02
672
原创 Java集合和数据结构-详解 List 接口的路径+预备知识泛型(Generic)和包装类(Wrapper Class)
本文系统介绍了Java集合框架中List接口的两大预备知识——泛型(Generics)和包装类(Wrapper Class)。泛型通过类型参数化实现了编译期类型安全,消除了强制类型转换;包装类则解决了基本数据类型无法直接存入集合的问题,支持自动装箱/拆箱机制。文章详细讲解了List接口的核心方法、遍历方式,并通过扑克牌案例演示了集合操作,最后对比了ArrayList和LinkedList的底层实现差异。掌握这些知识能够帮助开发者编写更安全、高效的集合操作代码。
2025-09-07 10:42:20
731
原创 Java-集合框架及背后的数据结构
本文系统介绍了Java集合框架(JCF)的核心内容,包括框架结构、接口体系、实现类及其底层数据结构。文章首先阐述了JCF包含的三大组件:接口定义抽象行为、实现类提供具体功能、算法工具类提供实用操作。然后详细解析了Collection和Map两大接口体系,通过代码示例展示了常用方法的使用。重点分析了ArrayList、LinkedList、HashSet、HashMap等主流实现类的底层数据结构、性能特点及适用场景,并对比了不同集合类的优缺点。最后强调了理解集合框架对编写高效代码、应对技术面试的重要意义,是J
2025-09-07 10:34:20
979
原创 Javase基础-系统详解—— 异常处理(Exception Handling)
本文全面介绍了Java异常处理机制,包括异常的概念、分类、处理方式以及自定义异常的实现。主要内容包括:1. 异常体系结构:分为Error和Exception两大类,Exception又分为受检异常和非受检异常;2. 异常处理方式:预防优先(防御式编程)、抛出异常(throw)、捕获处理(try-catch-finally)和异常声明(throws);3. 资源管理:推荐使用try-with-resources自动关闭资源;4. 自定义异常:通过继承Exception或RuntimeException创建业务
2025-09-06 22:26:51
679
原创 Javase基础-系统详解String类
本文系统介绍了Java中String类的核心特性与使用方法。主要内容包括:1. String的不可变性和字符串常量池机制;2. 字符串构造、比较、查找、转换、替换、拆分和截取等常用方法;3. StringBuilder和StringBuffer的可变字符串操作;4. 三者的线程安全性和性能对比。重点解析了String的不可变性设计原理及其优势,以及字符串常量池的工作机制。通过大量代码示例演示了各种字符串操作,并提供了面试常见问题的解决方案。文章最后总结了字符串编程的核心思路和工具选择原则。
2025-09-06 22:10:57
877
原创 Javase基础-抽象类 (Abstract Class)、接口 (Interface)和Object类
本文系统讲解了Java面向对象编程中的三个核心概念:抽象类、接口和Object类。抽象类通过abstract关键字定义,作为半成品模板强制子类实现特定方法;接口是纯粹的行为规范,支持多继承。Object类作为所有类的父类,重点介绍了toString()、equals()和hashCode()三个方法的用途和重写规则。通过代码示例详细演示了这些概念的具体应用场景和实现方式,帮助读者深入理解Java类体系结构和面向对象设计思想。文中特别强调了抽象类与接口的区别,以及equals()和hashCode()方法重写
2025-09-06 22:00:03
1270
原创 Javase基础-面向对象编程三大特性中最为精妙的——多态 (Polymorphism)
本文详细讲解了面向对象编程中多态的概念、实现条件及其应用。核心内容包括:1)多态的定义——父类引用指向子类对象并表现出不同行为;2)实现三要素(继承、重写和向上转型);3)重写规则与转型操作(向上/向下);4)多态的优点(扩展性强、耦合度低)和缺点(无法直接访问子类特有成员);5)重要注意事项——避免在构造方法中调用可重写方法,以防出现初始化问题。通过丰富的代码示例,清晰展示了多态的实际应用场景和潜在陷阱。
2025-09-06 21:53:51
975
原创 Javase基础-final 关键字和继承与组合——实例Laptop电脑运行
摘要: 本文探讨了面向对象设计中final关键字与继承/组合的应用。final可修饰类(不可继承)、方法(不可重写)和变量(常量),其中引用类型变量保证引用不变但对象内容可修改。继承体现"is-a"关系,支持多态但耦合性强;组合体现"has-a"关系,通过对象成员实现松耦合,更灵活且遵循"组合优于继承"原则。以笔记本电脑(组合CPU和键盘)为例,说明组合如何通过委托实现功能复用,避免继承的滥用。两者选择取决于关系本质,组合在多数场景下更具优势。
2025-09-06 21:48:47
1036
原创 Javase基础-逻辑控制-顺序结构 (Sequential Structure)分支结构 (Branching/Conditional Structu循环结构 (Looping Structure)
本文详细介绍了Java编程中的逻辑控制结构,主要包括顺序结构、分支结构和循环结构三大基本流程控制方式。重点讲解了if语句、switch语句、while循环、for循环和do-while循环的语法和使用场景,特别强调了break和continue在循环控制中的关键作用。同时介绍了Java的输入输出方法,包括使用Scanner类获取键盘输入。最后通过一个综合性的"猜数字游戏"案例展示如何将这些知识点融会贯通,并提供了相关的练习建议。这些内容是Java编程基础的重要组成部分,对构建复杂程序逻辑
2025-09-05 11:54:52
908
原创 Javase基础- System.out 对象下的三个方法:print()、println() 和 printf()。
本文介绍了Java中System.out对象常用的三个输出方法:print()输出不换行,println()自动换行输出,printf()支持格式化输出。重点讲解了printf()的格式占位符(%s、%d、%f等)和跨平台换行符%n的最佳实践,并展示了控制输出宽度、对齐方式等进阶用法。这三种方法构成了Java控制台输出的核心功能,分别适用于不同场景:简单输出、分行输出和精确格式化输出需求。
2025-09-05 11:49:09
818
原创 Javase基础-Java中只支持以下几种继承方式
摘要:本文通过动物分类模型阐述了Java继承的核心思想,重点解析了单继承、多层继承和层次继承三种实现方式,并说明Java不支持多继承以避免菱形问题。文章强调继承深度不宜超过三层,推荐"组合优于继承"原则,同时介绍了final关键字用于限制继承的两种用法。继承是表示"is-a"关系的有效工具,但需合理使用以保持代码灵活性。
2025-09-05 11:43:27
614
原创 Javase基础-继承初认识(Inheritance)
本文详细讲解了Java中继承机制的核心概念与应用。首先通过教师和学生类的重复代码问题,解释了继承的必要性,指出继承可以有效解决代码冗余和维护困难的问题。文章阐述了继承的语法(extends关键字)、父类与子类的关系,并提供了完整的代码示例,展示如何提取公共属性到Person父类,再由Teacher和Student子类继承。此外,还介绍了继承相关的关键知识点:访问权限修饰符对继承的影响、super关键字的使用方法、方法重写的规则,以及Java单继承的特性。通过实际代码演示,帮助读者全面理解继承在代码复用、类层
2025-09-03 22:42:51
512
原创 Javase基础-如何自定义对象的打印输出?Object 类的 toString() 方法
Java中自定义对象打印输出的关键在于重写Object类的toString()方法。默认情况下,直接打印对象会输出类名和哈希码(如day20210829.Person@1b6d3586),这是继承自Object类的默认实现。通过重写toString()方法(加上@Override注解),可以返回包含对象属性的格式化字符串(如"[Jim,男,18]")。这是调试和日志记录的必备实践,建议为所有实体类重写该方法,可使用IDE自动生成或借助Lombok等工具简化代码。
2025-09-03 20:56:42
463
原创 Javase基础-深入了解匿名内部类 (Anonymous Inner Class)
本文深入解析了Java匿名内部类的核心概念与使用方法。通过Greeter接口示例,展示了匿名内部类如何实现接口并创建对象,同时完成定义类、实现接口和实例化三个步骤。文章详细比较了匿名内部类与传统局部内部类的区别,指出其简化代码的优势,并介绍了实例初始化块等扩展功能。此外,还探讨了匿名内部类向Lambda表达式的演进过程,说明其对函数式接口的简化作用。最后总结了匿名内部类在GUI事件监听、线程创建等场景的经典应用,强调其作为Java重要语法特性对理解Lambda底层原理的价值。
2025-09-03 20:35:28
588
原创 Javase基础-局部内部类(Local Inner Class)深入理解
Java局部内部类(Local Inner Class)详解 本文深入解析了局部内部类的核心特性,通过MethodOuter示例代码展示了其典型用法。局部内部类是定义在方法内部的类,其作用域仅限于所在方法,具有极致的封装性。关键特性包括:1)可访问外部类所有成员;2)能访问所在方法的final或事实final局部变量,这是通过编译器自动创建成员变量副本实现的;3)生命周期与所在方法绑定;4)不能使用访问修饰符。典型应用场景包括封装方法内复杂逻辑和创建特定配置的辅助对象。这种设计既保证了数据一致性,又提供了良
2025-09-03 17:48:27
425
原创 Javase基础-深入了解静态内部类 (Static Inner Class)
静态内部类是定义在外部类中的独立类,不依赖外部类实例。其特点包括:1.可直接实例化,无需先创建外部类对象;2.只能访问外部类的静态成员,不能访问实例变量;3.可定义自己的静态和非静态成员。典型应用场景包括Builder模式、数据结构节点实现等,既能保持代码逻辑关联性,又能避免不必要的耦合。示例代码展示了静态内部类如何访问外部类静态变量,同时保持自身成员独立性。
2025-09-03 16:49:46
908
原创 Javase基础-深入了解实例内部类 (Instance Inner Class)
本文详细解析了Java实例内部类的核心特性及其实现机制。代码示例展示了内部类如何访问外部类的私有成员,揭示了编译器通过隐式引用和合成方法实现的"魔法"。关键点包括:1)内部类实例必须依附于外部类实例存在;2)内部类可以无条件访问外部类的所有成员;3)this和Outer.this的特殊用法。文章还探讨了内部类的典型应用场景,如集合迭代器、GUI事件监听器等需要紧密共享状态的场景。通过伪代码和扩展示例,深入剖析了编译器层面的实现原理,帮助读者全面理解这一重要的面向对象特性。
2025-09-03 16:46:47
923
原创 javase基础-成员内部类分类4种
本文详细介绍了Java中的四种内部类:实例内部类、静态内部类、局部内部类和匿名内部类。实例内部类依赖外部类实例,可直接访问外部类所有成员;静态内部类独立存在,仅能访问外部类静态成员;局部内部类定义在方法内,作用域受限;匿名内部类无需类名,适合一次性使用。文章通过代码示例展示了每种内部类的定义、特点和使用场景,并解释了其访问权限和创建方式,帮助读者深入理解内部类的封装性、代码组织和访问特性。
2025-09-03 16:22:03
754
原创 Javase基础-代码块分类4种
该教程详细解析了Java中的四种代码块类型:普通代码块(定义在方法内,限制变量作用域);构造代码块(类中方法外,对象创建时执行,优先于构造方法);静态代码块(类中方法外,用static修饰,类加载时执行一次);同步代码块(用synchronized修饰,保证线程安全)。每种类型都通过代码示例说明其定义位置、执行时机和主要用途,并附有执行顺序分析和扩展说明。最后用表格对比总结了四类代码块的关键特性。
2025-09-02 22:26:54
1113
原创 Javase基础-常规导入 (import) vs. 静态导入 (import static)
本文介绍了Java中的静态导入(import static)特性及其与C++ #include的区别。静态导入允许直接使用类中的静态成员,简化代码(如Math类方法调用),但需谨慎使用以避免可读性下降和命名冲突。最佳实践包括频繁使用静态常量、单元测试和数学计算场景。此外,Java的import是声明性快捷方式,不增加代码体积,而C++的#include是物理文本替换,二者机制本质不同。合理使用静态导入能提升代码简洁性,同时需兼顾可维护性。
2025-09-01 22:34:46
383
原创 javase基础—实例理解—类的封装和访问限定符-华为牌子电脑
这段Java代码演示了面向对象编程中的封装和访问控制。Computer类定义了计算机的属性和行为,通过private、public和default访问修饰符控制成员变量的可见性:private变量只能在类内部访问,public变量可被任何类访问,default变量仅限同一包内访问。TestComputer类创建Computer对象并访问其属性,展示了不同访问权限的效果。代码体现了封装的核心原则:通常将成员变量设为private以保护数据,通过public方法提供受控访问。public构造方法用于对象初始化,
2025-09-01 21:29:22
611
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人