- 博客(12)
- 收藏
- 关注
原创 多线程学习
在多线程环境下,程序运行的结果与单线程环境下的预期结果一致,则称程序是线程安全的;否则为线程不安全。举个线程不安全经典案例:多线程自增变量。两个线程同时对一个共享变量count自增 5 万次,预期结果是 10 万,但实际结果远小于 10 万,体现线程不安全。// 共享变量// 线程1:count自增5万次i < 50000;});// 线程2:count自增5万次i < 50000;});t1.start();
2026-05-28 17:04:08
389
原创 栈与队列详解
对这两个数进行运算,结果再次入栈,直到遍历完数组,最后留在栈中的元素就是结果。思路:队列时先进先出,后进后出,栈是先进后出,后进先出,要用队列实现先进后出,后进先出性质就需要用到两个队列queue1和queue2,当需要入栈操作时,我们将元素放到queue1中,需要出栈操作时将queue1中的元素依次出队列放入queue2中,最后一个元素不入队并返回,当后续再次入栈操作时,我们向不为空的队列中添加元素,出栈时将不为空的队列中的元素依次放入空队列中,同样最后一个元素不放入并返回。
2026-03-19 14:38:35
536
原创 LinkedList详解
链表是由一组节点组成的线性表,节点之间通过指针串联,而非依赖连续内存地址。这就使得链表在逻辑上连续,物理上无序。可以想象成链表就是一串珍珠手链,每颗珍珠(节点)都有一个珠眼(指针域),由线(内存地址)串联在一起,构成完整的项链(链表)。链表的每个节点都是一个对象,包含两个值:数据域和指针域,指针域里面存放的是下一个节点的内存地址或上一个节点的内存地址。是链表串联的关键。根据链表的头节点是否会改变可分为带头链表和无头链表,带头是指头节点地址永远不变,与头节点里面是否存放数据无关。
2026-03-18 09:55:17
485
原创 ArrayList详解
ArrayList 位于 java.util 包下,实现了 List 接口,底层通过可动态扩容的数组存储元素。在集合框架中,ArrayLIst是一个实现类,实现了List接口,具体框架如下:ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。
2026-03-17 11:43:03
841
原创 抽象类&接口&Object类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类是用abstract关键字修饰的类,不能被实例化,只能当作父类被继承,并且子类必须实现父类的所有抽象方法。已经有了普通父类,为什么还需要抽象类呢?普通父类无法强制子类重写方法,而抽象类就像一个规范标准,里面定义的抽象方法能通过编译器强制子类实现关键逻辑,避免 “遗漏核心方法” 的开发错误 —— 这和final。
2026-02-08 16:05:01
1172
1
原创 彻底理解 Java 封装、继承、多态
封装就是将对象的属性(数据)和行为(方法)包装在类中,禁止外部直接访问内部细节,仅通过预定义的接口与外部交互。核心是隐藏实现细节,暴露公共接口。就像一台电脑,把CPU,GPU,电路板等核心部件封装在机箱内(隐藏细节),用户无需知道内部构造,只需通过充电口、USB 接口(公共接口)即可使用,既保证了内部部件的安全,也简化了用户操作。那么程序中是如何来隐藏具体实现细节的呢?通过访问权限符修饰符限制访问范围。又是程序中如何提供接口的呢?通过Getter/Setter方法。
2026-02-07 15:15:07
748
原创 解锁 Java OOP:一篇搞懂类与对象的核心逻辑
面向过程编程和面向对象编程就好比洗衣服时手洗和洗衣机洗的区别,手洗(面向过程)关注执行步骤,一步一步手动完成,步骤缺一不可:接水—>放衣服—>倒洗衣粉—>发泡衣服—>搓衣服—换水—>搓衣服—>拧干—>晾晒,洗衣机洗(面向对象)我们只关注对象与交互:找到洗衣机,衣服和洗衣液三个对象,让洗衣机调用洗衣方法,传入衣服和洗衣液即可,无需关注内部步骤。类比生活中的例子,类就像一张汽车设计图,包含品牌,颜色,排量,座位数这些共有属性,启动,加速,刹车,停车这些行为。先有类,后有对象,所有对象都继承类的属性和行为。
2026-02-06 19:14:05
544
原创 Java数组详解
核心场景是方法需要返回一组数据,如获取数组中所有偶数元素,数组去重后返回新数组等,建议在方法内创建新数组,将结果存入新数组后返回,而非修改原数组,以此保证原数组的不可变性。数组作为方法参数时,栈内存的方法形参会指向堆内存的原数组地址,即形参和实参指向同一个堆数组,因此方法内修改数组的元素值,原数组会同步变化(修改的是同一个堆空间的元素);定义两个指针分别指向两个数组的头部,依次比较指针指向的元素,将较小的元素存入新数组,指针后移,当其中一个数组遍历完,将另一个数组的剩余元素直接复制到新数组。
2026-02-05 11:54:32
910
原创 Java方法详解
方法类似于C语言中的函数,是包含特定功能的代码块,必须定义在类中、main方法外部,本质上是一个造轮子的过程—— 将重复使用的逻辑包装成方法,需要时直接调用,无需重复编写。
2026-02-04 08:52:51
1269
原创 一文吃透 Java 程序逻辑控制
Java 程序的执行并非永远是从上到下逐行执行,程序逻辑控制就是通过特定语法结构改变代码的执行顺序、选择执行指定代码、重复执行某段代码的核心语法。是所有编程语言的基础核心,所有复杂的程序功能,都基于以下 3 种基础结构,三者可以任意嵌套组合:顺序结构:代码从上到下,逐行执行,没有跳转,判断和重复,是最基础的结构分支结构:根据指定条件的成立或是不成立,选择执行不同的代码块,核心是选择执行循环结构:根据指定条件,重复执行某一段代码块,核心是重复执行。
2026-02-03 10:09:32
958
1
原创 我靠这篇吃透 Java 运算符!
构建表达式:如 a + b计算数值和、拼接字符串;控制程序流程:如 if (a > b)决定分支执行、控制循环;操作内存数据:如a++自增变量、x << 2按位移位。运算符类型核心用途算术运算符数值计算、字符串拼接赋值运算符变量赋值关系运算符条件判断逻辑运算符连接 boolean 表达式位运算符二进制位操作三目运算符简化二选一条件判断特殊运算符访问对象、操作数组、强制类型转换。
2026-02-02 15:30:37
787
原创 Java 数据类型与变量全攻略:从入门避坑到面试通关,底层原理 + 真题一网打尽
本文介绍了Java数据类型的基础知识,包括基本数据类型(四类八种)和引用数据类型。详细讲解了变量与常量的定义方式、基本类型变量的使用规范、类型转换规则(自动/强制)以及类型提升机制。重点阐述了包装类的概念、手动/自动装箱拆箱、缓存机制和常用方法。最后总结了初学者和面试常见问题,包括基本类型的存储特性、运算规则、精度处理等核心知识点。全文强调Java强类型语言的特性,并解释了跨平台兼容性的实现原理。
2026-02-01 11:20:07
943
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