-
Class对象由JVM类加载时自动创建,不可new;获取方式有String.class、obj.getClass()、Class.forName();反射调用需区分getMethod与getDeclaredMethod;Field操作性能差且易空指针;转型须校验类型防ClassCastException。
-
printStackTrace()是还原异常发生时的完整调用链,输出到System.err,提供精准位置信息;开发阶段可快速调试,生产环境须改用日志框架记录。
-
静态变量必须用static修饰且只能在类体中声明,属于类而非实例,内存分配在类加载的准备阶段,所有实例共享,存在线程安全与内存泄漏风险。
-
Java中关系运算符用于比较两个值,返回布尔结果。包括==、!=、>、<、>=、<=,适用于基本类型直接比较,对象比较需用equals()避免引用地址误判,浮点数应使用误差范围判断相等性。
-
高层模块和低层模块都应依赖抽象,抽象不应依赖细节。通过接口隔离变化,如UserService依赖UserRepository接口而非具体实现,实现解耦;结合Spring依赖注入可动态切换实现;提升可测试性,便于Mock;支持并行开发,促进团队协作;核心在于识别变化点,提前抽象,增强系统灵活性与可维护性。
-
Java采用解释执行与JIT编译结合的方式,既保障“一次编写,到处运行”的跨平台性,又通过运行时识别热点代码并编译为本地机器码来提升性能;JIT不修改class文件,编译时机和级别由运行时统计决定。
-
本文介绍在Android应用中准确获取目标地理位置(如地面、地形)的海拔高度(即“地形高程”),而非GPS返回的设备相对海平面的动态海拔,涵盖调用第三方高程API的完整实现方案与关键注意事项。
-
Java异常体系必须严格遵循Throwable→Exception/Error双轨结构;需根据业务语义选择继承Exception(可预期、须显式处理的失败)或RuntimeException(编程错误),禁直接继承Throwable,且RuntimeException子类须防误吞。
-
应统一JDK版本:检查JAVA_HOME和PATH优先级,确保java和javac指向同一JDK;IDE需单独配置SDK和JRE;Homebrew用户用/usr/libexec/java_home或brewlink切换;CI/Docker中显式指定JDK路径或镜像版本。
-
Java中声明初始化不规则二维数组需先声明int[][]arr=newint[3][],再逐行分配如arr[0]=newint[2];或一步初始化int[][]arr={newint[2],newint[5],newint[1]}。
-
Java19虚拟线程虽极大提升了I/O密集型应用的并发吞吐,但其共享有限载体线程(carrierthreads)的机制,使得不当的CPU密集型操作会阻塞整个虚拟线程调度池;本文详解通过专用线程池隔离CPU工作负载的实践方案。
-
ReentrantReadWriteLock比synchronized快因其读写分离:多读不互斥,仅读写/写写互斥;synchronized一律串行。适用读多写少场景,写多时因状态开销反而更慢。
-
Java成品形态取决于技术栈与部署环境:桌面端可用JavaFX/Swing打包为exe/dmg/deb,后端多为SpringBoot可执行jar,AndroidApp底层仍依赖Java,嵌入式场景需适配JVM限制与信创环境。
-
Java中线程分为用户线程和守护线程,主要区别在于JVM退出机制:1.用户线程会阻止JVM退出,只要存在用户线程运行,JVM就继续执行;2.守护线程不阻止JVM退出,当所有用户线程结束后,即使守护线程仍在运行,JVM也会终止;3.新线程默认为用户线程,可通过setDaemon(true)设为守护线程,但必须在start()前调用;4.主线程是用户线程,子线程继承父线程的daemon状态;5.典型场景:用户线程处理业务逻辑,守护线程用于日志监听、资源监控等后台服务任务。
-
Calendar.getInstance()返回当前JVM默认时区的实例,非UTC也非系统本地时区;其行为受JVM时区设置影响,易因环境差异引发线上问题。