-
封装是通过访问修饰符控制访问权限,隐藏内部实现并暴露安全接口。核心在于合理使用private、getter/setter、不可变返回值、防御性拷贝及接口隔离,而非简单用class包裹代码。
-
JSR是Java标准化提案编号,非API或依赖包;它由JCP组织协调制定,描述规范而非提供实现,实际使用需依赖对应参考实现,且现代Java开发中已逐步被JakartaEE等新流程取代。
-
静态成员属于类本身而非实例,JVM在类初始化阶段为其分配唯一内存,所有实例共享;调用不依赖对象,由声明类型决定隐藏行为,与对象无关。
-
能,HashMap允许一个null键,通过特殊分支处理哈希计算与查找,get(null)返回对应值或null(无法区分不存在与值为null),而ConcurrentHashMap因并发安全原因禁止null键。
-
ZXing报WriterException主因是参数越界或类型不匹配:content非空且URL编码后≤2953字节、宽高≥100、BufferedImage需TYPE_INT_ARGB;Swing显示需正确转ImageIcon并调revalidate/repaint;关键EncodeHintType仅ERROR_CORRECTION、CHARACTER_SET、MARGIN;jar缺失zxing-javase依赖或未设headless模式亦致失败。
-
Java堆存对象和数组等线程共享数据,栈存线程私有的局部变量、参数等;对象总在堆里因栈仅存引用,实际数据需垃圾回收与线程隔离支持。
-
JavaServlet是运行在服务器端的Java程序,遵循ServletAPI规范,接收HTTP请求并生成响应。其工作原理基于请求-响应模型,通过Web容器(如Tomcat)接收HTTP请求,封装为HttpServletRequest和HttpServletResponse对象,并调用Servlet的service方法进行处理。Servlet生命周期包含加载与实例化、初始化(init())、服务(service())、销毁(destroy())和卸载五个阶段,由Web容器自动管理。Servlet采用单实例
-
为什么Collections.swap不能交换Arrays.asList返回的列表?因为Arrays.asList返回的是一个固定大小的、不支持结构性修改的列表实现(Arrays$ArrayList),而Collections.swap内部会尝试调用set方法——这在该实现中会抛出UnsupportedOperationException。常见错误现象:Exceptioninthread"main"java.lang.UnsupportedOperationExcept
-
charAt()遍历最直接,但需防索引越界;Java字符串不可变、底层为char[],该方法快且语义清晰,空串或i<=length()易致越界。
-
匿名内部类访问局部变量必须为final或effectivelyfinal,根本原因是栈帧销毁后局部变量不复存在,而内部类对象仍存活;编译器将其值快照为隐式字段存入堆中,故需确保值不变。
-
Java中try-catch用于捕获处理运行时异常,避免程序意外终止;需将可能出错代码放入try块,对应处理逻辑写在catch块,finally用于资源清理;多catch时子类异常须在父类前;JDK7+推荐try-with-resources。
-
StampedLock乐观读必须配合validate()校验戳有效性,否则无效;validate()是轻量volatile读,stamp为0时恒返回false;禁用非标准\_validate命名;适用读多写少且读操作极快场景。
-
栈帧由JVM在执行invokestatic等字节码时自动创建并压入线程栈,与方法一一对应,生命周期由JVM控制;其结构(如局部变量表大小、操作数栈深度)在编译期确定并写入class文件的Code属性中。
-
Java不支持直接将方法引用存入泛型集合,需通过自定义或标准函数式接口明确类型签名;本文详解如何在Java17+中安全构建List<Function>并批量执行。
-
Collectors.toList()返回可变ArrayList,支持重复和null;toSet()返回无序去重Set,遇null抛NPE;toMap()遇重复key抛DuplicateKeyException;joining()遇null直接抛NPE;应依约束选方法。