- 博客(22)
- 收藏
- 关注
原创 Java类初始化触发场景及父类、接口初始化规则解析
Java类的初始化是JVM加载类时的一个重要阶段,了解类初始化的触发条件和规则对于理解Java程序的执行流程至关重要。本文将结合字节码分析和具体代码示例,深入探讨Java类初始化的触发场景,以及父类和接口初始化的相关规则。类的初始化会在多种情况下被触发,包括首次使用静态成员、反射调用等。在初始化一个类时,其所有父类都会被初始化,但接口不会。接口的初始化仅在首次使用其静态字段时发生。理解这些规则有助于更好地掌握Java类加载机制,避免潜在的性能问题,并编写更高效的代码。希望本文对你有所帮助!
2025-02-10 14:40:35
468
原创 Java类初始化阶段`static final`字段赋值时机分析
在Java中,修饰的字段赋值时机是面试和实际开发中经常遇到的问题。本文将结合字节码分析,深入探讨字段的赋值时机,并引用代码实例进行说明。加载:通过类的全限定名获取定义此类的二进制流。验证:确保Class文件的字节流中包含的信息符合当前虚拟机的要求。准备:为类变量分配内存并设置类变量初始值,此时不会执行任何用户代码。解析:将常量池内的符号引用替换为直接引用。初始化:执行类构造器<clinit>()方法,包括静态变量赋值语句和静态代码块。通过对使用修饰的基本数据类型或String。
2025-02-10 11:00:04
420
原创 Java中分组与空指针异常的处理及复合分组问题探讨
在Java的日常开发中,我们经常会遇到需要对集合中的对象进行分组的情况。Stream API的方法是一个强大的工具,它允许我们根据对象的某个属性进行分组。然而,如果不正确地使用它,尤其是处理包含null值的情况时,就可能遇到空指针异常。此外,当我们需要根据两个字段进行复合分组时,也有一些需要注意的地方。
2024-12-19 16:44:58
152
原创 JVM面试题
新创建的对象首先分配在Eden区,当Eden区满时,会触发一次Minor GC(小垃圾回收),存活的对象会被复制到一个Survivor区。改进:在Java 8之前,类的元数据存储在永久代(PermGen)中,这部分内存是固定大小的,容易导致内存不足的问题。好处:G1垃圾收集器减少了垃圾回收对应用程序的影响,特别是在大堆内存环境下,能够提供更好的暂停时间预测和更高的吞吐量。好处:元空间的大小只受限于可用的系统内存,避免了永久代内存不足的问题,提高了内存管理的灵活性和稳定性。:将对象的内存空间初始化为零值。
2024-12-15 19:32:29
501
原创 深入剖析 SQL 中 NULL 值的处理及其在条件查询中的重要性
NULL是一个特殊的标记,用于表示缺失或未知的数据。在 SQL 中,它并不等同于空字符串或零。对NULL值的处理需谨慎,以避免逻辑上的错误。对 NULL 值的处理在 SQL 查询中至关重要。不同数据库系统提供了不同的函数来处理NULL,如 Oracle 的NVL,PostgreSQL 的COALESCE和 MySQL 的IFNULL。通过合理使用这些函数,我们可以使查询更加精准,并确保在逻辑上不遗漏任何重要数据。
2024-09-11 21:29:06
978
原创 为什么静态方法不能直接调用非静态的成员属性?
在Java中,静态方法不能直接调用非静态的成员属性,主要原因在于静态方法和非静态成员属性在内存模型和生命周期上的差异。
2024-09-01 20:33:33
534
原创 Java中成员变量与局部变量的区别详解
定义在类体内部,方法体之外。作用域覆盖整个类,可以在类的任何方法中访问。可以被 public, protected, private, static 等修饰符修饰。成员变量和局部变量在Java中扮演着不同的角色,了解它们的区别有助于更好地组织代码结构,合理利用内存资源。成员变量因其较长的生命周期和较大的作用域适用于需要在类中共享数据的情况,而局部变量则更适合在特定方法或代码块中临时存储数据。希望本文对您理解Java中的成员变量与局部变量有所帮助!黑子Java,一起进步。
2024-08-31 15:46:43
1250
原创 抽象!黑子住手,sql一样结果不一样--mysql零宽度空格
在 MySQL 中,如果你希望配置全局属性来使数据库匹配或处理某些特定的字符(例如零宽度字符),你可能需要调整一些配置或执行全局性的数据清理操作。如果你的需求是自动处理数据中的零宽度字符,你可以创建存储过程或触发器来实现。查询数据时,用mybatis的mapper查询数据时,居然没查到数据,但是数据库又存在该条数据,后发生奇怪的一幕 ------如此amaze,之前这带有零宽度的字符是如何存进数据库,不会有阴谋吧,离职前故意加的,玩归玩,闹归闹,具体原因就不得而知了,,以避免意外的数据丢失或其他问题。
2024-08-30 08:45:45
1388
原创 什么!!你自己建了一个java.lang.String类-Java中的双亲委派机制
双亲委派机制是一种Java虚拟机(JVM)用来加载类的策略。在这个模型下,每个类加载器首先不会尝试自己去加载一个类,而是将这个任务委托给其父类加载器去完成,如果父类加载器不能完成(包括其自身),则继续向上委托,直到最高层的启动类加载器(Bootstrap ClassLoader)。如果所有父类加载器都不能加载,则当前类加载器才会尝试自己加载这个类。双亲委派机制是Java平台能够安全稳定运行的重要保障,它确保了类的唯一性,维护了Java程序执行环境的一致性。
2024-08-28 23:40:47
586
2
原创 Java中的static和final:理解它们的用法和含义
static关键字用来修饰属于类的成员,而final关键字用来表示不可改变的变量、方法和类。摘要:本文将介绍Java中的static和final关键字,包括它们的用法、含义和示例。(1)不可继承:使用final修饰的类不能被继承,使用final修饰的方法不能被重写,使用final修饰的变量不能被改变。(3)提高性能:使用final关键字可以提高程序的性能,因为它可以防止子类改变方法行为,减少冗余代码。(2)不可修改:使用final修饰的变量必须在声明时初始化,或者在构造器中初始化,之后不能被修改。
2024-08-28 08:23:54
301
原创 传统的自增ID生成方式中存在单点故障和性能瓶颈的原因
使用一些先进的技术来优化ID生成过程,例如使用UUID或基于加密算法的ID生成方式,以提高生成的ID的唯一性和安全性。在传统的自增ID生成方式中,使用单点数据库生成ID会成为系统的瓶颈,而雪花算法通过在分布式系统中生成唯一ID,避免了单点故障和性能瓶颈的问题。需要注意的是,雪花算法依赖于系统的时钟,需要确保系统时钟的准确性和单调性,否则可能会导致生成的ID不唯一或不符合预期的顺序。通过将这三个部分组合在一起,雪花算法可以在分布式系统中生成全局唯一的ID,并保证ID的生成顺序性。
2024-01-22 10:05:42
496
原创 深入学习MyBatis-Plus框架中的Wrapper系列封装类
其中的Wrapper系列封装类在条件查询和更新中起到关键作用,包括AbstractLambdaWrapper、EmptyWrapper、LambdaQueryWrapper、LambdaUpdateWrapper、QueryWrapper和UpdateWrapper等。除了搭配Lambda表达式、多表连接查询和自定义SQL等功能外,MyBatis-Plus还提供了更多有用的功能,如分页查询、排序、聚合查询等,值得进一步学习和探索。四、QueryWrapper和UpdateWrapper的作用和使用方法。
2024-01-21 15:52:05
1033
原创 深入理解MyBatis-Plus框架中的Wrapper、QueryWrapper和UpdateWrapper
MyBatis-Plus是一款优秀的第三方MyBatis增强工具,提供了很多强大且易用的功能,其中包括了Wrapper、QueryWrapper和UpdateWrapper等封装类。希望本文能够帮助读者更好地理解MyBatis-Plus框架中的Wrapper、QueryWrapper和UpdateWrapper,并为开发工作提供一些实用的技巧和思路。同时,MyBatis-Plus还提供了更多强大的功能,例如分页查询、排序、聚合查询等,读者可以继续深入研究。二、QueryWrapper的作用和使用方法。
2024-01-21 15:42:09
3204
原创 QueryWrapper和UpdateWrapper在Java中的使用及作用解析
在Java开发中,我们经常需要进行数据库操作,其中涉及到的条件查询和更新操作则是尤为重要的部分。为了方便开发人员进行条件查询和更新操作,Java提供了一系列的封装类,其中就包括了Wrapper、QueryWrapper和UpdateWrapper。希望本文的介绍能够帮助到初学者对Wrapper、QueryWrapper和UpdateWrapper的使用有所了解,进而在实际项目开发中能够更加高效地进行条件查询和更新操作。在进行条件查询和更新操作时,我们常常需要构建条件,并对这些条件进行拼接和组合。
2024-01-21 15:36:34
1613
原创 nacos报错create config service error!properties=NacosConfigProperties{serverAddr=‘null’, encode=‘null’
除了spring.cloud.nacos.config.server-addr属性,你还可以在配置文件中设置其他Nacos Config相关的属性,例如spring.cloud.nacos.config.group和spring.cloud.nacos.config.namespace等。在使用Nacos Config时,你需要配置spring.cloud.nacos.config.server-addr属性,以指定Nacos Config服务器的地址。
2023-10-11 10:36:32
2161
原创 java中#{} 和 ${} 的区别?
需要注意的是,默认情况下,占位符的值被视为字符串。在Spring和MyBatis等框架中,可以通过设置相关配置来指定占位符的默认类型或执行自定义类型转换逻辑。是Property Placeholder占位符,用于在Java应用程序中引用外部属性或配置项的值。是MyBatis框架中使用的占位符,也被称为参数占位符。是Spring框架中使用的占位符,也被称为属性占位符。来表示一个参数占位符,它将会在SQL执行时被替换为实际的参数值。是MyBatis中使用的参数占位符,用于在SQL语句中插入参数值。
2023-10-10 17:19:09
1905
2
原创 解决restTemplate请求,报 : No instances avaliable for IP
请注意,@LoadBalanced注解特定于Spring Cloud生态系统,并与服务注册中心和负载均衡器(如Netflix Eureka或Spring Cloud LoadBalancer)配合使用。通过添加@LoadBalanced注解,您可以使用服务名而不是显式的服务地址来调用服务。通过上述配置,您可以使用RestTemplate向服务注册中心中注册的服务发起请求。@LoadBalanced注解加在RestTemplate请求上,可以实现只调用注册中心内注册的服务,并且使用服务名地址进行调用。
2023-10-10 09:19:43
1638
原创 对于java多态的理解
多态的特性就是,运行期才能动态决定调用的子类方法。对某个类型调用某个方法,执行的实际方法可能是某个子类的覆写方法。说明:四个文件,一个父类Person ,两个子类Chinese,English,一个测试类Main。多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。
2023-09-05 11:18:32
215
mysql基础知识课件
2024-08-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人