-
静态变量属于类而非对象,使用static修饰,类加载时分配内存,存储在方法区,所有实例共享同一副本。
-
InputStreamReader是字节流到字符流的解码桥,仅在需将InputStream按字符处理时使用;必须显式指定编码(如StandardCharsets.UTF_8)并套BufferedReader以避免乱码和性能问题。
-
本文介绍如何在Java中高效、安全地解析结构不统一的JSON数据,避免大量冗余的has()判断,通过封装泛型安全访问方法提升代码可读性与健壮性。
-
Java中局部变量必须显式初始化才能使用,未初始化访问会编译失败;而成员变量由JVM自动初始化为默认值(0、false、null),存储于堆,生命周期与对象一致;局部变量存储于栈,方法结束即销毁。
-
类加载阶段包括加载、链接(验证、准备、解析)、初始化三步;准备阶段赋静态变量默认值,初始化阶段执行static块和显式赋值,且同一类加载器下仅初始化一次。
-
Math类提供静态数学方法,位于java.lang包。1.基本运算:Math.abs(-5)返回5;Math.max(3,7)返回7;Math.min(3,7)返回3;Math.round(4.6)返回5L。2.幂与开方:Math.pow(2,3)返回8.0;Math.sqrt(16)返回4.0;Math.cbrt(27)返回3.0。3.三角函数:参数为弧度,Math.toRadians(180)返回π;Math.toDegrees(Math.PI)返回180.0。4.常量与随机:Math.PI≈3.14
-
IDEA多线程编译提速关键在于协同调整Buildprocessheapsize与CompilerVM参数,而非仅勾选“Enableparallelcompilation”;需设堆内存(如-Xmx4g)、元空间(-XX:MaxMetaspaceSize=1g)、ZGC,并调大Buildprocessheapsize至2048MB以上,且重启IDEA生效。
-
double转int默认截断而非四舍五入,因主流语言强制转换语义定义为向零截断;需用Math.round()实现四舍五入,Math.floor()实现向下取整,并警惕精度丢失与溢出风险。
-
Java采用块作用域,变量仅在声明它的{}内可见;同名变量在嵌套块中会遮蔽外层变量,此时需用this.或类名前缀访问被遮蔽的成员。
-
Collections.fill方法用于将指定元素填充到已初始化的列表中,替换所有现有元素。需确保列表具有实际容量,如通过Collections.nCopies创建固定大小列表后使用fill进行统一赋值。
-
抽象类不能直接实例化但可有构造方法,其构造方法由子类对象创建时自动或显式调用,用于初始化继承字段、校验参数及执行前置逻辑。
-
为什么Caffeine的get方法默认不阻塞写入因为Caffeine把“缓存未命中+异步加载”和“同步计算+阻塞等待”做了明确分离。它默认走的是get(key,mappingFunction)这条路径,而这个方法在key不存在时,会用你传的mappingFunction同步计算值并写入,**期间其他线程对同一key的get调用会各自触发计算,不共享loading过程**——也就是常说的“缓存击穿”风险点。常见错误现象:get(key,()->heav
-
答案:Java中try-catch用于处理异常,防止程序崩溃。try块放可能出错的代码,catch捕获并处理特定异常,建议捕获具体异常类型如ArrayIndexOutOfBoundsException或NullPointerException。可同时使用多个catch处理不同异常。finally块无论是否发生异常都会执行,常用于释放资源。从Java7起,try-with-resources可自动管理实现了AutoCloseable接口的资源,如FileInputStream会自动关闭,无需手动close(
-
关联关系是“has-a”,通过成员变量体现,表达长期持有的结构化引用;分为单向、双向、自关联;聚合与组合均用成员变量实现,区别在于部分对象能否独立存在。
-
多态的核心价值在于分离业务逻辑与具体实现,使系统扩展时无需修改原有代码。例如支付场景中订单模块只依赖Payment接口,新增银联支付只需实现该接口;数据访问层同理,切换数据库只需提供新DAO实现类;策略切换和测试也因多态变得灵活可控。