-
本文详解Java程序中FileNotFoundException频发的根本原因——工作目录(WorkingDirectory)与源码目录(src)混淆,并提供跨环境(IDE调试、命令行运行、JAR打包)均可靠的资源加载方案。
-
Java8+推荐使用java.util.Base64,提供标准、URL安全和MIME三类编码器;编码需显式指定UTF-8字符集,解码失败多因输入含空白、URL编码或长度非4倍数;withoutPadding()去除填充符=,适用于URL/Token场景;与ApacheCommonsCodec混用需注意填充、换行及严格性差异。
-
嵌套三元运算符语法合法但易读性差,如a?b:c?d:e易导致逻辑混乱、维护困难及CodeReview反复被拒。
-
强引用导致内存泄漏最常见于缓存、监听器、内部类持有Activity、ThreadLocal未清理及静态Map存Session等场景;软引用适合内存敏感缓存,GC前才回收;弱引用每次GC都回收,适用于临时绑定;虚引用仅用于跟踪对象回收时机,必须配合ReferenceQueue。
-
类加载器间是委托链而非继承关系,通过构造参数传递父加载器引用实现双亲委派;自定义加载器默认父为AppClassLoader,Bootstrap无父且由JVM用C/C++实现。
-
Java中生成随机数首选Random类(需复用实例),多线程用ThreadLocalRandom,安全场景用SecureRandom;nextInt()返回任意int,nextInt(bound)返回[0,bound),nextDouble()返回[0.0,1.0)。
-
Mockito创建的Mock对象不会调用真实类的构造函数,因此构造函数中对字段的初始化(如super(colour,18.99))完全被忽略;所有方法(包括getPrice())默认返回对应类型的“空值”(如Double返回null,double返回0.0),除非显式stub。
-
Java模块化通过module-info.java定义运行时可验证、编译期可约束的结构契约,核心在于显式声明可见性(exports/opens)、依赖(requires)、服务(uses/provides)和唯一模块名,实现强封装、可验证依赖与服务解耦。
-
Java字面量是代码中直接写出的固定值,共六类:整型、浮点型、字符型、字符串型、布尔型和null,分别有严格格式与用途,用于初始化、传参、计算、类型推断及常量池优化。
-
JDK工具是Java开发的核心命令行工具集,位于bin目录下,包括javac编译、java运行、javadoc生成文档、jar打包及jconsole、jstat等监控诊断工具,贯穿开发、调试、部署全流程,提升效率、保障质量、优化性能,是深入理解Java运行机制和进行系统调优的基础。
-
方法重写是子类替换父类实例方法的行为,需满足签名一致、返回类型协变、访问权限不收紧、检查异常不扩大四个条件,并必须使用@Override注解以避免隐性错误。
-
Java中Base64编码应使用JDK8+内置Base64.getEncoder().encodeToString(),线程安全且无需依赖;URL安全场景用getUrlEncoder().withoutPadding();解码后需按原始编码(如UTF-8)转字符串,不可直接newString(byte[]);避免手动拼接、错误字符集处理及误当加密使用。
-
答案:基于Java实现客户反馈系统,通过Feedback类封装数据,使用ArrayList存储反馈信息,结合Scanner实现控制台交互,支持提交与查看反馈功能。
-
Java并发问题多源于线程安全、内存可见性与锁机制理解偏差:共享变量未同步致数据竞争;volatile不保证复合操作原子性;应优先用AtomicInteger或synchronized/ReentrantLock;避免暴露可变共享对象;锁粒度、锁对象选择需谨慎;须重视happens-before规则与内存可见性;线程池需依场景选队列、设拒绝策略并处理异常。
-
LockSupport.park()为什么线程没反应?它根本不会“挂起线程”——park()只是检查当前线程的许可(permit)是否为1,是就消费掉并立即返回;否则阻塞。没有“主动挂起”的语义,只有“等待许可”。常见错误是调用park()前没确保许可可用,结果线程直接卡住。许可是二值的:0或1,不可叠加(多次unpark()只保留一次效果)park()不响应中断,但会设置线程的中断状态(Thread.interrupted()为true)如果线程已中断后调用park(