-
必须用private修饰类的内部状态字段,以防止外部绕过业务逻辑篡改数据;非静态字段默认应为private,构造器、getter/setter和工具方法按需暴露,但字段本身不例外。
-
凯撒密码用char数组循环实现:将明文转为char[],遍历每个字符,字母按偏移量模26平移(分大小写处理基准'a'/'A'),非字母不变。
-
AtomicStampedReference仅适用于单JVM多线程场景,无法用于分布式环境;其stamp值不跨进程同步,无法解决分布式ABA问题,分布式版本控制需依赖Redis、ZooKeeper等外部一致性存储。
-
Java的Period.between方法在计算LocalDate间隔时采用“逐月递增+自动截断”策略,导致相同月份内不同起始日(如1月28日vs1月31日)可能得出完全相同的Period结果,这是其设计使然而非Bug。
-
字符串不可变确保敏感信息如路径、密码不被篡改,防止安全漏洞;2.支持字符串常量池,实现内存优化与对象复用;3.天然线程安全,多线程访问无需同步;4.哈希码可缓存,适合作为集合的键。
-
子类能直接访问父类的protected和public成员,同包子类还可访问default成员;private成员完全不可见。需用super调用被重写的父类方法,构造器中须注意初始化顺序与重写方法陷阱。
-
接口解决了Java单继承限制,使类能实现多行为组合,如无人机同时实现Flyable和Photographable;它定义行为契约,明确规范,使调用方依赖抽象而非具体实现,支持多态与依赖倒置,提升系统扩展性与模块解耦,是构建可维护架构的关键。
-
Collections.sort()仅适用于List且元素实现Comparable接口,对Set需先转ArrayList;自定义排序须用Comparator并遵守三值契约;TreeSet/TreeMap自动排序但有去重和性能限制;Stream排序用sorted()返回新流。
-
子类调用父类实例方法必须用super(),且仅限非静态方法;private、static、final方法有特殊限制:private不可见,static不参与多态需用类名调用,final不可重写但可直接调用。
-
JarInputStream用于流式遍历JAR内容,逐个读取JarEntry,不加载全文件到内存;需传入mark-supported输入流,自动解析MANIFEST.MF,通过getNextJarEntry()循环获取条目,目录以/结尾,须校验路径防遍历,推荐用于单次扫描场景。
-
IllegalArgumentException应在参数不合法时抛出,如数值越界、字符串为空等;通过try-catch捕获并处理,结合前置校验、默认值回退、用户提示和日志记录,提升系统健壮性。
-
Java方法签名仅含方法名、参数类型列表(按序)、类型擦除后的泛型信息;不包括返回类型、异常、修饰符;是JVM识别方法及重载判定的唯一依据。
-
Java中实现对象序列化与反序列化的核心是通过实现Serializable接口将对象转换为字节流并恢复,其中被transient和static修饰的字段以及父类未实现Serializable时的非静态字段不会被序列化,因此在序列化过程中这些字段的状态不会被保存或恢复,从而确保敏感信息不被持久化、共享状态不被重复记录,并正确处理继承关系下的对象重建,最终保证序列化机制的安全性与一致性。
-
在IntelliJIDEA中一键生成JUnit5测试类需按Ctrl+Shift+T(Windows/Linux)或⌘⇧T(macOS),光标置于类名上,前提为正确配置JUnit5依赖、标记test目录为TestSourcesRoot,并在Settings中将Testinglibrary设为JUnit5。
-
Java字符串拼接主流方式有五种:“+”运算符、String.concat()、StringBuilder.append()、StringBuffer.append()、String.join()/StringJoiner/StringUtils.join();性能差异源于字符串不可变性与内存分配策略,循环拼接应优先用预设容量的StringBuilder。