-
继承适用于is-a关系,如Animal派生Dog;组合适用于has-a关系,如Car包含Engine。优先使用组合,避免过度继承导致耦合,提升可维护性与扩展性。
-
ArrayList基于动态数组实现,支持自动扩容,初始容量通常为10,扩容时新容量为原容量的1.5倍,底层使用Object数组存储元素,具有随机访问快、尾部添加高效、中间插入删除慢的特点,建议预设初始容量并优先在末尾操作元素以提升性能。
-
Semaphore通过许可机制限制并发线程数,初始化指定许可数量,线程需acquire()获取许可并release()释放,确保最多n个线程访问资源,常用于控制数据库连接等场景,支持公平与非公平模式,应结合try-finally防止许可泄漏。
-
答案:Java中==比较对象引用地址,equals()比较内容但需重写;字符串常量池可能导致==返回true,理解引用与值比较区别可避免常见错误。
-
答案:通过java.time和ScheduledExecutorService实现日历提醒系统,定义CalendarEvent类管理事件时间与提醒设置,利用ScheduledExecutorService按延迟时间触发提醒任务,结合LocalDateTime处理时间逻辑,支持提前提醒、控制台通知,并可扩展持久化、重复事件及时区功能。
-
TimeUnit用于简化Java中时间单位换算与超时声明,避免硬编码计算,提升可读性、安全性及可维护性;支持NANOSECONDS至DAYS共7种单位的双向转换,适用于Thread.sleep、Lock.tryLock、队列操作及配置解析等场景。
-
上界通配符使用?extendsType形式,用于限定泛型类型为某类及其子类,适用于只读场景。例如List<?extendsNumber>可接收List<Integer>或List<Double>,允许读取为Number类型,但禁止添加除null外的元素,确保类型安全,提升代码灵活性。
-
答案:影院订票系统通过二维数组模拟座位,结合循环与条件判断实现用户选座、订票、状态更新及退出功能,提升Java基础编程能力。
-
ThreadLocal是Java中提供线程局部变量的机制,为每个线程创建独立副本,避免共享变量引发的数据竞争。通过get()获取当前线程的变量实例,set()设置值,remove()清除值以防内存泄漏。常用于隔离如SimpleDateFormat等非线程安全对象或存储线程上下文信息。使用时需及时调用remove()释放资源,避免在线程池中产生脏数据或内存泄漏。合理使用可有效提升并发安全性。
-
学生请假管理系统通过Java实现,采用Student和LeaveRequest类封装数据,使用ArrayList存储并结合文件持久化。1.设计Student类包含学号、姓名、班级;2.LeaveRequest类包含请假详情与状态;3.用静态List管理学生和请假记录;4.提供增、查、审批功能;5.通过ObjectOutputStream保存对象到文件,启动时加载数据;6.所有类实现Serializable接口支持序列化;7.main方法演示添加学生、提交请假、审批及保存流程。系统结构清晰,便于扩展数据库或
-
答案:Java中Map不支持按值排序,但可通过List和Comparator或StreamAPI实现。将Entry转为List后用Collections.sort()或Stream的sorted()按值排序,推荐使用StreamAPI更简洁。若需保持顺序的Map结果,可收集到LinkedHashMap中,原始Map不受影响。
-
先确认已安装兼容的JDK版本,再下载解压Gradle并配置GRADLE_HOME和PATH环境变量,最后通过gradle-v验证安装成功。
-
在Java中,StreamAPI通过filter、map和sorted方法高效处理集合数据。第一步用filter保留需要的数据,如筛选年龄大于25的用户;第二步用map转换数据结构,如提取用户名或计算数值平方;第三步用sorted对结果排序,支持单条件、多条件及降序排列,同时需注意空值和异常处理。
-
Checked异常与Unchecked异常的关键区别在于前者必须显式处理或声明抛出,而后者则无需。1.Checked异常在编译时强制处理,用于可恢复的错误,如文件不存在;2.Unchecked异常即运行时异常,通常由编程错误引起,如空指针、数组越界,不强制处理;3.区分两者有助于明确可恢复与不可恢复错误,提升代码健壮性;4.自定义异常应根据是否可恢复选择Checked或Unchecked类型。
-
答案:Java多线程中保证共享变量安全的常见方式有四种。1.使用synchronized关键字修饰方法或代码块,确保同一时刻只有一个线程执行,实现互斥访问;2.使用volatile关键字保证变量可见性,适用于状态标志等无需原子性的场景;3.使用Atomic类(如AtomicInteger)通过CAS机制实现高效原子操作,适合高并发下的单一变量读写;4.使用ReentrantLock提供比synchronized更灵活的锁控制,支持可中断、超时和公平锁。应根据实际需求选择合适机制:简单同步选synchron