- 博客(15)
- 收藏
- 关注
原创 null造成的NPE(空指针异常)
《Java对象初始化与NPE防范指南》摘要 已初始化对象在内存中有实例,可安全调用方法;未初始化对象(null)会导致NullPointerException。关键区别在于内存状态和方法调用的安全性。建议采用四种NPE防范措施:显式初始化、Optional包装、防御性判空和Objects.requireNonNull检查。特别注意部分初始化对象和自动拆箱时的null风险。集合场景中,空列表[]优于null,因其可安全操作且减少判空代码。最佳实践包括:声明时初始化集合字段、优先返回空集合而非null、使用Co
2025-06-01 16:25:09
825
原创 static和final关键字
final和static往往搭配使用,效率更高,不会导致类加载(只调用类中的final+static修饰的常量时,不会导致类被加载)static 是 Java 中一个非常重要的关键字,它可以用来修饰。final 是 Java 中一个非常重要的关键字,它可以用来。final 方法不能被子类覆盖\重写(Override)。必须在声明或静态代码块中初始化;不能在构造器中初始化。当一个类被声明为 final 时,它不能被继承。final 变量一旦被初始化后就不能再修改。但注意在构造器中初始化的时候,
2025-05-28 18:59:15
1063
原创 java的引用数据类型
Java数据类型分为基本类型和引用类型。引用类型存储对象地址而非对象本身,包括类、接口、数组、枚举和注解等,默认值为null,位于堆内存。与基本类型的区别在于存储方式(地址vs值)、内存位置(堆vs栈)和传递方式(引用vs值)。Java5引入自动装箱/拆箱机制实现二者转换,如Integer和int的自动转换,但需注意null拆箱会报错、包装类缓存机制及性能影响。特殊场景如String与基本类型转换也常见。使用时要根据需求选择合适的类型,注意转换时的异常处理和性能优化。
2025-05-28 16:17:41
634
原创 虚拟机(centos7) 安装Docker
我的网络配置是桥接模式(Docker 的网络配置(如 iptables 规则或虚拟网桥)会干扰了宿主机的 NAT 网络。有效响应:返回 401 Unauthorized(说明镜像源可访问,但需要认证)(curl 的 401 只表示需要认证,实际拉镜像时 Docker 会搞定)(Docker 会优先从你配置的镜像源查找镜像,如果镜像源没有,则回退到 Docker Hub)验证虚拟机网络连接,主要保证外网连通性,局域网连通性,DNS解析(另虚一篇文章(虚拟机联网)有具体的测试配置过程)
2025-05-25 20:19:19
875
原创 在IDEA中使用MyBatisPlus插件
MyBatisPlus插件为开发者提供了基于图形化界面的代码生成功能,能够快速生成PO、Mapper、Service、Controller等相关代码。安装插件可通过Idea的plugins市场搜索并安装MyBatisPlus插件。使用插件时,首先点击ConfigDatabase,填写数据库连接信息并测试连接。成功后,选择CodeGenerator,填写相关信息并提交,代码将自动生成到指定位置。对于不同版本的IDEA,操作路径可能略有差异,但均可通过快捷键或设置中搜索功能完成配置。
2025-05-23 19:48:06
537
原创 JVM中java线程与本地线程的关系
默认1:1映射:HotSpot(Oracle/OpenJDK的JVM)使用操作系统原生线程(如Linux的pthread、Windows的Win32线程)实现Java线程。N:1模型(用户级线程):多个Java线程复用一个操作系统线程(如早期的Green Threads),但此模型因并发性能问题已被淘汰。1:1模型(内核级线程):每个Java线程直接对应一个操作系统原生线程。M:N模型(混合线程):Java线程与操作系统线程多对多映射,但现代JVM未广泛采用此复杂模型。,即采用1:1的线程模型。
2025-05-22 11:30:48
137
原创 类加载和class对象
JVM类加载器是Java虚拟机核心组件之一,负责将.class文件加载到内存并生成对应的Class对象。类加载器采用“双亲委派模型”,确保类的唯一性和安全性。类加载器层次结构包括:启动类加载器(BootstrapClassLoader)、扩展类加载器(ExtensionClassLoader)、应用程序类加载器(ApplicationClassLoader)和自定义类加载器。启动类加载器加载核心类库,扩展类加载器加载扩展库,应用程序类加载器加载用户类路径上的类,自定义类加载器用于实现热部署或类隔离。双亲委派
2025-05-21 21:50:01
873
原创 字节码文件与Class文件
字节码文件和Class文件在Java环境中密切相关,但存在一些区别。Class文件是Java编译器将源代码编译后生成的二进制文件,严格遵循《Java虚拟机规范》,包含魔数、版本号、常量池等结构化部分,文件扩展名为.class,是JVM能够识别和执行的格式。字节码文件则是一个更通用的术语,指各种语言编译后生成的中间代码,不限于Java语言,其他JVM语言如Scala、Kotlin编译后也生成字节码。在Java语境下,字节码文件通常指Class文件,但更强调其作为中间代码的特性。关键区别在于术语范围、来源和严格
2025-05-21 17:43:40
249
原创 String 和基本数据类型的相互转换
Java中String与基本数据类型转换方法总结: 转String推荐String.valueOf()或包装类toString(),避免字符串拼接 转基本类型优先用parseXxx()直接获取值,valueOf()返回包装类对象 注意事项: 处理数字时需捕获NumberFormatException 布尔值仅"true"会转为true 空值需提前检查 性能敏感场景用parseXxx()更优 (字数:148)<|end▁of▁sentence|>
2025-05-21 15:40:56
439
原创 Java 位运算符
位运算符是直接操作整数二进制位的工具,主要用于底层编程和性能优化。它们包括基本位运算符(如按位取反、按位与、按位或、按位异或)和移位运算符(左移、算术右移、逻辑右移)。位运算符仅适用于整数类型(如byte、short、int、long、char),运算前会自动进行类型提升。常用应用包括判断奇偶、交换两数和取绝对值。使用位运算符时需注意运算符优先级、复合赋值运算符的隐式转换、数值问题以及不可用于BigInteger等限制。位运算符的设计初衷是保证跨平台一致性,且不适用于浮点数和布尔值。
2025-05-21 11:20:16
1064
原创 Java基本数据类型转换规则
Java中的数据类型转换分为自动类型转换(隐式转换)和强制类型转换(显式转换)。自动类型转换发生在精度小的数据类型赋值给精度大的数据类型时,遵循byte→short→int→long→float→double的规则。混合运算时,系统将所有数据转换为容量最大的类型再计算。byte、short、char之间不会自动转换,但计算时会先转换为int类型。boolean不参与转换。强制类型转换用于将精度大的数据类型转换为精度小的数据类型,需使用强制转换符,可能导致精度降低或溢出。示例代码展示了不同类型转换的具体应用和
2025-05-20 22:22:43
834
原创 Java基本数据类型
基本数据类型是编程语言中内置的最小数据单元,用于存储简单的值,具有固定大小、高效和不可分割的特性。Java中有8种基本数据类型,分为四类:整数类型(byte、short、int、long)、浮点类型(float、double)、字符类型(char)和布尔类型(boolean)。整数类型用于存储有符号整数,浮点类型遵循IEEE 754标准,字符类型使用Unicode编码,布尔类型只有true和false两个值。IEEE 754标准定义了浮点数的表示方法,包括符号位、指数部分和尾数部分。这些数据类型在内存中占用
2025-05-20 21:15:17
268
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人