-
public和private在类成员上的行为差异它们控制的是「谁能在哪访问」,不是「能不能用」。public成员可以从任何地方被访问,只要能拿到对象引用或类名;private成员只能在定义它的那个类内部访问,连子类、同包其他类都不行。子类继承public方法可直接调用;继承private方法则完全不可见——编译器会报cannotfindsymbol同包下其他类能访问public字段,但对private字段连读都做不到,更别说修改private构造方法意味着外部无
-
装饰者模式用组合代替继承,通过实现同一接口并持有被装饰对象引用来动态增强行为;典型案例如JDK中InputStream系列装饰器;常见错误包括错误继承导致ClassCastException、漏写equals/hashCode、空指针、资源未复用等。
-
Java数组下标从0开始,合法范围是0到length-1;访问越界会抛出ArrayIndexOutOfBoundsException;循环遍历推荐for(inti=0;i<arr.length;i++)。
-
Collections.copy()用于将源列表元素复制到已有目标列表中,要求目标列表长度≥源列表。示例中通过预填充默认值确保容量,调用copy后完成覆盖复制。常见错误包括目标列表长度不足或未初始化,会抛出IndexOutOfBoundsException或NullPointerException。注意其与addAll()区别:copy是替换原有元素位置,不改变结构;addAll是追加元素,增加长度。需提前设置目标列表大小,可用Collections.nCopies初始化。该方法适用于复用列表对象的场景,
-
首先安装配置本地Tomcat并验证运行,再在IDE中集成服务器,接着启用热部署与调试模式,最后解决端口占用、类加载失败等常见问题,确保项目正确部署与实时更新。
-
Java中Arrays.toString()不支持自定义格式,推荐用StringJoiner(可设分隔符、前后缀,空数组返回“[]”)、Arrays.stream()+Collectors.joining(支持元素映射和链式调用)或手动StringBuilder拼接(性能高,需自行处理边界)。
-
Java枚举本质是特殊类,强制具备私有构造、定义即创建、语法限定实例有限三大特性:构造方法默认且只能为private;所有实例在类加载时一次性创建并全局唯一;枚举值必须在定义中显式列出,编译期确定且不可扩展。
-
FutureTask是实现Runnable和Future接口的可取消异步计算包装器,支持直接run()执行、多次调用(仅首调计算)、非线程池环境使用;而普通Callable需经ExecutorService封装才能执行。
-
Future.get()默认阻塞,需用超时重载或isDone()判断;抛出InterruptedException、ExecutionException、TimeoutException须分别处理;禁在UI/Servlet主线程调用;cancel()不保证资源清理,任务需自行响应中断。
-
Java中抛出异常的核心是:用throw抛出异常实例,用throws声明受检异常;未捕获的受检异常必须声明,否则编译失败;运行时异常无需声明。
-
Java类型转换分自动(小→大,安全)和强制(大→小,需显式,有丢失风险);含引用类型转换、装箱拆箱(注意缓存与空指针)及字符串手动转换(parseXxx/valueOf)。
-
Java中if-else需防坑:必加花括号{}、字符串判空用"str".equals()或Objects.equals()、多条件按null检查→无副作用→高开销顺序排列、elseif链须加finalelse并日志或抛异常。
-
答案是通过拆分条件、使用变量、卫语句和括号提升可读性。将复杂条件封装为私有方法如isAdminEligible,使主逻辑清晰;用布尔变量命名中间结果,分离条件与行为;采用卫语句提前返回,减少嵌套层级;显式添加括号明确逻辑优先级,避免歧义;最终实现代码自解释,强调清晰优于简洁。
-
异常链是Java内置的cause机制,通过Throwable(String,Throwable)构造器自动构建Causedby:嵌套堆栈,用于跨层封装、补充业务上下文、受检转非受检三类场景,避免丢弃关键线索。
-
IntelliJIDEA中配置JDK需协调项目SDK、模块SDK和语言级别:先在ProjectStructure→Project设置项目SDK及匹配的语言级别;再在Modules→Dependencies中确认或调整模块SDK;最后同步Maven/Gradle的编译插件版本,必要时清理缓存重启。