-
检查型异常必须显式处理,否则编译失败;Java强制要求对Exception及其子类(除RuntimeException外)用try-catch捕获或throws声明,如IOException、SQLException;而RuntimeException及其子类(如NullPointerException)属运行时异常,无需强制处理。
-
本文深入解析Java中基本类型字面量true/false与包装类常量Boolean.TRUE/Boolean.FALSE的本质区别,明确二者在语义、空安全性、性能及代码一致性上的适用边界,帮助开发者做出符合场景的精准选择。
-
根本原因是路径解析基准为当前工作目录而非类路径;IDE运行时工作目录因环境而异,应打印确认;classpath资源须用getResourceAsStream();读中大文件需BufferedInputStream批量读以提升性能。
-
Java反射无法获取List的String类型是因类型擦除,运行时泛型信息丢失;需用TypeToken匿名子类保留泛型,如newTypeToken<List<User>>(){},并根据框架需求选择getType()或getRawType()。
-
Java数据导出通用方案核心是解耦数据源、格式与HTTP响应,通过泛型接口、动态字段映射和流式生成实现List一键导出CSV/Excel/PDF,Controller仅校验权限、获取数据并调用服务,支持路径后缀或Accept头识别格式,避免OOM与临时文件。
-
Java单行注释用//,从//到行末;多行注释用/.../,不支持嵌套和半行续写;文档注释/*.../供javadoc使用;注释内字符串不受影响,但字符常量中误写/*会编译失败。
-
Scanner.nextLine()读不到输入是因为前序的nextInt()等方法未消费换行符,导致nextLine()立即读取空字符串;应在其后加scanner.nextLine()清缓存,或统一用nextLine()配合parseXXX转型。
-
Arrays.binarySearch搜不到明明存在的元素是因为它仅对已排序数组有效;未排序或降序数组(未配对应Comparator)会导致结果不可靠,返回负数表示插入点编码而非简单“未找到”。
-
ScheduledThreadPoolExecutor不能替代synchronized,因其仅负责任务调度,不提供线程安全;并发问题需靠任务内部同步机制(如锁、ConcurrentHashMap)解决,而非调度时机。
-
面向对象的new与面向过程的main本质不同:Java强制以类为单位组织代码,所有行为必须依附于类型或对象,而C等语言中main是独立入口,函数自由定义调用。
-
Controller应按业务域拆分、统一响应结构、合理使用注解、严格分层解耦;如电商系统分ProductController等,返回Result泛型体,用@PathVariable/@RequestParam/@RequestBody规范参数解析,DTO加校验,Controller仅协调不写业务逻辑。
-
双亲委派模型通过父优先加载机制防止类重复加载和类型冲突,确保核心类由BootstrapClassLoader加载;JDBC等场景需借助上下文类加载器破坏委派;自定义类加载器应重写findClass而非loadClass;Java9+模块系统削弱了传统双亲委派结构。
-
方法描述符是JVM中唯一标识方法的紧凑字符串,如(I)Z,用于区分重载、动态调用和类型验证;它与MethodType语义相近但用途分离,前者用于字节码操作,后者用于MethodHandle运行时分派。
-
TCP是面向连接的可靠传输协议,Java通过Socket和ServerSocket类实现客户端与服务器间的稳定通信,适用于文件传输、即时通信等场景,需注意资源释放与异常处理。
-
运行时常量池是JVM方法区(JDK8+为元空间)中动态管理类字面量和符号引用的核心结构,支撑动态链接与跨类引用解析;其核心作用非单纯存储常量,而是实现符号引用到直接引用的解析、字符串驻留共享及反射等动态特性。