java中args可能为null或空数组,安全访问需先校验args!=null且args.length>0,再访问元素;推荐用args==null||args.length==0判断无参,或使用arrayutils.isnotempty(args)等工具方法。

当 Java 的 main 方法中 args 为 null 或长度为 0 时,直接访问 args[0] 会抛出 NullPointerException 或 ArrayIndexOutOfBoundsException。安全访问的关键是**先校验再使用**,而非依赖 JVM 是否一定传入非空数组。
明确 args 可能为 null 或空数组
JVM 规范并未强制要求 args 非 null;虽然主流 JDK(如 OpenJDK、HotSpot)在无命令行参数时会传入一个长度为 0 的空数组(new String[0]),但某些嵌入式环境、自定义启动器或测试框架可能传入 null。因此不能假设 args != null 是绝对安全的。
推荐的安全访问模式
采用「空安全」写法,兼顾 null 和空数组两种情况:
- 用
args == null || args.length == 0判断是否无参数 - 访问前始终检查索引是否有效:
args != null && i - 封装成工具方法复用,例如:
static String arg(String[] args, int index, String defaultValue) {
return (args != null && index
调用:String host = arg(args, 0, "localhost");
避免常见错误写法
-
错:
if (args.length > 0) { ... args[0] ... }—— 若args == null,此处已 NPE -
错:
args != null && !args[0].isEmpty()—— 短路逻辑正确,但未检查args.length > 0,仍可能越界 -
对:
if (args != null && args.length > 0 && args[0] != null)—— 完整防御链
更现代的替代方案:使用第三方库或新 API
若项目允许引入依赖,可考虑:
-
Apache Commons Lang:
ArrayUtils.isNotEmpty(args)或ArrayUtils.get(args, 0, "default") -
Java 9+ Optional:将参数转为流处理,适合复杂解析:
Arrays.stream(args).findFirst().orElse("default")(注意:若args == null,需先判空)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











