自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

摸鱼的老谭

生命不息摸鱼不止,学而不厌毁人不倦

  • 博客(94)
  • 资源 (2)
  • 收藏
  • 关注

原创 Java学习之旅总目录(更新中...)

1、Java语言简介2、搭建Java开发环境3、Java程序初体验4、安装与配置IDEA5、IDEA的基本使用6、注释7、变量8、数据类型概述9、数据类型之整型数值类型10、数据类型之浮点数值类型11、数据类型之字符类型12、数据类型之布尔类型13、数值类型的两个补充14、数据类型之字符串15、运算符之赋值运算符16、运算符之算术运算符17、运算符之比较运算符18、运算符之逻辑运算符与条件运算符19、运算符之位运算符20、运算符优先级21、控制语句之if语句

2025-10-01 09:45:41 784

原创 Java学习之旅第三季-28:模块系统(二)

本小节介绍了Java模块系统中的opens子句功能。opens允许在运行时对指定模块进行深度反射访问,包括私有成员。文章通过三个示例展示了不同配置下的反射访问效果:1)无exports和opens时仅能获取基本信息;2)仅exports时编译时可访问但运行时私有成员不可访问;3)仅opens时可在运行时访问所有成员。opens与exports可同时使用,分别控制编译时和运行时的访问权限。另外也介绍了开放模使用 open 关键字声明的语法。

2025-12-02 10:27:16 555

原创 DevOps介绍

DevOps是开发与运维团队协作的软件交付方法,通过文化变革和工具整合实现高效交付。其核心在于敏捷协作、自动化和持续改进,催生了DevOps工程师这一复合型角色。关键工具包括CI/CD、安全合规和AI增强类平台。尽管面临技能缺口、工具碎片化和文化阻力等挑战,DevOps仍能显著提升交付速度和质量。通过引入FinOps实践可优化云成本,使组织在保证创新的同时控制支出。这一模式已成为现代软件驱动型企业的关键转型方向。

2025-11-29 20:53:31 631

原创 Java学习之旅第三季-27:模块系统(一)

Java模块系统自Java 9引入,通过module-info.java文件定义模块名称、依赖关系和导出包,实现依赖管理、JRE精简和访问控制。模块分为标准模块和非标准模块,前者由JCP管理,后者为JDK特有。创建模块化项目时,需在src/main/java下添加module-info.java文件,使用requires声明依赖、exports控制包可见性。模块命名建议采用反向域名格式,与包名保持一致但无强制要求。模块系统提升了代码组织性、安全性和开发效率。

2025-11-29 11:19:32 952

原创 Java学习之旅第三季-26:Java本地接口

Java本地接口(JNI)允许Java程序调用C/C++等本地代码,适用于需要访问系统功能、复用现有代码或优化性能的场景。JNI使用步骤包括:编写加载共享库和声明原生方法的Java程序;生成C/C++头文件;实现本地代码并编译为共享库;最后运行Java程序。需要注意的是,JNI会降低程序可移植性和安全性,应作为最后手段使用。示例展示了如何声明native方法并生成对应C头文件,后续需编译为DLL/SO供Java调用。开发时需权衡性能收益与跨平台稳定性的损失。

2025-11-18 15:54:48 574

原创 Java学习之旅第三季-25:虚拟线程

Java 21引入了虚拟线程作为重大新特性,它比传统平台线程更轻量级,内存占用更灵活。虚拟线程由JVM管理,仅在执行时分配到平台线程,通过挂载/卸载机制优化资源利用率。创建虚拟线程可通过Thread.startVirtualThread()或构建器方式,支持设置名称等属性。虚拟线程适合高并发场景,但在同步代码块或本地调用时会失去优势。这一特性显著提升了Java的并发编程能力,是继Lambda表达式后的重要革新。

2025-11-15 10:42:48 929

原创 Java学习之旅第三季-24:线程间通信

本小节介绍了Java中的线程通信机制—等待-通知API,主要包括Object类提供的wait()、notify()和notifyAll()方法的使用原理。这些方法必须在同步上下文中调用,通过条件队列实现线程间的协作。文章以代码示例展示了等待-通知机制的基本用法,并详细分析了线程状态转换过程。接着阐述了生产者-消费者模型,通过共享资源类和synchronized锁实现线程间生产与消费的平衡,强调使用while循环避免伪唤醒问题,给出了具体的实现代码。该机制能有效解决多线程环境下的资源同步和协作问题。

2025-11-12 14:54:28 809

原创 Java学习之旅第三季-23:线程安全(二)

