-
record必须至少声明一个字段,不可继承或被继承,自动实现基于字段值的equals/hashCode/toString,字段隐式final,支持自定义构造器但须调用canonical构造器。
-
ArithmeticException不仅由除零引发,还包括整数溢出(通过Math.*Exact方法)、BigDecimal除法精度不足、BigInteger负模或除零等场景,需按类型严格校验边界。
-
ArrayStoreException是运行时异常,当向数组存入类型不兼容的元素时抛出,常见于多态对象数组操作,如将Integer存入实际为String类型的Object[]数组;可通过try-catch捕获并处理,但更推荐使用泛型集合、明确数组类型和类型检查等方式从源头避免。
-
n&1能判断奇偶是因为整数以二进制补码存储,最低位为0是偶数、为1是奇数;n&1仅保留最低位,结果为0或1,比取模、除法更高效且支持负数。
-
微博热搜需用HttpClient带User-Agent、Referer及Cookie访问https://weibo.com/ajax/side/hotSearch接口,返回UTF-8JSON;POI写Excel时须设日期/数字格式、用XSSFWorkbook、绝对路径并正确关闭流。
-
ClassCastException在向下转型时抛出,因编译期只检查引用类型而运行期才验证实际对象类型;若实际类型不匹配目标子类,JVM即抛异常。
-
TypeNotPresentException在泛型反射时发生,因JVM解析泛型签名时遇到当前ClassLoader无法加载的类;常见于Shade/FatJar场景,需对getGenericXxx()单独try-catch并fallback到非generic方法。
-
选IntelliJIDEA,因其对Java生态深度集成——如javac错误内联标红、Maven自动重载、Lombok零配置识别;SpringBoot原生支持、热更新能力更强、重构更安全;Eclipse仅在特定老项目、Ant构建或定制插件场景下更优。
-
Timer+TimerTask适合轻量单次闹钟但线程不安全,应改用ScheduledExecutorService;时间计算用Java8+API避免时区误差;UI操作须切回EDT,音频播放需注意线程安全与平台兼容性。
-
当Java类未显式定义构造方法时,编译器会自动生成一个无参的默认构造方法,前提是类不是抽象类且父类构造调用合法;一旦定义了任意构造方法,默认构造方法将不再生成;该默认构造方法无参数、访问权限与类相同,并隐式调用父类无参构造方法;在继承中若父类无无参构造方法且子类未显式调用super(...),则编译失败;因此需注意显式定义无参构造方法以支持反射、序列化等场景。
-
Java强制类型转换会丢数据,不是“转一下就完事”大精度类型(如double、long)转小精度类型(如int、short、byte)时,Java不会自动帮你检查值是否越界——它直接截断或取低字节,结果可能完全不是你想要的数字。比如doubled=123456.789;强转成int得到123456,看着还行;但doubled=3e9;转int就变成-1294967296(溢出后补码解释),毫无预警。用(type)强转前必须自己校验范围Java的强制转换
-
安装Git需根据发行版使用对应包管理器,如Ubuntu用apt、CentOS用yum或dnf;安装后通过git--version验证。配置用户信息:设置全局用户名和邮箱,确保提交记录正确。检查PATH环境变量是否包含Git路径(通常为/usr/bin),若无则手动添加至~/.bashrc等文件并重载。可设置别名提升效率,如git.st替代git.status。完成配置后即可正常使用Git进行版本控制。
-
Java中数字字面量不加修饰默认为int(整数)或double(浮点数);整数如123默认int,浮点数如3.14默认double,超出范围需加L或f后缀,进制前缀和科学计数法格式须严格符合规范。
-
不可变对象因状态不可变而天然线程安全,需满足类为final、字段私有且final、无修改方法、构造无this逃逸、可变组件深拷贝等条件,如Person示例所示,其广泛应用在高并发场景中。
-
访问者模式适用于结构稳定但操作多变的场景,如编译器语法树、XML/JSON节点树、GUI组件树等;它通过双分派解耦操作与结构,新增功能只需添加Visitor实现类,避免修改原有节点类,提升可维护性与健壮性。