从满怀期待到一脸茫然,这么长时间我竟然不知道从何开始了,有了目标和规划,却卡在了开头,所以我果断打开豆包和deepseek,它们给我的回复竟然统一的都指向同一个网站:javaguide.cn/
那就从基础开始吧
这么多年光顾着看些新兴的技术,反而是基础没怎么关注过,再回头看,自己还忘了好多,惭愧惭愧
JDK、JRE、JVM、JIT
从前只知这4个都是java的内容,却不知它们的关系
像我这种速成班出来的码农,平时都是下好JDK,安装好环境直接开始码代码,没精力关注这些内容,再回头看着别有一番滋味。
Java 的三种注释
查阅之前写过的项目发现自己还真犯过错
本该文档注释的地方用了多行注释,还是得多注意
Java 的 8 种基本数据类型
数据类型除却int、 long 和boolean,其他用的真的不算太多,应该和项目类型有关,写过的大部分项目都和金额有关,用的最多还是BigDecimal,因为float和double会丢失精度
== 在基本类型与包装类型中的区别
- 基本类型:比较值
- 包装类型:比较对象内存地址
- 推荐用
equals()比较包装类值 - 包装类缓存机制(如 Integer 缓存 -128~127)
对于这个吃过亏的知识点,还是比较清楚的,出现的问题类似这段代码
Integer a = 100; // 自动装箱,实际调用 Integer.valueOf(100),使用缓存
Integer b = 100;
System.out.println(a == b); // true(因为都是缓存中的同一个对象)
Integer c = 200; // 超出缓存范围,会创建新对象
Integer d = 200;
System.out.println(c == d); // false(两个不同对象)
基本数据类型的存储位置
- 局部变量:栈内存
- 实例变量:堆内存(随对象存在)
- 静态变量:方法区/元空间(随类存在)
频繁拆装箱的性能影响
- 装箱创建对象增加内存和 GC 压力
- 拆箱涉及方法调用
- 避免方式:优先用基本类型、使用原始类型流(
IntStream等)、注意循环内操作
项目运行阶段出现过 Full GC问题,排查了很久也发现过循环内拆装箱操作(虽然Full GC的主要原因不是此问题导致,但发现过3处)实话实说,改掉后性能并没有上升多少,只是防患于未然。
方法重写的“两同两小一大”原则
- 两同:方法名、参数列表相同
- 两小:返回值类型、异常类型更小或相等
- 一大:访问权限更大或相等
- 包含协变返回类型、异常限制、权限放大规则
对于重写用的很多,但没有总结过,“两同两小一大”总结的挺好
可变长参数(Varargs)
- 语法:
类型... 参数名 - 本质:数组
- 规则:只能一个,必须是最后一个参数
- 注意事项:与数组方法冲突、重载歧义、性能开销、堆污染警告
基本没用过,但架不住老项目里突然冒出这个别一脸懵
有时候,慢下来补补基础,反而是走得更远的开始。