-
答案:Java变量分成员变量(实例、静态)和局部变量。实例变量属对象,堆中存储,随对象存亡;静态变量属类,方法区存储,类加载时初始化;局部变量在栈中,无默认值,需显式初始化,作用域限方法或代码块内;final修饰的常量不可变引用,但不保证内容不变;区分依据为声明位置、static修饰及作用域,结合内存模型可明确其生命周期与可见性。
-
continue的作用是跳过当前迭代剩余代码并进入下一次循环判断,本质是“提前结束本轮”而非“过滤”,真正过滤依赖其前的条件判断。
-
Stream.filter不改变原List,因返回新Stream且惰性求值;必须collect才能落地结果,toList()返回不可变列表,需可变时用toCollection(ArrayList::new);filter不自动处理null,应显式检查。
-
Integer.toBinaryString()对负数返回32位补码二进制字符串(如-1→32个1),不带符号位、不补前导零;正数返回最简二进制形式(如5→"101"),0返回"0";需带符号或固定位宽时须手动处理。
-
Java规范未规定匿名类编号的生成规则,不同编译器(如javac与EclipseJDT)对同一匿名类可能生成不同数字后缀(如Foo$1vsFoo$6),因此依赖getClass().getName()作为持久化标识会导致兼容性问题。
-
应使用Graphics2D类,它支持抗锯齿、透明度和旋转文字,而Graphics不适用于BufferedImage验证码生成,且需设置渲染提示并调用dispose()防止内存泄漏。
-
isEmpty()仅判断长度是否为0,等价于length()==0;isBlank()(Java11+)判断是否为空或全为Unicode空白字符,语义更严格。二者均需先判null防NPE。
-
Java中File类可创建删除本地文件目录,但仅抽象路径、不处理内容;mkdir()建单层目录,mkdirs()建多级,createNewFile()建文件需先exists()判断;delete()仅删空目录或文件,非空目录须递归删除;路径用/或\,建议绝对路径;JDK7起推荐NIO.2的FilesAPI。
-
NumberFormat.getCurrencyInstance()不支持动态切换货币符号,其显示的货币符号和小数位由Locale默认关联的货币决定;若需按货币代码(如"EUR")动态控制,应使用setCurrency(Currency.getInstance("EUR"))或Java12+的NumberFormatter。
-
StringTable是哈希表,不自动去重,仅通过字面量加载或显式调用intern()才插入条目;intern()在JDK7+存引用而非复制对象,滥用会导致哈希冲突、内存泄漏及性能下降。
-
-XX:MaxGCPauseMillis是G1的软目标而非硬限制,仅在启用-XX:+UseG1GC且堆大小固定(-Xms=-Xmx)时有效;单独设置无效,因它依赖G1预测模型,需历史数据支撑,否则停顿抖动剧烈。
-
JIT即时编译器将运行时频繁执行的热点代码(如高频调用方法或循环体)动态编译为本地机器码以提升性能;它延迟编译,仅对达到阈值的热点代码优化,避免冷代码浪费资源,并在编译中进行内联、逃逸分析等深度优化。
-
Thread.stop()被弃用是因为它强行注入ThreadDeath异常,破坏锁状态与对象一致性,导致中间态暴露和逻辑损坏;安全停止应依赖volatile标志与interrupt()协作退出。
-
LambdaMetafactory不是替代反射的工具,而是将反射调用转化为接近直接调用的高性能桥梁,通过MethodHandle+invokedynamic生成函数式接口实现,绕过安全检查、参数装箱与方法查找,使调用耗时从35.8ns降至2.9–3.2ns。
-
子类中定义与父类同名的成员变量会隐藏父类变量,但两者仍独立存在;通过子类对象访问时默认使用子类变量,如Childc=newChild();System.out.println(c.value)输出20,而((Parent)c).value输出10;可使用super关键字访问被隐藏的父类成员,如super.value;此现象仅适用于成员变量,方法同名则为重写,静态成员同名属于静态隐藏;建议避免同名字段以提升代码可读性。