本小节深入分析了Java并发编程中的可见性问题及其解决方案。首先解释了可见性问题的根源在于CPU缓存与主内存的异步操作,导致线程对共享变量的修改无法及时被其他线程感知。随后介绍了Java内存模型通过内存屏障机制保障可见性,重点讨论了synchronized和volatile两种实现方式,并通过代码示例展示了volatile关键字如何解决线程停止标志的可见性问题。最后指出volatile虽能保证可见性但无法解决原子性问题,并简要提及指令重排可能带来的多线程执行顺序问题。文章强调在多线程编程中要正确理解和使用可

2025-11-11 15:39:08 925

原创 Java学习之旅第三季-22:线程安全(一)

本小结介绍了Java中的线程安全概念及其实现方式。当多个线程访问共享资源时,可能出现数据不一致问题。线程安全需要满足原子性、可见性和有序性三个条件。Java通过synchronized关键字提供语言级支持,可以修饰实例方法和静态方法。当修饰实例方法时,同一实例的多个同步方法会被串行访问;而不同实例之间不共享锁。修饰静态方法时,则锁定整个类级别,确保所有实例的静态方法同步访问。另外还介绍了死锁和可重入锁的概念。

2025-11-11 12:00:46 646

原创 Java学习之旅第三季-21:线程的方法

本小结重点介绍了Thread类中对线程操作的三种核心方法:休眠(sleep)、串行化(join)和中断(interrupt)。sleep()方法使线程暂停执行指定时长;join()让线程等待目标线程完成后再继续执行;interrupt()方法用于中断线程执行,可通过interrupted()和isInterrupted()检查中断状态。文章通过具体代码示例展示了这些方法的实际应用场景,包括精确控制线程执行顺序和处理中断异常等。这些方法为Java多线程编程提供了基本的流程控制和协作机制。

2025-11-10 10:40:55 532

原创 最流行的4种JVM语言介绍

摘要:本文介绍了四种主流JVM语言的特性与优势。Kotlin凭借其与Java的互操作性、空值安全性和协程等特性,成为Android开发和服务器端开发的首选;Scala严格实施函数式编程,适用于大数据处理和并发编程;Groovy作为动态脚本语言,简化了Java语法,适合构建DSL和测试框架;Clojure则继承了Lisp的函数式特性,以代码即数据和强大的并发模型著称。这些语言各有所长,共同丰富了JVM生态系统的多样性。

2025-11-08 00:16:38 483

原创 Java学习之旅第三季-20:线程的属性

本节详细介绍了线程的几个核心属性,主要有:1)线程ID(tid)是唯一标识符,通过threadId()获取;2)线程名称(name)默认为"Thread-数字",可通过setName()修改;3)线程状态(threadStatus)包括NEW、RUNNABLE等6种,使用getState()获取;4)优先级(priority)范围1-10,通过get/setPriority()方法操作;5)守护线程(daemon)属性决定线程是否随主线程结束,通过is/setDaemon()方法管理。

2025-11-01 13:46:38 1149

原创 为什么Go语言是原云生开发首选语言

Go语言历经15年发展,已成为Docker、Kubernetes等云原生项目的核心语言。其优势包括:简洁的类C语法、快速编译、高效并发模型、跨平台支持,特别适合构建分布式网络服务和云原生应用。但Go也存在局限性:缺乏部分语言特性、二进制文件体积较大、垃圾回收开销,且不适合底层系统开发。调查显示开发者满意度较高,未来Go将继续深耕网络服务领域,但在AI等新兴领域面临工具不足的挑战。作为平衡开发效率与性能的选择,Go在云基础设施领域已确立长期地位。

2025-10-30 13:23:10 859

原创 Java学习之旅第三季-19:线程的创建与启动

本小节介绍了Java多线程编程的基础知识,重点讲解了进程与线程的区别、线程的创建与启动方式,以及Thread类的构造方法。首先区分了程序、进程、线程等核心概念,随后详细讲解了两种创建线程的方法:继承Thread类和实现Runnable接口,并通过代码示例演示了线程的执行特点。最后简要提及Thread类的多种构造方法,为后续学习线程池和高级并发API打下基础。最后强调了解耦任务与线程的重要性,并指出实现Runnable接口的方式更符合面向接口编程思想,同时暗示了后续将介绍更强大的Callable接口。

2025-10-27 12:14:52 611

原创 Java学习之旅第三季-18:方法引用

