-
Java不直接用于现代主流移动端开发,但Android平台Java开发需配置JDK17+、AndroidStudio及配套SDK,并在Gradle中声明Java17编译版本,确保构建链路通畅。
-
当使用Scanner的nextDouble()等方法读取非匹配类型输入时,会抛出InputMismatchException而非NumberFormatException,若catch块未正确声明该异常类型,则异常将未被捕获而直接终止程序。
-
代码块控制变量作用域,{}内声明的变量仅在该块内可见;普通块限局部作用域,实例块随对象创建执行,静态块类加载时执行一次,同步块只影响锁粒度。
-
Java开发中最易忽略的是运行时隐性异常:空指针(链式调用、自动拆箱等)、资源泄漏(未正确关闭IO/连接)、并发幽灵异常(ConcurrentModificationException等)及日期时区错误(SimpleDateFormat非线程安全、LocalDateTime误用)。
-
组合优于继承的关键在于按生命周期、复用性、可测试性拆分;避免接口宽泛、抽象类滥用、字段可变失控,聚焦小接口和不可变设计。
-
Ant无需安装,只需JDK8+并配置PATH;build.xml必须位于项目根目录或用-f指定;javac失败多因路径、classpath或JDK版本问题;ant-p无输出说明缺少defaulttarget或依赖链不完整。
-
Java后台接口异常排查核心思路是“先定位范围、再缩小原因、最后验证修复”,优先通过日志(异常类型、堆栈、上下文)、监控(QPS、错误率、JVM指标)、依赖(DB/Redis/HTTP/消息队列)逐层分析,再针对性审代码。
-
super关键字用于调用父类方法、构造器和访问被隐藏的属性。在子类重写方法时,通过super.方法名()可保留父类行为,如Dog类中重写move()方法前调用super.move();在子类构造器中必须用super()调用父类构造方法,且需位于首行,如Student构造器中调用super(name)初始化继承的name属性;当子类字段与父类同名时,可用super.字段名访问父类属性,但应避免字段重名以提升可读性。合理使用super能增强代码复用并确保继承逻辑正确执行。
-
Druid连接池初始化失败主因是依赖不齐或配置早于Bean初始化;需用druid-spring-boot-starter、正确配置spring.datasource.druid前缀、设置唯一name及维护周期。
-
Java不支持多继承因语法设计规避菱形继承问题,应采用接口+默认方法叠加行为或内部类组合委托实现复用。
-
javac-d参数用于按包结构组织字节码文件,指定.class输出根目录并自动创建匹配包路径的子目录;它保障JVM正确加载、分离源码与编译产物、支持类路径运行及jar打包。
-
匿名内部类适用于一次性无状态事件处理器,如按钮点击监听;需注意局部变量必须是effectivelyfinal,避免内存泄漏和复用问题;复杂逻辑应改用命名类或Lambda。
-
Kotlin虽无“构造函数前初始化”的语法糖,但通过属性直接赋值和init块可实现等效行为:属性在主构造函数执行后、init块前完成初始化,语义上与Java的字段初始化时机一致。
-
HashMap底层是数组+链表+红黑树的混合结构:哈希值经扰动运算后与(长度-1)按位与得索引;冲突时用链表,满足≥8节点且数组≥64则转红黑树;null键固定存于tab[0];重写equals必须重写hashCode以保证哈希一致;非线程安全,并发下易出错。
-
StampedLock的乐观读不压榨CPU,仅减少锁开销;真正导致CPU100%的是validate失败后错误使用忙等循环,而非tryOptimisticRead本身。