-
Java异常处理通过Throwable体系实现,分为Exception和Error;Exception又分检查与非检查异常,前者需显式处理,后者如RuntimeException可不处理。异常由throw抛出,沿调用栈传播,由try-catch捕获,finally确保资源释放,或使用try-with-resources自动管理;JVM负责查找处理器、构建堆栈轨迹,未捕获则终止线程。
-
本文详解如何使用Java对整数列表实现「先按元素出现频率降序,频率相同时按元素值升序」的稳定排序,重点解决Collections.sort()类型不匹配错误,并提供现代Stream+Comparator链式写法。
-
Java强制类型转换会丢数据,不是“转一下就完事”大精度类型(如double、long)转小精度类型(如int、short、byte)时,Java不会自动帮你检查值是否越界——它直接截断或取低字节,结果可能完全不是你想要的数字。比如doubled=123456.789;强转成int得到123456,看着还行;但doubled=3e9;转int就变成-1294967296(溢出后补码解释),毫无预警。用(type)强转前必须自己校验范围Java的强制转换
-
Timer+TimerTask适合轻量单次闹钟但线程不安全,应改用ScheduledExecutorService;时间计算用Java8+API避免时区误差;UI操作须切回EDT,音频播放需注意线程安全与平台兼容性。
-
异常不应用于流程控制,而应仅处理意外情况;业务状态应通过返回值表达,避免滥用RuntimeException,合理使用预判方法、结果封装类和防御性校验。
-
IDEA多线程编译提速关键在于协同调整Buildprocessheapsize与CompilerVM参数,而非仅勾选“Enableparallelcompilation”;需设堆内存(如-Xmx4g)、元空间(-XX:MaxMetaspaceSize=1g)、ZGC,并调大Buildprocessheapsize至2048MB以上,且重启IDEA生效。
-
多数业务应优先用shutdown(),它拒绝新任务但等待已有任务完成;shutdownNow()强制中断运行中线程并返回未执行任务,仅适用于超时不可接受的场景。
-
Java初学者做问卷调查应先用Scanner和ArrayList实现核心流程:nextLine()跳过因next()/nextInt()残留换行符,需统一用nextLine()或手动清缓存;Question选项列表须每次newArrayList避免引用共享;文件导出注意相对路径基准目录,用try-with-resources捕获IOException;边界情况处理比技术选型更考验基础。
-
左移运算符(<<)计算2的N次方本质是二进制位左移,1<<N等价于2^N(N为非负整数),速度快、编译期可优化,但需确保N不越界且非负。
-
投票系统应选用HashMap而非TreeMap,因其平均O(1)时间复杂度支持快速增查改票数,无需TreeMap的O(logn)排序开销;防重复投票用HashSet存用户ID,计票用HashMap,候选名单用ArrayList,各司其职。
-
虚拟线程对阻塞式IO天然友好,包括Thread.sleep()、Object.wait()、LockSupport.park()、阻塞模式的NIO通道(FileChannel/SocketChannel)、HttpURLConnection、java.net.Socket、OkHttpClient及新版PostgreSQL/MySQLJDBC驱动;不支持Selector.select()等纯NIO事件循环。
-
new关键字创建对象时先触发类加载五阶段,待<clinit>执行完毕才分配内存并调用<init>;对象内存布局含对象头、实例数据、对齐填充;finalize已废弃,推荐Cleaner;GCRoots包括栈变量、静态属性、常量、JNI引用及被锁对象。
-
Properties读取配置最简路径是直接加载.properties文件,需用InputStream避免乱码,优先类路径加载,含中文时指定UTF-8编码;getProperty返回null不报错,须校验加载是否成功。
-
编译错误是javac编译阶段因语法或类型问题导致无法生成.class文件;运行错误是程序执行中触发RuntimeException而崩溃;逻辑错误是代码无异常但结果不符合预期。
-
Spring6新增的HTTPInterface默认对阻塞式调用(如Mono.block())设定了5秒硬性超时,即使底层WebClient已配置更长的读超时,仍会因blockTimeout触发Timeoutonblockingread异常。