-
抽象类是不能被实例化的类,用于定义通用行为框架,具体类继承抽象类并实现其抽象方法。示例中Shape为抽象类,包含抽象方法calculateArea()和具体方法displayInfo();Rectangle和Circle为具体类,分别实现calculateArea()。通过父类引用调用子类对象,实现多态。抽象类支持代码复用、结构统一和强制实现关键逻辑,适用于具有“is-a”关系的类体系。一个类只能单继承抽象类,若子类未实现全部抽象方法则必须声明为抽象类。正确使用抽象类可提升代码可维护性、扩展性和复用性。
-
非公平锁的lock()能“插队”是因为在方法开头直接CAS抢占,成功即获锁;仅在锁空闲时有效,否则退化为排队逻辑。
-
实体类代表事物本身,承载状态与身份,如User、Order;行为类专注做事,提供算法或协调能力,如PaymentProcessor、DiscountCalculator。区分关键在职责:实体被持有,行为被使用。
-
clone()不一定能防住外部修改,因为其默认为浅拷贝,仅复制引用地址而非实际内容;含可变引用(如ArrayList)时需手动深拷贝,数组宜用Arrays.copyOf(),集合返回应避免直接暴露内部引用。
-
Java中==比较引用(或基本类型值),equals()比较内容;重写equals()须遵循自反性、对称性、传递性、一致性和null安全原则,并必须同步重写hashCode()。
-
本文详解为何JPanel.setOpaque(false)单独调用无法实现预期透明效果,并指出关键遗漏点:JSplitPane本身也需设为非不透明,才能让JLayeredPane中底层组件正常透出。
-
Java中对象克隆分为浅克隆和深克隆。1.浅克隆通过实现Cloneable接口并重写clone()方法,复制基本类型值和引用类型地址,导致原对象与克隆对象共享引用对象;2.深克隆则确保完全独立,可通过重写clone()递归克隆、序列化反序列化或使用JSON转换等方式实现,适用于需隔离对象的场景。
-
线程间通信的核心是协调执行顺序和共享数据,主要通过共享内存与同步机制实现。常用方式包括:使用wait()、notify()在synchronized中实现基础通信,适用于生产者-消费者模型;ReentrantLock配合Condition提供更精准的等待唤醒控制;BlockingQueue封装了线程安全与阻塞操作,简化生产者-消费者场景开发;此外还可选用CountDownLatch、CyclicBarrier等工具满足特定需求。选择依据为:简单场景用wait/notify,复杂控制用ReentrantLo
-
Java没有Character.isChinese方法,应使用Character.UnicodeBlock.of()判断CJK相关区块,覆盖扩展A/B区及兼容汉字,避免仅用0x4E00–0x9FFF范围。
-
对象创建始于new指令,JVM先加载类到方法区并生成Class对象;随后在堆中分配内存,采用指针碰撞或空闲列表策略,取决于垃圾回收器和内存整理情况;为保障线程安全,优先使用TLAB实现线程私有分配,不足时通过CAS重试保证原子性;对象内存布局由对象头、实例数据和对齐填充组成,包含哈希码、锁状态、字段值等信息,并按8字节对齐;最后设置对象头并执行构造函数完成初始化,整个过程由JVM高效管控。
-
Math.toRadians和Math.toDegrees仅做角度与弧度的线性换算,不参与三角计算;Math.sin等函数只接受弧度,需先转换再调用;反复转换或对无量纲值误转属典型错误;官方方法语义清晰且JDK9+有性能优化;浮点误差属正常现象,应避免直接用==比较。
-
Java方法签名仅含方法名、参数类型列表(按序)、类型擦除后的泛型信息;不包括返回类型、异常、修饰符;是JVM识别方法及重载判定的唯一依据。
-
Observable集合让集合本身可被监听,JavaFX中用ListChangeListener响应增删改移,需循环c.next()处理批次变更;普通ArrayList无通知机制,须用FXCollections.observableArrayList创建;KO的observableArray与JavaFX均不自动响应元素属性变化,需额外配置;监听器中避免耗时操作或递归修改。
-
正则表达式可精准删除指定字符串:一、用replace()配字面量正则删固定串;二、用newRegExp动态构建并转义变量正则;三、用捕获组保留内部内容、删除包围结构。
-
答案:简易票务管理系统通过面向对象设计实现购票、查询、退票等功能,核心类包括TicketItem和TicketSystem,结合集合与IO操作,支持菜单驱动交互,可扩展文件存储与异常处理以提升实用性。