Java 8 引入的方法引用是一种简化Lambda表达式的语法糖,通过"::"运算符引用现有方法。主要包括静态方法引用、对象实例方法引用、类实例方法引用和构造方法引用。方法引用不会立即执行,而是在目标类型调用时运行。静态方法引用可直接通过类名调用,实例方法引用需要通过对象或this引用,构造方法引用可用于创建对象实例。方法引用能显著简化代码,提高可读性,是函数式编程的重要特性。

2025-10-25 17:43:59 825

原创 Java 25 中的最佳新特性

Java 25带来多项重要更新:简化了源文件结构和主方法定义,支持更灵活的构造方法体,引入批量模块导入功能。新增ScopedValue替代线程局部变量,提升虚拟线程效率。模式匹配支持基本类型,为Valhalla项目做准备。内存优化方面,引入紧凑对象头和分代垃圾回收机制。这些改进使Java在保持性能优势的同时,进一步提升开发效率和代码简洁性,展现了Java团队持续创新的决心。

2025-10-24 21:05:53 1028

原创 Java学习之旅第三季-17:Lambda表达式

本小节介绍了Java中的函数式编程概念和Lambda表达式。首先概述了函数式编程的特点,包括纯函数的特性。然后详细讲解了Lambda表达式的语法结构,包括参数列表、箭头和主体三部分,并给出了多种合法写法示例。接着阐述了函数式接口作为Lambda表达式的载体,以及目标类型推断规则。最后简要提及交集类型的概念和Lambda表达式作为方法参数的使用方式。全文通过具体代码示例展示了Java 8引入的函数式编程特性及其应用场景。

2025-10-24 16:18:02 825

原创 Java学习之旅第三季-16:解析注解

本小节介绍了Java中通过反射获取运行时注解的方法。重点讲解了AnnotatedElement接口及其方法的使用,包括isAnnotationPresent()、getDeclaredAnnotations()和getAnnotations()等。通过示例演示了不同类型注解(可继承、可重复)的读取特性,强调只有@Retention(RetentionPolicy.RUNTIME)修饰的注解才能被反射获取。文章还解析了可重复注解的实现原理及获取方式,为处理运行时注解提供了实用指导。

2025-10-24 09:26:54 646

原创 Java学习之旅第三季-15:声明与使用注解

本小节介绍了Java注解的基本概念、声明方式和使用方法。注解是Java 5引入的重要特性,用于为程序元素添加元数据,不会改变程序语义但能提供额外信息。同时详细讲解了注解的声明语法,包括修饰符、方法定义和默认值设置,以及关键的元注解@Target和@Retention的作用。同时说明了注解属性的数据类型限制,并通过具体示例展示了如何为不同类型的属性赋值,包括基本类型、枚举、类对象、嵌套注解和数组等场景。最后,文章总结了注解的使用规则,包括赋值顺序、默认值处理、value属性的简写形式以及数组赋值的特殊语法。

2025-10-23 11:55:49 1082

原创 Java学习之旅第三季-14:代理

Java代理模式分为静态代理和动态代理。静态代理需要手动编写代理类,实现与目标类相同的接口,在代理方法中调用目标方法并添加额外逻辑,优点是简单直观,缺点是代码冗余且维护成本高。动态代理通过Proxy类和InvocationHandler接口在运行时生成代理类,无需手动编写代理代码,支持两种场景:无目标类时自行实现接口方法逻辑;有目标类时增强其功能。动态代理灵活性更高,典型应用包括MyBatis和Spring声明式事务。

2025-10-22 16:07:18 827

原创 Java学习之旅第三季-13:反射之创建对象

本小节介绍了Java反射机制在创建对象、访问属性和方法方面的应用。主要内容包括:1)通过Class.newInstance()(已过时)和Constructor.newInstance()两种方式反射创建对象;2)使用Field类的方法动态获取和设置属性值;3)利用Method.invoke()方法调用对象方法;4)讨论了反射与封装的关系,包括如何访问私有成员的示例。

2025-10-22 10:30:22 707

原创 Java学习之旅第三季-12:反射之获取类成员信息

本小结介绍了Java反射机制中用于访问类成员的基础类与方法。首先讲解了Modifier类,它通过静态方法和常量解码修饰符,提供isPublic()等方法判断修饰符类型。然后介绍了Member接口及其子类Field和Method,演示了如何获取类成员名称、修饰符、所属类等信息。针对Field类,详细说明了获取字段类型等操作;针对Method类,展示了获取方法参数、返回值类型等功能的实现方式。文章通过具体代码示例,帮助理解反射机制在获取类成员信息时的应用。

2025-10-21 15:18:20 788

原创 Java学习之旅第三季-11:反射之获取类信息(二)

