-
Java中ArithmeticException是运行时异常(unchecked),编译器不强制处理,因此即使声明throwsArithmeticException,调用方仍可忽略try-catch或throws,导致异常未被捕获时也无编译错误。要实现“必须显式处理”的约束,需改用自定义的检查型异常(checkedexception)。
-
通过实现NotificationListenerService,Android应用可在用户授权后实时监听系统中所有活跃通知,获取其内容标题、文本、包名、时间、甚至自定义视图结构,适用于消息聚合、无障碍辅助或通知管理类场景。
-
Java转义字符以反斜杠\引导,用于表示特殊字符如\"、\\、\n、\t等;支持Unicode(\uXXXX)和八进制(\ddd)转义;需注意路径、正则中的双重转义及文本块等现代替代方案。
-
字段是Java语法层面的成员变量,属性是OOP中通过getter/setter受控访问的数据抽象;字段关注存储结构,属性强调使用语义与封装行为。
-
JavaGC触发StopTheWorld(STW)是为了确保对象引用关系在回收时不被应用线程修改,避免漏标或误删;关键阶段如G1的根扫描、RSet更新、对象复制等必须暂停所有应用线程。
-
偏向锁默认延迟4秒是HotSpot主动设计的冷静期,为避免JVM启动时内置线程频繁争抢撤销偏向锁;JDK15+起默认关闭,需显式启用-XX:+UseBiasedLocking。
-
ClassCastException发生在运行时,当编译通过但实际对象类型与目标类型不兼容时;例如Parentp=newChildA()后执行(ChildB)p会抛出该异常。
-
分层编译是JVM动态选择5级渐进优化策略的机制:0级纯解释执行,1级C1基础优化,2/3级C1+profiling,4级C2激进优化;触发依赖调用计数与回边计数,非固定阈值。
-
内联优化是将方法调用(如add(a,b))直接替换为方法体(如a+b),消除调用开销;它受字节码大小、方法修饰符、类型稳定性及内联深度限制,需通过JVM参数验证是否生效。
-
String不可变依赖整套设计:finalclass封继承、private字段隔离访问、所有方法返回新对象、构造时防御性拷贝;仅final修饰数组引用并不保证内容不可变。
-
synchronized(this)不一定安全,因其锁作用域仅限当前实例,无法保护静态资源,且在单例、继承、对象发布等场景下易导致锁边界失控,应改用私有final对象锁。
-
Java中Base64编码应使用JDK8+内置Base64.getEncoder().encodeToString(),线程安全且无需依赖;URL安全场景用getUrlEncoder().withoutPadding();解码后需按原始编码(如UTF-8)转字符串,不可直接newString(byte[]);避免手动拼接、错误字符集处理及误当加密使用。
-
Properties.load()读UTF-8中文配置会乱码,应改用load(Reader)并指定UTF-8编码;setProperty()是类型安全的专用方法,put()易致ClassCastException;store()覆盖写入且不保留格式;Properties非线程安全,需外部同步。
-
合并List首选addAll(),需目标集合可变;Set合并推荐构造器+addAll();Stream.concat()仅支持两流且不处理null;GuavaIterables.concat()为懒视图,需转实体集合。
-
Java异常体系通过checked/unchecked分层强制区分外部风险与代码缺陷:IOException等checked异常须显式处理,NullPointerException等unchecked异常应通过防御编程预防;Error不可捕获,自定义异常依业务是否必须响应选择继承Exception或RuntimeException,并善用cause链式传递根因。