-
instanceof是Java中用于运行时类型检查的关键字,判断对象是否为某类、子类或接口实现的实例,返回boolean值;仅适用于引用类型,null时返回false,编译时类型不兼容则报错;常用于安全向下转型及接口/父类判断;Java16起支持模式匹配,可同时完成判断与变量绑定。
-
组合表示强拥有关系,部分生命周期依赖整体,如汽车与发动机;聚合表示弱拥有关系,部分可独立存在,如学校与教师。
-
RecyclerView删除按钮仅响应一次,新增项后所有删除操作均失效——根本原因是每次addItem时重建了Adapter却未重新设置点击监听器,导致回调接口丢失。
-
Java聊天室客户端最简路径是:用Socket建立TCP连接,分双线程读写(BufferedReader/InputStreamReader指定UTF-8编码读,PrintWriter/OutputStreamWriter指定UTF-8编码写),校验空输入,正确关闭资源并添加收发日志。
-
Java版本未识别因PATH未添加JDK路径,需将JDK的bin目录加入PATH;2.JAVA_HOME配置错误会导致工具启动失败,应指向JDK根目录并正确引用;3.多版本冲突可通过调整PATH顺序或使用版本管理工具解决;4.IDE无法识别JDK需手动设置项目JDK路径并匹配语言级别。
-
Runnable无返回值且不能抛受检异常,Callable可返回结果并抛出受检异常,前者适用于无需结果的后台任务,后者适用于需获取计算结果或处理受检异常的场景。
-
需确认系统架构与JDK版本匹配,先用uname-m查x86_64或aarch64等,再下载对应EclipseTemurinJDK包;手动解压至/opt,配置/etc/profile.d/java.sh并生效;systemd服务需显式声明JAVA_HOME和PATH,cron或脚本开头需source该文件;清理旧JDK软链避免冲突。
-
%s对应任意对象(含null),%d仅接受整数类型,%f接受浮点类型;参数类型与顺序必须严格匹配,否则抛IllegalFormatConversionException或MissingFormatArgumentException。
-
事务不生效主因是调用方式或异常处理不当。1.避免内部调用,应通过代理对象或注入其他Service调用;2.异常需抛出或手动回滚,建议配置rollbackFor;3.注解仅对public方法有效,不可用于private、static方法;4.正确设置传播行为,默认REQUIRED适用于大多数场景;5.确保启用@EnableTransactionManagement并正确配置事务管理器;6.不在构造函数或@PostConstruct中调用事务方法,防止代理未生效。理解SpringAOP代理机制是关键。
-
Arrays.asList()用于将数组转为固定大小的List,返回的是不可变列表,不支持增删操作。该方法返回java.util.Arrays.ArrayList,是原始数组的视图,修改List会影响原数组。只能用于对象类型,基本类型需使用包装类,否则会将整个数组视为单个元素。如需可变List,应通过newArrayList<>(Arrays.asList(arr))创建副本进行操作。
-
使用equals()方法比较字符串内容,区分大小写;equalsIgnoreCase()不区分大小写;compareTo()用于字典序比较,返回0表示相等。
-
Java面向对象封装需三步协同:属性私有化(private字段)、提供受控访问(校验性getter/setter)、隐藏实现细节(方法内聚、不暴露内部状态)。
-
run方法是Java线程执行任务的核心,需通过start()启动新线程执行其内容;直接调用run()仅在当前线程同步执行,不会创建新线程。该方法属于Runnable接口,无返回值、无参数,异常需内部处理。定义run逻辑有两种方式:继承Thread类重写run,或实现Runnable接口并传入Thread构造器,推荐后者以实现任务与线程解耦。正确理解run与start的区别对掌握多线程至关重要。
-
选接口还是抽象类取决于设计意图:若表达“是什么、怎么起步”且需共享状态或实现,用抽象类;若表达“能做什么”且需多角色组合或松耦合扩展,则用接口。
-
创建子类对象时,先调用父类构造方法,再调用子类构造方法。1.子类构造方法首行隐式或显式调用super(),执行父类初始化;2.若父类无无参构造,需显式调用super(参数);3.多层继承下,按继承链从顶层父类逐级向下执行;4.super()必须位于子类构造方法第一行,不能与this()共存;5.执行顺序为:静态代码块→实例代码块→构造方法,均按继承链依次进行。