- 博客(33)
- 收藏
- 关注
原创 多线程练习复盘:那些让我头大的坑与顿悟
最开始练习的时候,总觉得多线程就是“开几个线程一起跑”,结果写出来的代码要么是线程安全问题一堆,要么是看似并行实则串行。建议大家练习的时候,别只停留在“实现功能”,多去琢磨怎么排查线程安全问题,怎么优化锁的粒度,甚至可以试试用 CountDownLatch 、 CyclicBarrier 这些工具类来控制线程执行顺序。最近泡在多线程的专项练习里,从最基础的 Thread 类创建线程,到 Runnable 接口实现,再到线程同步、锁机制,踩过的坑能绕两圈,也总算摸透了一点多线程的门道。
2025-12-28 16:35:31
158
原创 异常练习:在试错中吃透Java异常处理的底层逻辑
建议大家做异常练习时,别只满足于“处理掉异常”,多去思考**“这个异常该由谁处理”“是否需要向上抛出”“如何给用户/开发人员返回有用的信息”**,才能真正把异常处理的逻辑刻进脑子里。但在模拟业务场景的练习中发现,好的自定义异常需要携带业务错误码、错误信息,甚至关联异常源,这样在分布式系统中排查问题时,才能快速定位到问题环节。借着练习的复盘,和大家聊聊我踩过的那些坑,以及对异常处理的新认知。其实异常练习最核心的不是“写出不报错的代码”,而是搞懂“为什么会抛异常”“该在哪个层级捕获”“如何优雅处理”。
2025-12-28 16:33:26
238
原创 玩转Java Map集合,从基础到实战的全面解析
在Java集合框架中,Map是与Collection并列的核心接口,它以**键值对(Key-Value)**的形式存储数据,是开发中处理映射关系的必备工具。不管是日常业务开发中的数据缓存、配置存储,还是复杂的业务逻辑映射,Map都能发挥关键作用。3. 无序/有序特性:不同实现类的有序性不同,如HashMap无序,LinkedHashMap按插入顺序排序,TreeMap按Key的自然顺序排序。1. 键的唯一性:Map中的Key是唯一的,不能重复,若插入相同Key的键值对,新的Value会覆盖旧值。
2025-12-28 16:30:56
506
原创 吃透Set集合,这篇练习帖就够了!
在Java编程中,Set集合是处理无序、不可重复元素的重要工具,也是面试和开发中的高频考点。1. Set的特性:元素无序且唯一,底层依赖 equals() 和 hashCode() 方法保证唯一性。System.out.println("去重后的列表:" + newList);System.out.println("自然排序:" + numSet1);System.out.println("降序排序:" + numSet2);System.out.println("迭代器遍历:");
2025-12-28 16:28:01
290
原创 使用List集合专项实验:吃透Java列表的核心用法与特性
另外,利用 Collections.sort() 对List进行排序、通过 subList() 截取子列表等操作,也让我掌握了List集合的灵活用法,比如 subList() 返回的是原列表的视图,修改子列表会同步影响原列表,这也是开发中容易踩坑的点。最近完成了使用List集合的专项实验,从ArrayList、LinkedList的底层特性对比,到增删改查、遍历、排序等操作的实操,让我对List集合的理解从“会用”变成了“懂原理”,今天就和大家聊聊这次实验的收获。
2025-12-24 12:07:37
165
原创 基于字符串的专项实验:解锁Java String类的隐藏细节
实验的第一个环节是探究字符串的创建方式差异:直接赋值 String str = "Java" 会从字符串常量池获取对象,而 new String("Java") 则会在堆内存新建对象,通过 == 和 equals() 的对比测试,直观看到了引用比较与值比较的区别。最近完成了基于字符串的专项实验,从字符串的创建、拼接、比较到不可变性的验证,一系列实操让我对 String 类的理解不再停留在表面,也想和大家聊聊这次实验的收获。比如在实际开发中,根据场景选择合适的字符串操作类,能有效提升程序的运行效率。
2025-12-23 23:05:46
334
原创 Java虚拟机(JVM)内存模型与垃圾回收全解析
基于这些算法,JVM提供了多种垃圾收集器,如串行收集器、并行收集器、CMS收集器、G1收集器等,G1收集器作为新一代收集器,将堆划分为多个Region,实现了分代收集与区域收集的结合,兼顾了吞吐量和停顿时间。线程共享区则包括方法区和堆,堆是对象实例的主要存储区域,也是垃圾回收的核心区域,方法区存储类信息、常量、静态变量等,在JDK1.8中方法区被元空间替代,元空间直接使用本地内存,避免了永久代的内存限制。垃圾回收的前提是判断对象是否存活,主流的判断算法有引用计数法和可达性分析算法。
2025-12-22 11:14:20
378
原创 基于Object类及包装类专项实验:探索Java基础的核心奥秘
这次实验围绕 Object 类的核心方法展开,比如重写 toString() 让对象的打印输出更具可读性,重写 equals() 方法实现自定义对象的相等判断,还有 hashCode() 与 equals() 的联动规则验证,每一个实操步骤都让我明白,这些看似基础的方法背后,藏着Java对象设计的底层逻辑。近期完成的基于Object类及包装类的专项实验,让我对这些基础知识点有了更具象、更深入的认知,也想把实验中的收获和思考分享给同样在Java路上摸索的小伙伴们。
2025-12-22 11:03:26
194
原创 Java并发编程全解析:从线程安全到JUC容器实战
而 synchronized 是重量级锁,能同时保证这三个特性,它通过对象头的监视器锁实现,在JDK1.6后经过锁升级(偏向锁→轻量级锁→重量级锁)优化,性能大幅提升。与 synchronized 相比, ReentrantLock 作为显式锁,支持公平锁/非公平锁切换、可中断获取锁,灵活性更高,适合复杂的并发场景。需要注意的是,并发编程易出现死锁、活锁等问题,开发时需遵循“锁的顺序性”“尽量减少锁的持有时间”等原则,同时可借助JConsole、VisualVM等工具排查并发问题。
2025-12-16 20:22:12
308
原创 Java注解与反射进阶:自定义注解开发及框架底层应用
注解的本质是一种特殊的接口,它继承自 java.lang.annotation.Annotation ,而元注解是定义注解的“注解”,其中 @Target 指定注解作用位置(类、方法、字段等), @Retention 决定注解的生命周期(源码期、编译期、运行期),这两个元注解是自定义注解的基础。反射结合注解的经典应用是Spring的IOC容器,Spring通过扫描带有 @Component 注解的类,利用反射的 Class.newInstance() 创建对象,并将其纳入容器管理。
2025-12-16 20:20:25
333
原创 一篇搞懂Java反射与单例设计模式(无代码版)
方式3:通过“全类名”拿:输入“包名+类名”(比如“com.test.Student”),就能找到对应的类对象——这种方式常用在配置文件里(比如JDBC加载驱动)。单例模式是最常用的设计模式之一,核心目标很简单:让一个类在整个程序里,只存在一个实例对象(比如工具类、配置类,没必要创建多个对象)。反射:通过“类对象”,就能直接获取类的信息,甚至直接操作这个类(比如创建实例、调用方法)——相当于“透过类对象,操控原类”。方式1:从“类的对象”里拿:先创建一个类的实例,再通过实例获取它对应的类对象。
2025-12-04 23:04:51
328
原创 《Java序列化与反序列化全解析:对象持久化与跨端传输的核心逻辑》
在Java开发中,序列化与反序列化是实现“对象持久化”“跨端数据传输”的关键技术,从分布式系统到缓存框架都离不开它。最后会结合“Redis缓存对象存储”“Dubbo服务间通信”等实战案例,带你把序列化技术落地到实际开发中,避免踩中“序列化失败”“数据不一致”等坑。主流序列化框架对比:JDK序列化、JSON、Protobuf、Kryo的性能与适用场景。序列化的进阶场景:跨版本兼容性、 transient关键字的作用。序列化的核心概念:为什么需要序列化、JDK默认序列化的实现方式。
2025-11-28 09:47:34
416
原创 《Java网络编程全解析:从Socket到NIO实战》
Java网络编程是实现“跨端通信”的核心能力,从传统的B/S架构到现代的微服务通信都离不开它。最后会对比BIO、NIO、Netty的性能差异,并给出不同业务场景下的技术选型建议,帮你在实际开发中选对网络通信方案。NIO的核心组件:Channel、Buffer、Selector的工作逻辑。Netty框架的核心优势:如何基于Netty快速实现高性能通信。网络通信的底层原理:TCP/IP、UDP协议的核心区别。NIO的实战应用:手写一个简易的“多人聊天服务器”
2025-11-28 09:44:21
363
原创 Java IO流与File类全解析:从概念到核心应用
字符流:以字符为传输单位,仅用于操作文本文件(如 .txt 、 .java ,不含 .mp3 、 .class 等二进制文件)。字节流是IO的基础流,以字节为单位处理数据,核心抽象类为 InputStream (输入)和 OutputStream (输出)。字符流以字符为单位处理数据,核心抽象类为 Reader (输入)和 Writer (输出),仅适用于文本文件。- 功能:支持自动换行( println() )、直接写入对象(调用对象的 toString() )。
2025-10-29 09:43:25
417
原创 Java集合体系超全总结:从基础到开发重点
若相同,再比较 equals() ,若返回false则存储,否则去重。- 去重规则:依赖 hashCode() 和 equals() 方法(HashSet),或自然排序/比较器(TreeSet)。Set是Collection的子接口,特点是元素无序、不可重复,常用实现类有HashSet、TreeSet等。List是Collection的子接口,特点是元素有序、可重复、支持下标操作,是开发中最常用的集合类型之一。- 核心学习维度:集合的接口定义、常用实现类、增删改查方法、遍历方式、泛型与工具类。
2025-10-29 09:39:33
365
原创 JAVA中的常用类
BigDecimal类用于高精度的浮点数运算,避免了浮点数运算中的精度问题。它提供了加减乘除等运算方法,适合财务计算等场景。Object类是Java中所有类的超类,每个类都直接或间接继承自Object类。Java为每种基本数据类型提供了对应的包装类,如。这些类是Java编程中常用的工具,掌握它们的使用方法对开发高效、可靠的程序至关重要。String类用于表示不可变的字符序列。这些类提供了丰富的方法,如类型转换、数值比较等。是线程安全的,适用于多线程环境。类用于处理可变长度的字符串。返回对象的运行时类。
2025-09-29 11:36:18
176
原创 Java异常:错误处理的核心机制与最佳实践
对于实现 AutoCloseable 接口的资源(如文件、连接),使用 try-with-resources 语法自动释放资源,简化代码并避免泄漏。- finally 块:无论是否发生异常, finally 块中的代码始终执行,常用于资源释放(如关闭文件流、数据库连接)。- 标准化处理:Java提供统一的异常处理语法( try-catch-finally ),简化错误处理流程。- 在业务层捕获底层异常(如数据库异常),封装为自定义业务异常后重新抛出,隐藏技术细节。
2025-06-19 14:06:32
487
原创 Java集合:数据存储与处理的核心工具集
在Java程序设计中,**集合框架(Collection Framework)**是处理动态数据的核心工具,它提供了一组接口、实现类和算法,用于高效存储、检索和操作数据。从日常业务开发到复杂算法实现,集合的合理使用直接影响程序的性能与可维护性。- 提供排序( sort() )、查找( binarySearch() )、同步包装( synchronizedList() )等实用方法,简化集合操作。- 统一的遍历接口,支持 hasNext() 、 next() 、 remove() 操作,适用于所有集合类型。
2025-06-19 14:05:05
505
原创 Java常用类:高效编程的“瑞士军刀”
静态工具类:提供标准输入输出( System.in 、 System.out )、系统属性获取( System.getProperty() )、数组复制( System.arraycopy() )等功能。- 常用方法: length() 、 equals() 、 substring() 、 split() 等,用于字符串长度计算、比较、截取和分割。- Arrays 类:提供数组排序( sort() )、查找( binarySearch() )、填充( fill() )等工具方法。
2025-06-19 14:03:13
448
原创 Java内部类:代码封装、访问控制与设计模式的利器
在Java程序设计中,**内部类(Inner Class)**是定义在其他类内部的类。- 访问外部类成员:内部类可直接访问外部类的所有成员,包括私有属性和方法,因为编译后内部类会持有外部类的隐式引用(成员/局部内部类)。- 内存泄漏风险:成员内部类持有外部类的强引用,若外部类生命周期过长,可能导致内存泄漏(如非静态内部类在匿名内部类中使用)。- 生命周期关联:成员内部类与外部类实例绑定,外部类实例销毁时,内部类实例也随之销毁。- 定义:没有类名的内部类,通常用于创建接口或抽象类的实例,同时实现其抽象方法。
2025-06-19 14:01:29
388
原创 Java接口:抽象设计与灵活扩展的基石
在Java程序设计中,**接口(Interface)**是实现抽象与多态的重要工具,它通过定义规范而非具体实现,赋予代码高度的灵活性和扩展性。接口是Java面向对象设计的“契约工具”,它通过抽象规范隔离实现细节,让代码在扩展时具备“对修改关闭,对扩展开放”的能力。- 多实现机制:一个类可实现多个接口,弥补Java单继承的限制,体现“具备某种能力”的关系(如“鸟具备飞翔能力”)。- 纯抽象性:接口中的方法默认是 public abstract ,仅声明功能而不提供实现,必须由实现类重写。
2025-06-19 13:59:59
381
原创 Java三大修饰符:访问控制、状态标识与继承限制的深度解析
在Java程序设计中,修饰符是控制类、属性和方法的可见性、状态及行为的关键工具。其中,访问修饰符、static修饰符和final修饰符是最基础且高频使用的三大修饰符,它们从不同维度影响代码的结构、安全性和可维护性。),避免外部非法修改。- 定义:不允许被继承,常用于设计不可扩展的工具类(如 String 、 Math )。- 应用场景:对外提供的公共接口(如工具类的静态方法)或需要被其他模块广泛调用的类。- 定义:通过 static 关键字修饰的属性,被类的所有实例共享,存储在方法区。
2025-06-19 13:57:38
345
原创 Java面向对象三大特征:封装、继承与多态的深度解析
封装是将类的属性(数据)和方法(行为)组合成一个独立单元,并通过访问修饰符( private 、 protected 、 public )控制外部对类成员的访问。在Java程序设计中,封装、继承、多态是面向对象编程(OOP)的三大核心特征,它们赋予代码模块化、可复用性和灵活性,是构建大型、复杂系统的基石。继承通过 extends 关键字实现,允许子类(派生类)继承父类(基类)的属性和方法,从而复用代码并扩展功能。在实际开发中,合理运用封装、继承和多态,可显著提升代码的可维护性、扩展性和复用性。
2025-06-19 13:55:47
373
原创 Java面向对象编程:面试高频考点与核心概念深度解析
封装:将数据和操作数据的方法封装在类中,通过访问修饰符( private 、 protected 、 public )控制外部对类成员的访问,提高数据安全性和代码可维护性。- 接口:完全抽象的类型,所有方法默认 public abstract ,属性默认 public static final ,用于实现“has-a”关系(如“鸟有飞翔能力”)。- 继承:子类继承父类的属性和方法,通过 extends 关键字实现,可减少代码重复,体现“is-a”关系(如“猫是动物”)。super 关键字的作用是什么?
2025-06-19 13:49:54
422
原创 Java数组:从基础到核心应用的全面解析
java.util.Arrays 提供排序( sort() )、查找( binarySearch() )、填充( fill() )等实用方法,大幅简化开发。数组是Java中最基础的数据结构,用于存储相同数据类型的多个元素,形成连续的内存空间。当数组存储自定义对象时,修改元素引用指向的对象会影响所有指向该对象的引用,需注意深拷贝与浅拷贝的区别。若需动态调整或复杂操作,选集合框架。- 引用类型数组:存储对象引用,数组本身在堆中,引用指向堆中的对象。3. 多维数组:本质是“数组的数组”,常见于矩阵、表格数据。
2025-06-19 13:45:03
205
原创 Java函数:从基础到核心逻辑的全面解析
引用类型(对象、数组等):传递的是对象地址的副本,修改副本指向的对象属性会影响原值,但重新赋值地址(如 obj = null )不影响原引用。- 异常与返回值的权衡:若函数可能出错,除了返回错误码(如-1表示失败),更推荐用异常机制(try-catch)处理。- 函数作为行为抽象:例如“动物”类中的 run() 方法,不同子类(狗、鸟)可重写(Override)实现不同行为。,终止条件为 n=1 );- 访问修饰符:public(公共)、private(私有)等,决定函数的可访问范围;
2025-06-15 18:57:12
420
原创 Java循环结构笔记:从基础到实践
循环结构是Java编程的核心基础,选择合适的循环类型(for/while/do-while)能让代码更清晰高效。实际开发中需注意循环条件的正确性、性能优化及异常情况处理,结合break/continue等关键字灵活控制流程,才能写出健壮的程序。练习建议:尝试用三种循环实现同一功能(如打印1-100的奇数),对比不同循环的使用场景和代码风格。System.out.println("1-100的和:" + sum);// 当i=5时退出循环。
2025-06-15 18:55:24
380
原创 Java 核心基础:变量、数据类型、表达式与运算符详解
变量、数据类型、表达式与运算符是Java编程的核心基础,它们贯穿于程序的每一个角落。接下来,我们就深入剖析这些核心概念,为Java开发打下坚实基础。变量是程序中存储数据的基本单元,它就像一个贴有标签的盒子,可以存放不同类型的数据。- 逻辑表达式: a > 10 && b < 20 (逻辑与)、 a > 10 || b < 20 (逻辑或)用于对二进制位进行操作,如 & (按位与)、 | (按位或)、 ^ (按位异或)等。- 关系表达式: a > b 、 a == b (结果为 boolean 类型)
2025-06-13 18:53:36
455
原创 Java环境搭建:开启编程探索的第一步
当终于配置成功,在命令行输入 java -version 看到版本信息时,那种喜悦难以言表,这是靠自己摸索、克服困难后的成果,也让我明白,编程路上的小挫折,只要坚持尝试,终会迎来柳暗花明。同时,我也意识到,环境搭建只是起点,未来还有语法、框架等知识要学,但这第一步的成功,给了我信心,让我相信只要保持探索、不惧难题,就能在Java学习里不断进步,解锁更多编程可能。在学习Java的道路上,环境搭建是最初却至关重要的一步,它像为编程之旅打开一扇门,过程中满是新认知与思考,让我对Java学习有了独特感悟。
2025-06-08 14:52:51
167
原创 Deepseek的发展背景和前景
在未来,Deepseek的发展前景仍然十分广阔。Deepseek作为一家专注于深度学习技术的公司,抓住了这一技术风口,致力于将深度学习技术应用于更多的领域,为客户提供定制化的人工智能解决方案。综上所述,Deepseek作为一家专注于深度学习技术的公司,在人工智能技术蓬勃发展的背景下,具有良好的发展前景。总的来说,Deepseek作为一家在人工智能领域具有雄厚实力和广阔前景的公司,将继续不断创新、精益求精,为推动人工智能技术的发展和应用做出更大的贡献,助力构建智能化、数字化的未来社会。
2025-03-06 16:24:50
463
原创 初识Java
Java在众多领域有着广泛的应用。随着技术的不断发展和Java生态系统的完善,Java将继续保持其在计算机科学领域中的重要地位,并为开发人员提供强大的工具和支持。总的来说,Java是一门适合初学者入门的编程语言,其简洁清晰的语法结构、跨平台特性和丰富的类库为初学者提供了一个良好的学习平台。其次,Java拥有强大的跨平台特性,开发的Java程序可以在不同操作系统上运行,而无需额外的修改。此外,Java拥有丰富的类库和框架,这些类库和框架提供了各种功能强大的工具和组件,帮助开发者快速构建复杂的应用程序。
2025-03-06 16:14:49
466
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