-
Scanner.hasNext()不返回false而是阻塞等待输入,因其设计为阻塞式读取:当输入缓冲区为空且System.in未关闭或未收到EOF时,会持续等待有效token,非bug。
-
当Hibernate实体中嵌套的@Embeddable类包含布尔字段时,若仅修改该布尔值而未改动其他字段,数据库可能不执行更新——根本原因是缺少@Embeddable注解导致Hibernate无法正确追踪嵌入对象的脏检查(dirtychecking)。
-
ConcurrentHashMap的value字段不加volatile,因其通过UnsafeCAS操作和内存屏障保障可见性,而非依赖字段修饰符;JDK8/9+中Node.value均为普通字段,加volatile反增写屏障开销且无必要。
-
组合优于继承是指在多数代码复用场景中,用成员变量持有对象(has-a)比类继承(is-a)更稳妥可控;核心在于区分类型归属与功能复用,避免继承滥用导致的扩展性差、维护难等问题。
-
Java使用Scanner读取数值时若输入非法类型(如字符串),会抛出InputMismatchException而非NumberFormatException,而错误的catch语句导致异常未被捕获,程序崩溃退出。
-
该抛异常的三种典型场景是:违反业务规则、资源不可用且无法自动恢复、参数明显非法且非调用方可控;不该抛异常的误区包括用异常控制流程、包装异常丢失上下文、对可预期失败沉默处理。
-
boolean变量声明和初始化必须显式赋值Java里boolean不能像数字类型那样默认为false(局部变量),未初始化就用会直接编译报错variablemightnothavebeeninitialized。类字段倒是默认false,但依赖默认值容易掩盖逻辑疏漏。实操建议:局部boolean变量务必在声明时赋初值,比如booleanisValid=false;或根据上下文设为true别写booleanflag;然后后面才赋值——编译器不买账构造函数里如果靠参数决定布尔状态
-
Java单行注释用//,从//到行末;多行注释用/.../,不支持嵌套和半行续写;文档注释/*.../供javadoc使用;注释内字符串不受影响,但字符常量中误写/*会编译失败。
-
ConcurrentHashMap更适合高并发场景,因其采用分段锁(JDK7)或CAS+synchronized(JDK8+),仅锁定修改的桶且读操作无锁;而Hashtable所有方法用synchronized修饰,竞争全局锁。
-
Java多线程核心在于安全协同而非单纯启动线程:通过Runnable+Thread或ExecutorService创建管理线程;用synchronized/Lock保障临界区安全;volatile和原子类解决轻量级可见性与原子性;线程池统一管控生命周期。
-
javac用于编译.java文件为.class字节码,java用于运行编译后的类。2.编译使用javac命令生成class文件,运行使用java命令启动JVM执行主类。3.需注意类名与文件名一致、正确设置类路径及包结构下的运行方式。
-
Condition是Java中用于线程协作的接口,需与Lock配合使用,支持多条件等待和精确唤醒;示例中通过notFull和notEmpty两个Condition实现生产者-消费者模型,相比synchronized+wait/notify,具备可中断、超时等待及更灵活的锁控制优势。
-
Java程序通过main方法的String[]args数组接收命令行参数,按空格分隔、索引从0开始;需注意shell解析差异、无内置选项区分机制,推荐用Picocli等库封装解析并校验。
-
super仅在子类构造器、实例方法和字段初始化中有效,必须位于构造器首行,不能用于静态上下文;可访问父类非private成员,但字段访问不触发多态,方法调用跳过当前重写。
-
List.copyOf不能替代newArrayList(list),因为它返回不可修改的浅拷贝视图,不支持增删操作,不隔离原列表变更,也不防御元素内部状态被修改。