You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java报ArrayIndexOutOfBoundsException数组下标越界异常如何修复

问题定位

程序抛出的ArrayIndexOutOfBoundsException属于数组下标越界运行时异常,根据异常栈提示的报错位置kpi.java:24,对应代码是main方法的第一行逻辑host = args[0].toLowerCase();。
异常触发的直接原因:启动Java程序时没有传入要求的命令行启动参数,此时main方法的入参数组args是长度为0的空数组,直接访问下标为0的元素就会触发越界,程序直接进入catch块打印栈轨迹后终止,完全不会执行后续的SSH连接、KPI采集、数据入库逻辑。
另外代码中后续还用到了args[1]作为SSH连接的目标地址参数,就算传入了1个启动参数,缺失第二个参数时访问args[1]会再次触发下标越界异常。
同时你贴出的代码片段存在语法残缺:for循环定义段for (int i = 6; i 0 && c 0) {缺少比较运算符、循环边界判断、大括号闭合逻辑,就算参数问题修复,这部分也无法正常编译运行,需要补全完整逻辑。

修复方案
  • 启动程序时按要求传入2个必填命令行参数,第一个参数为节点标识,第二个参数为目标节点的SSH连接IP,标准启动命令格式如下:
java trcrt.kpi <节点标识> <目标节点SSH_IP>
# 示例
java trcrt.kpi node01 192.168.3.12
  • 在main方法最开头增加参数合法性校验逻辑,参数缺失时直接给出明确提示并优雅退出,避免直接抛出晦涩的越界异常,参考代码如下:
public static void main(String[] args) {
    // 启动参数校验
    if (args == null || args.length < 2) {
        System.err.println("启动参数错误,正确用法:java trcrt.kpi <节点标识> <目标SSH_IP>");
        System.exit(1);
    }
    host = args[0].toLowerCase();
    // 后续保留原有业务逻辑即可
    try {
        SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
        // ...... 原有SSH连接、KPI采集、入库逻辑
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  • 补全代码中截断的for循环逻辑,确认循环边界、字段拆分、KPI值解析部分的语法正确,无拼写、符号遗漏问题。

内容的提问来源于stack exchange,提问作者acang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:57:22