-
ClassCastException在向下转型时抛出,因编译期只检查引用类型而运行期才验证实际对象类型;若实际类型不匹配目标子类,JVM即抛异常。
-
while先判断后执行,循环体可能执行0次;do-while先执行后判断,循环体至少执行1次;语法上while为“while(条件){}”,do-while为“do{}while(条件);”。
-
==比较对象引用是否相同(内存地址),equals比较逻辑内容是否相等;String等类重写了equals以比较字符序列,而==在字符串常量池与new创建对象时结果不可靠。
-
最推荐macOS上通过Homebrew明确安装指定版本OpenJDK(如brewinstallopenjdk@17),而非模糊的brewinstalljava;需用/usr/libexec/java_home-v17动态设置JAVA_HOME,并将$JAVA_HOME/bin置于PATH前端以确保javac等命令可用。
-
Java内存模型(JMM)是定义多线程下可见性、有序性和原子性的抽象规范,非JVM内存结构;它通过主内存与工作内存(虚构概念)描述线程交互,volatile靠内存屏障实现可见性与禁止重排序但不保证原子性,synchronized基于happens-before保证锁释放前修改对后续获取该锁的线程可见,final字段在正确构造前提下提供初始化安全性。
-
三元运算符适用于选择值而非执行分支逻辑;对if-else递增计数这类副作用操作,强行使用三元运算符会降低可读性与安全性,应优先保留传统if-else结构。
-
ImageIO.read()返回null或抛IOException主因是格式不支持(如WebP)、文件损坏或输入流关闭;缩放模糊需设抗锯齿与双三次插值;中文水印乱码应查可用字体并用getStringBounds计算尺寸;内存暴增源于BufferedImagenative数据未及时回收,须置空引用并调用dispose()。
-
因为SequenceInputStream的构造器接收Enumeration,若该Enumeration在首次遍历后已耗尽,则后续文件无法读取;需确保每次调用都提供未耗尽的新Enumeration实例。
-
静态变量属于类本身,所有实例共享同一内存空间;声明需在类体中加static关键字,推荐private+publicstaticgetter/setter;与实例变量相比,它在类加载时初始化、存于元空间、无需实例即可访问;多线程下需注意线程安全,避免复合赋值引发数据不一致。
-
位运算高效源于硬件原生支持和JVM深度优化,而非直接操作JVM底层内存;它作用于整数类型的二进制表示,被JIT编译为单条CPU指令,避免对象分配、边界检查与除法开销。
-
接口命名应体现能力而非实现,如Drawable、Sortable;方法需单一职责且无状态;优先组合小接口而非大而全;谨慎使用常量和default方法以保障兼容性。
-
LocalDate是Java8引入的不可变日期类,仅表示“年-月-日”,替代易错、线程不安全的Date和繁琐的Calendar;构造直观(月份1–12)、线程安全、无时区歧义、支持JDBC4.2+直接映射。
-
Java处理高并发的核心是资源合理利用与系统性能优化。1.通过ThreadPoolExecutor或CompletableFuture管理线程池,避免频繁创建线程;2.引入Redis与本地缓存构建多级缓存,降低数据库压力,防范缓存异常;3.优化SQL与索引,实施读写分离和分库分表,提升数据库承载能力;4.使用Sentinel或GuavaRateLimiter进行限流,结合Hystrix实现熔断降级,保障服务稳定性;5.借助RabbitMQ或Kafka实现异步解耦,削峰填谷;6.调优JVM参数,选择合适GC
-
Java第一个程序需定义public类(名与文件名一致),含publicstaticvoidmain(String[]args)方法,用System.out.println()输出,先javac编译再java运行。
-
WeakHashMap使用弱引用存储键,当键无强引用时,GC会回收键并自动移除对应条目,适用于缓存、监听器管理等场景,需重写hashCode和equals,避免value强引用key,且不依赖System.gc()精确控制清理时机。