-
final用于修饰类、方法、变量和参数,表示不可变。1.final类不能被继承,如String类,确保行为不被修改;2.final方法不能被重写,保证核心逻辑不变;3.final变量只能赋值一次,基本类型值不变,引用类型地址不变;4.final参数在方法内不能被重新赋值,常用于匿名内部类和lambda表达式。合理使用可提升代码安全性和可读性,尤其在多线程环境下保障初始化安全。
-
String.replace()默认只替换第一个匹配项,如"a-b-a-b".replace("a","x")结果为"x-b-a-b";全量替换需用正则加g标志或ES2021新增的replaceAll()方法,后者专为字面量全替换设计、性能更优但不支持正则功能。
-
直接装JDK21并配好JAVA_HOME只需三步:选MSI安装包、装到纯英文无空格路径、JAVA_HOME必须指向JDK根目录而非bin;否则java-version会报错,Maven/IDEA等工具也无法识别。
-
下载Maven二进制包并解压到无中文无空格路径,配置M2_HOME和PATH环境变量,确保JDK版本匹配(Maven3.9+需JDK17+),再配置阿里云镜像加速首次构建。
-
accessOrder必须显式设为true才启用访问顺序,使get()或put()已存在key时将对应Entry移至链表尾部;默认false按插入顺序维护,LRU失效。
-
本文详细讲解如何使用JavaStreamAPI或传统循环方式,对包含多个数值字段的对象列表进行逐字段求和,并封装为单个汇总对象。
-
<p>减法比较会因整数溢出导致排序逻辑翻转,如Integer.MAX_VALUE-Integer.MIN_VALUE结果为-1;应使用Integer.compare(a,b)避免溢出,它通过条件判断返回-1/0/1,性能好且安全。</p>
-
for循环用于已知次数的重复执行,语法为for(初始化;条件;更新){循环体},示例打印1到5。
-
StreamTokenizer需手动设置ordinaryChar()识别运算符,调用parseNumbers()才能识别数字,不支持负数绑定,需自行处理负号;注释需预处理,四则运算建议改用正则或ScriptEngine。
-
ConcurrentHashMap的size()返回近似值,因采用baseCount与counterCells分片计数,遍历时不阻塞写操作,且存在扩容、CAS延迟及缓存伪共享等导致统计滞后;JDK8起推荐使用mappingCount()。
-
使用ZipOutputStream压缩文件的关键步骤包括:1.导入必要的类,如java.io.*、java.util.zip.ZipEntry和ZipOutputStream;2.创建FileInputStream读取文件,创建ZipOutputStream指定输出路径;3.创建ZipEntry并写入文件内容;4.使用递归方法压缩整个文件夹,处理子文件和目录;5.注意编码设置、资源关闭、压缩效率及避免重复条目。整个过程通过try-with-resources确保资源自动关闭,适合基础压缩需求。
-
可以通过Map统计List中重复元素的个数,方法一使用HashMap遍历List并累加计数,方法二利用Java8StreamAPI的groupingBy和counting更简洁实现,还可通过filter筛选出出现次数大于1的重复元素。
-
“找不到主类”是启动配置问题,主因包括类路径错误、主类名未用全限定名、编译缺失、IDE运行配置不当或当前路径不匹配。
-
Java基本类型内存占用固定:boolean1字节、byte1、char/short2、int/float4、long/double8;引用类型4或8字节;对象字段因对齐填充可能增大,数组含头开销,包装类(如Integer)至少16字节。
-
Java集合统一用size()方法获取长度,返回int型元素个数,时间复杂度O(1);注意null调用抛NPE、并发集合size()可能不准、Stream无size()需用count()。