本小节演示了通过反射获取Java类属性与方法信息的技术细节。在示例代码中扩展了类结构后,详细介绍了Field和Method对象的获取方式,包括getFields()、getDeclaredFields()、getMethods()等方法的使用场景和区别,以及如何处理NoSuchFieldException和NoSuchMethodException异常。通过具体代码示例展示了如何获取公共/私有属性、继承/声明方法等反射操作的关键技术点。

2025-10-21 11:07:18 711

原创 Java学习之旅第三季-10:反射之获取类信息(一)

Java反射机制主要提供运行时查询和修改程序状态的能力,包括自省(获取类信息)和有限度的干预(动态创建对象和调用方法)。核心类是 java.lang.Class,通过三种方式获取Class实例:类字面量、Object.getClass()和Class.forName()。反射API位于java.lang.reflect包中,包含Field、Method、Constructor等核心类,支持获取类结构信息、动态创建对象、调用方法等操作。但Java反射的干预能力有限,无法在运行时修改类结构(如添加字段或方法)。

2025-10-20 22:59:54 1011

原创 构建Agent该选Python还是Java ?

摘要: Python因其易用性和快速实验能力成为AI主流语言,但Java等语言同样适用。关键在于根据团队熟悉度选择技术栈,而非盲目追随流行趋势。Rod Johnson通过Embabel框架证明,Java在类型安全和可维护性上优于Python,尤其适合已有Java基础的企业。AI工具应与现有系统整合,而非全盘替换。最终,AI成功的关键在于团队知识和技能,而非编程语言本身。(150字)

2025-10-19 20:06:09 666

原创 Java学习之旅第三季-9:泛型擦除与堆污染

本小节详细介绍了Java泛型机制中的关键概念和限制。主要内容包括:泛型擦除原理(编译时移除类型参数,保持与旧版本兼容)、泛型方法重写时的桥接方法生成机制、堆污染的成因及潜在风险(如类型转换异常)、可变参数方法中的泛型安全问题,以及使用泛型时的各种限制(如不能实例化类型参数、不能创建泛型数组等)。这些内容揭示了Java泛型在类型安全与兼容性之间的权衡,帮助开发者正确理解和使用泛型特性,避免运行时错误。

2025-10-18 22:55:05 692

原创 Lombok使用指南(四)

本小节介绍了Lombok中的实验性注解,使用时要考虑今后的版本更新造成的变动,另外还介绍了Delombok及其实现原理

2025-10-18 15:29:03 943

原创 Lombok使用指南(三)

本小节主要介绍了Lombok中线程相关注解,日志相关注解等

2025-10-17 10:16:35 1099

原创 Java学习之旅第三季-8:类型参数边界

本小节介绍了Java泛型中的有界类型参数和边界通配符的使用。主要内容包括:1)有界类型参数声明,通过extends限定类型范围;2)无界通配符(?)的使用场景及限制,如:不能创建对象、只能返回Object等;3)上边界通配符(<? extends T>)用于限制类型上限,解决数值计算中的类型问题;4)下边界通配符(<? super T>)用于实现更灵活的类型转换。通配符机制提高了泛型代码的灵活性,解决了类型兼容性问题,但使用时需注意各种限制条件。

2025-10-16 16:14:33 574

原创 Java学习之旅第三季-7:泛型方法

本小节介绍了Java中泛型方法的声明与调用方式,涵盖实例方法、静态方法和构造方法,以及在接口中的使用。主要内容包括:1)泛型方法在非泛型类和泛型类中的声明语法;2)通过类型推断自动确定类型参数或显式指定的调用方式;3)静态方法只能声明自己的类型参数;4)泛型构造方法的使用规则;5)接口中泛型方法的声明和实现方式。

2025-10-16 12:57:06 934

原创 Lombok使用指南(二)

本文介绍了Lombok库中用于对象创建与异常处理的常用注解。包括以下注解:NoArgsConstructor、AllArgsConstructor、RequiredArgsConstructor、Data、Builder、Singular、With、Value、SneakyThrows、Cleanup等。

2025-10-15 23:40:22 924

原创 Lombok使用指南(一)

本文介绍了Lombok的基本概念、优缺点及测试环境搭建,重点分析了Setter、Getter、ToString与EqualsAndHashCode注解的使用方法。并通过反编译代码展示了注解的实际效果。

2025-10-15 21:25:20 1008

原创 Java学习之旅第三季-6:泛型接口

