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

Java调用fillMatrixA方法无输出 全写main中可运行问题排查

问题原因

核心bug出在静态成员的初始化顺序上:
Java类的静态成员会在类加载阶段按声明顺序完成初始化,你写的三个静态成员执行逻辑是:

  • 首先初始化size,int类型静态变量默认值为0
  • 紧接着执行new int[size][size]给matrixA分配内存,这时候size还是默认的0,最终创建出来的是一个长度为0的空二维数组
  • 最后初始化randomNumber实例。

等你后面调用setSize()方法修改size的值时,matrixA早就完成初始化了,数组长度一旦创建就固定,不会跟着size的变化自动调整。这时候fillMatrixA()里的外层循环判断条件是i < matrixA.length,也就是i < 0,循环体一次都不会执行,自然没有任何输出。

你把所有逻辑写在main方法里能正常运行,是因为代码顺序变成了「先读取用户输入给size赋值→再用有效size创建数组→再遍历数组填充打印」,数组长度是正确的,循环可以正常执行。

修复方法

不要在静态成员声明位置直接初始化二维数组,把数组创建的逻辑挪到拿到用户输入的有效size之后:

  1. 调整静态成员声明,数组只声明不初始化:
static int size;
static int matrixA[][];
static Random randomNumber = new Random();
  1. 修改setSize()方法,读取到输入值之后再创建数组:
static void setSize() {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter size");
    size = input.nextInt();
    matrixA = new int[size][size]; // 拿到合法size后再分配数组内存
}
  1. main方法里保证先调用setSize(),再调用fillMatrixA()即可正常运行。

注意:如果调用顺序反过来,先执行fillMatrixA()再执行setSize(),会因为matrixA还没初始化直接抛空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:54:28