-
Files.walk用于遍历目录,返回Stream<Path>,支持深度控制、文件过滤和异常处理,结合try-with-resources确保资源释放,适用于搜索文件、统计或删除操作。
-
Java异常默认沿调用栈自动向上冒泡至main,未被捕获则由JVM逐层回溯;需关注throws声明、catch后是否重抛、throw显式抛出三点。
-
多态通过父类引用指向子类对象,在Java集合框架中实现灵活调用。1.接口类型引用具体实现类对象,如Listlist=newArrayList(),便于替换实现;2.方法参数使用接口类型可接收多种集合,运行时动态绑定;3.集合元素可存储子类对象,调用时执行各自重写方法;4.Collections工具类利用多态提供通用操作,如sort支持任意实现Comparable的List。该设计体现面向接口编程,提升代码复用性与扩展性。
-
运行时常量池是每个类独有的编译期快照,位于方法区(JDK8+为元空间),存储字面量和符号引用,支持有限动态扩充,与字符串常量池协同工作但不等同。
-
Files.write()支持APPEND追加写入,但需显式指定Charset防乱码;合并二进制文件应使用缓冲字节流;务必用临时文件+原子重命名防中断损坏,并及时清理。
-
SLF4J的error()方法默认不打印堆栈,必须将Throwable作为最后一个参数传入,否则异常被格式化为字符串而丢失堆栈;同时需确保仅绑定logback-classic,且encoder配置%ex以输出完整堆栈。
-
现代Java开发中绝大多数情况无需手动配置CLASSPATH;JDK5后默认包含当前目录,Maven/Gradle等工具自动管理依赖,显式设置易引发冲突,仅遗留场景如老脚本、IDE运行配置或旧容器中可能遇到。
-
异常包装是将捕获的异常作为原因封装进新异常并抛出,以保留原始信息同时提供更合适的上下文类型;常见于将受检异常转为运行时异常或统一转换为自定义业务异常,如SQLException包装为DataAccessException。正确做法是在构造函数中传入原始异常,使用双参构造器避免丢失堆栈,并添加上下文信息。异常解包则是通过getCause()逐层获取嵌套异常,定位根本原因,可手动实现unwrap方法或使用Spring的NestedExceptionUtils工具类。最佳实践包括避免过度包装、保持语义清晰、记录
-
Java包装类(如Integer、Boolean)通过valueOf()等静态方法实现了静态工厂模式,既统一了对象创建入口,又支持缓存复用、类型转换和参数校验,是《EffectiveJava》推荐的优雅替代构造器的设计实践。
-
Java环境变量配置失败主因是路径错误、变量名拼错或配置未生效。需确保JAVA_HOME指向JDK根目录(非JRE或bin)、PATH引用%JAVA_HOME%\bin、修改后重启终端,并用java/javac-version及echo%JAVA_HOME%交叉验证。
-
Java内置三类核心类加载器:Bootstrap(C++实现,加载rt.jar)、Extension(加载lib/ext)、Application(加载-classpath);它们构成父子委托链,遵循双亲委派模型——先委托父加载器,失败后才自行加载,以保障核心类安全与类唯一性。
-
Java集合要求使用包装类,根本原因是集合只能存储对象,而基本类型不是对象;泛型通过类型擦除强化了必须使用引用类型的约束;自动装箱/拆箱简化了使用,但存在空指针、性能和比较陷阱;高性能场景可选用原始类型集合库。
-
Java引用类型指类、接口、数组等非基本类型,变量存储对象地址而非数据本身;分为强、软、弱、虚四种,强度递减,影响GC回收策略,用于缓存、防内存泄漏、资源清理等场景。
-
ArithmeticException是Java中不强制捕获的运行时异常,仅在int、long等整数类型除零时抛出;float/double除零返回Infinity或NaN;应前置校验分母而非依赖try-catch。
-
hashCode决定对象在哈希集合中的存储位置,影响查找、插入、删除的平均时间复杂度;必须与equals保持一致,否则导致哈希集合行为异常;好hashCode需满足快、散、稳三特征。