-
类是模板,不占内存也不执行操作;对象是类的实例,占用内存并能调用方法执行具体动作。一个类可创建多个独立状态的对象,类定义结构,对象体现具体值与行为。
-
Timer+TimerTask适合轻量单次闹钟但线程不安全,应改用ScheduledExecutorService;时间计算用Java8+API避免时区误差;UI操作须切回EDT,音频播放需注意线程安全与平台兼容性。
-
MarkWord的锁标志位位于对象头前8字节(64位JVM)中一个4-bit字段,与GC年龄、哈希码、偏向线程ID共用同一内存区域,通过位运算动态复用,其值需用jol工具或JVM诊断参数实时观测。
-
2026年初国内高质量Java自学网站包括:入门选how2j.cn与自学精灵(way2j.com);查文档用Oracle官方教程和StackOverflow;练手用LeetCode力扣与LintCode;拓展选并发编程网与Baeldung。
-
Java成品形态取决于技术栈与部署环境:桌面端可用JavaFX/Swing打包为exe/dmg/deb,后端多为SpringBoot可执行jar,AndroidApp底层仍依赖Java,嵌入式场景需适配JVM限制与信创环境。
-
Java7+的switch对String不是语法糖,而是编译器生成查找表并结合hashCode()与equals()双重校验;所有case必须是编译期常量,null值仍抛NPE,性能优于if-else但弱于intswitch。
-
静态方法不能被覆盖,只能被隐藏Java里没有“静态方法覆盖”这回事——override只适用于实例方法。子类声明同名、同参数、同返回类型的static方法时,实际是**隐藏(hiding)**了父类方法,不是重写。关键区别在于:调用哪个版本,取决于**引用类型**(编译时类型),而不是对象实际类型(运行时类型)。如果用Parentp=newChild();,再调用p.staticMethod(),执行的是Parent.staticMethod()如果用Childc=newChil
-
ConcurrentHashMap的get不加锁也能安全,是因为Node的val和next字段为volatile,借助JVM内存模型的happens-before保证可见性,单次读取原子且无需锁;全程仅三次内存访问,遇扩容自动查新表。
-
Java中需用带标签的break跳出外层循环:在外层循环前加“标签名:”,内层用“break标签名;”,标签后必须跟冒号且位于循环语句正前方。
-
选择合适的Java镜像并编写Dockerfile是部署核心,推荐使用openjdk:17-jre等LTS版本,通过dockerbuild构建镜像,dockerrun运行容器,并可结合多阶段构建、JVM参数优化和HEALTHCHECK提升稳定性。
-
Method.invoke()慢主因是JVM保护性降级:访问检查、参数封装、类型擦除转换及无法充分内联;缓存Method、setAccessible(true)、改用MethodHandle或模块opens可优化。
-
先编译Pattern再用Matcher匹配,可高效处理字符串。例如匹配邮箱:使用Pattern.compile()定义规则,matcher.find()遍历结果,输出所有邮箱地址。处理多行文本时添加Pattern.DOTALL标志,使.匹配换行符,结合非贪婪模式.*?提取日志中的错误信息和用户。复杂结构推荐分组捕获并注释group编号含义,提升可维护性。启用UNICODE_CHARACTER_CLASS支持中文字符识别。性能优化方面,避免嵌套量词防止回溯灾难,优先使用非贪婪模式,固定前缀可用indexOf
-
能,外部类可用default权限,仅限同包访问,跨包不可见、不可实例化,且文件中最多一个public类,文件名须与其一致。
-
String.intern()可使重复JSONkey共享同一对象,降低内存占用与GC压力;需限定在有限高频key集合中使用,避免敏感信息或大字符串误用,并推荐通过预定义KNOWN_KEYS集合控制intern范围。
-
Optional.filter()用于条件性保留单个值:值存在且满足Predicate时返回原Optional,否则返回empty;它不遍历集合,不改变泛型类型,且在empty时不执行Predicate。