答:Java 只有值传递。传入基本类型时,复制的是基本值;传入引用类型时,复制的是引用值。方法可以通过这个引用访问同一个对象,但把形参重新指向另一个对象,不会让调用方的变量跟着改指向。
答:args[0] 是传给 Java 程序的第一个应用参数,不是类名,也不是 java 命令本身。没有应用参数时,数组长度为 0;这时访问 args[0] 会抛 ArrayIndexOutOfBoundsException。
答:可以。不同类可以各自声明合规的 main 方法,启动时由 java 命令、JAR 清单或 IDE 运行配置决定使用哪一个入口。一个项目存在多个 main,不会让 JVM 自动全部执行,也不意味着它们会同时运行。
答:String 表示不可变的字符串值;StringTokenizer 是按分隔符逐个取词的旧式工具。前者是数据本身,后者是处理字符串的工具,二者不是替代关系。新代码通常优先考虑 String.split、Scanner 或按实际数据格式选择解析器。
答:int 是 32 位基本整数类型,不能为 null;Integer 是包装类,可以作为对象使用,也能表示 null。集合泛型需要引用类型,所以常见 List<Integer>,而不是 List<int>。二者可以自动装箱和拆箱,但会带来额外语义与成本。
答:transient 用来声明一个实例字段不参加 Java 默认对象序列化。它常用于缓存、可重新计算的数据或不应由默认机制保存的字段。它不是加密,也不保证任何序列化框架都忽略该字段;自定义序列化代码仍可能把它写出去。
答:String 的值不可变,修改内容会得到另一个字符串值;StringBuffer 是可变字符序列,适合反复追加或修改。StringBuffer 的主要操作提供同步,但一段由多个方法组成的业务操作不会因此自动成为原子操作。单线程拼接通常优先使用 StringBuilder。
答:Class.forName 根据类名获取对应的 Class 对象。常用的单参数重载会尝试加载并初始化该类;带 initialize 参数的重载可以选择暂不初始化。它返回的是类型的描述对象,不等于创建了这个类的普通实例。
答:final 是修饰符,用来限制变量重新赋值、方法重写或类继承;finally 是 try 语句中的收尾代码块;finalize() 是已弃用并计划移除的对象终结方法。名字相近,但分别属于声明约束、执行控制和旧式终结机制。
答:assert 是 Java 的断言语句,用来检查程序员认为在该位置应当成立的内部条件。断言启用时,条件为 false 会抛 AssertionError;通常默认未启用,需要通过 -ea 等启动选项打开。它不适合替代业务校验或公共接口参数检查。