-
不能。抽象类不能被实例化,故其方法无法直接调用;但子类继承后可通过子类实例调用父类非抽象方法,抽象方法则需子类实现且在多态上下文中调用。
-
Mockito创建的Mock对象不会调用真实类的构造函数,因此构造函数中对字段的初始化(如super(colour,18.99))完全被忽略;所有方法(包括getPrice())默认返回对应类型的“空值”(如Double返回null,double返回0.0),除非显式stub。
-
能。泛型擦除后List的add()方法可通过反射调用,JVM仅校验参数是否为Object类型,不检查泛型约束,添加非Integer元素不会立即报错,而是在后续强转或拆箱时抛ClassCastException。
-
interrupt()不生效的主因是线程未响应中断:纯计算循环未检查isInterrupted()、吞掉InterruptedException未重设标志、阻塞IO不响应、守护线程无法用于超时控制;可靠方案是Future+ExecutorService配合任务内中断检查。
-
LinkedHashSet是Set接口的实现类,基于哈希表和双向链表结构,既能保证元素唯一性,又能按插入顺序遍历。创建后添加元素即可自动维持顺序,重复元素不被添加;与HashSet无序、TreeSet按排序不同,LinkedHashSet性能适中且顺序稳定。删除后重新添加会置于末尾,迭代时不可直接修改集合,否则抛出异常。使用简单,无需额外编码即可确保插入顺序。
-
getItems()返回原始引用导致内部状态被篡改,因Java集合默认不拷贝、final仅锁引用不锁内容;安全做法是返回不可变视图或独立副本。
-
Java服务器中可通过jstat、jinfo、jstack及JMX/HTTP端点查看JVM信息:jstat实时监控GC与内存,jinfo查看并动态修改启动参数,jstack分析线程与锁,JMX或Actuator提供结构化指标用于监控告警。
-
本文详解如何为Circle类设计add(Circleother)方法,使其将当前圆与传入圆的面积之和,映射为一个等效的新圆,并原地更新当前圆的半径,支持链式调用。
-
Scanner读取输入时卡住或跳过是因为nextInt()等不消费换行符,nextLine()会读到残留\n;应统一用nextLine()后解析,或在nextInt()后加nextLine()清缓存。
-
防止NullPointerException的核心是在使用引用变量前确保其不为null;需明确空值契约、用注解声明意图、参数校验、语义化命名、安全访问链式调用、合理使用Optional和工具方法、构造器强制初始化、利用现代API与静态检查工具。
-
ArrayList和LinkedList允许存null但易致NPE;HashMap允一个nullkey和任意nullvalue,ConcurrentHashMap禁止nullkey/value;TreeSet/TreeMap不接受null;Optional.of(null)立即抛异常,须用ofNullable。
-
Collections.copy()用于将源列表元素复制到已有目标列表中,要求目标列表长度≥源列表。示例中通过预填充默认值确保容量,调用copy后完成覆盖复制。常见错误包括目标列表长度不足或未初始化,会抛出IndexOutOfBoundsException或NullPointerException。注意其与addAll()区别:copy是替换原有元素位置,不改变结构;addAll是追加元素,增加长度。需提前设置目标列表大小,可用Collections.nCopies初始化。该方法适用于复用列表对象的场景,
-
LockSupport.park()不阻塞是因为其依赖线程的permit状态:若此前已调用unpark(),permit存在则park()直接返回;多次unpark仅保留一个permit,且不保证唤醒顺序或内存可见性。
-
final类不能被继承,用于保障安全性、不可变性及性能优化。如String类防止篡改,不可变类确保状态固定,JVM可对final类方法内联优化,工具类通过final明确禁止扩展意图。
-
Scanner可通过useDelimiter()方法用正则表达式自定义分隔符,需注意双重转义、空token处理及nextXXX()的类型校验;推荐先用next()获取字符串再手动解析。