本小节介绍了Java中泛型接口的使用方法。主要内容包括:1)泛型接口的声明语法,支持多个类型参数;2)类实现泛型接口的几种方式(非泛型类可继承原始类型或指定具体类型,泛型类可继承原始类型、指定类型或使用子类类型参数);3)接口继承泛型接口的规则与类实现类似;4)类型推导机制及钻石语法的支持;5)不支持泛型的类型(异常类、匿名内部类、枚举);6)泛型与数组的限制。泛型接口提高了代码复用性和类型安全性,是Java泛型体系的重要组成部分。

2025-10-15 15:30:47 925

原创 Java学习之旅第三季-5:泛型类

本小节介绍了Java泛型的基本概念和使用方法。首先展示了非泛型包装类存在的问题,如类型不安全及需要强制转换。然后详细讲解了泛型类的声明语法,包括类型参数命名规范(T、E、K等),并通过GenericWrapper示例演示了如何定义和使用泛型类。并且着重强调了泛型的两个主要优势:类型安全性和消除强制类型转换。最后讨论了原始类型的概念,指出虽然Java支持向后兼容的原始类型,但不推荐使用,因其会引发编译器警告。

2025-10-15 11:56:40 933

原创 Java学习之旅第三季-4:断言

Java断言机制是一种用于在程序中验证开发者预期的工具,通过 assert 关键字实现。断言包含两种语法形式:简单布尔表达式和带错误信息的表达式。断言默认被禁用,需通过JVM参数 -ea 启用,适用于开发和测试环境,帮助开发者快速定位逻辑错误。与异常不同,断言用于检测编程错误而非业务逻辑异常。Java提供多种选项灵活控制断言启用范围,如特定包、类等。可通过代码检查断言状态,确保程序符合预期。断言是提升代码健壮性的重要调试手段。

2025-10-14 15:00:36 1213

原创 Java学习之旅第三季-3:异常处理机制之自定义异常

本小节首先列举了JDK中常见的运行时异常和受检异常类及其使用场景。然后详细讲解了Throwable类的核心属性和方法,包括detailMessage和cause属性,以及构造方法和常用实例方法。接着介绍了如何自定义异常类,包括继承体系、构造方法实现和业务场景应用示例。最后解释了异常链的概念,说明如何通过cause属性保存原始异常信息,便于调试和问题追踪。

2025-10-14 11:09:38 562

原创 Java学习之旅第三季-2:异常处理机制之抛出异常

本小节介绍了Java异常处理中手动抛出异常的方法。主要内容包括:1)使用throw关键字手动抛出异常,需注意受检异常必须声明throws或捕获处理;2)throws关键字用于声明方法可能抛出的受检异常,调用者需处理;3)方法重写时子类不能抛出比父类更宽泛的受检异常;4)简要介绍了JVM可能抛出的常见Error类型及其产生场景。

2025-10-13 20:42:32 748

原创 Java学习之旅第三季-1:异常处理机制之捕获异常

异常处理部分详细介绍了Java异常机制,包括Throwable类层次结构(Error和Exception的区别)、try-catch-finally语法使用,以及多异常捕获的两种实现方式:通过instanceof判断异常类型或使用多个catch块分别处理。文中通过除零异常和数组越界异常的具体案例,演示了异常捕获后程序继续执行的流程控制。

2025-10-13 13:19:50 750

原创 Java学习之旅第二季-23:Java面向对象编程测试题

D、枚举常量在比较时,必须使用equals( )方法,不能直接使用 == 运算符,因为 == 会比较对象的地址,而枚举常量可能存在不同地址的实例。C、可以通过 values( ) 方法获取枚举类中所有的枚举常量,该方法返回一个包含所有枚举常量的数组,且数组元素顺序与枚举常量定义顺序一致。B、枚举类中不能定义抽象方法,因为枚举常量是枚举类的实例,而抽象方法必须由子类实现。18、在 Java 中,关于枚举(Enum)的特性和使用,下列说法正确的是( )

2025-10-13 09:52:38 497

原创 Java学习之旅第二季-22:Java面向对象编程的特征

Java面向对象编程的四大核心特征包括:封装、继承、多态和抽象。封装通过访问控制修饰符隐藏内部实现,仅暴露必要接口;继承允许子类复用和扩展父类功能;多态实现同一方法在不同对象上的差异化表现;抽象则通过抽象类和接口提取共性特征,隐藏实现细节。这些特征共同构建了Java面向对象的基础框架,提高了代码的复用性、扩展性和维护性。通过合理运用这些特性,可以设计出更加灵活、高效的软件系统。

2025-10-13 08:53:24 664

Appress Pro Spring 5.pdf

Spring最新版本的pdf格式电子书,喜欢看英文原版电子书的的朋友可以下载看看

2018-11-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除