用构造方法为动态数组赋长度,为什么编译器会报错ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0

/**

  • 使用一维数组模拟栈数据结构
  •  1、这个栈中可以存储java中的String引用类型数据
    
  •  2、栈中提供push方法模拟压栈,pop方法模拟弹栈(满了,空了提供信息)
    
  •  3、编写程序,new栈对象,调用poppush方法模拟压栈弹栈
    
  • /

//测试类
public class HomeWork1 {

//主方法
public static void main(String[] args) {

    //新建一个静态数组以方便测试
    String[] arrayIn = {"123","133","233"};

    //创建Stack引用数据类型的引用
    Stack stack1 = new Stack(3);
    stack1.push(arrayIn);

    //调用下面工具类中的方法遍历数组
    arrayPrint.Print(stack1.stack);

/*
报错:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at Array.Stack.push
at Array.HomeWork1.main
*/
}

}

//Stack类
/* ... class Stack {

//规定Stack长度为number
private int number ;
String[] stack = new String[number];

//栈长度的构造方法
public Stack(int number) {
    this.number = number;
}


public void push(String[] arrayIn) {
    for (int i = 0 ; i < arrayIn.length ; i++) {
        this.stack[i] = arrayIn[i];
    }
}

// public void pop(String[] array) {}

}

//工具类
class arrayPrint{
public static void Print(String[] arrayIn) {

    for (int i = 0 ; i < arrayIn.length ; i++) {
        System.out.println(arrayIn[i]);

    }
}

}

statck类有问题,构造方法中应该如下写


 
//栈长度的构造方法
public Stack(int number) {
    this.number = number;
    this.stack = new String[number];
}


//Stack类
class Stack {

//规定Stack长度为number
String[] stack ;

//栈长度的构造方法
public Stack(int number) {
    this.stack = new String[number];
}


public void push(String[] arrayIn) {
    for (int i = 0 ; i < arrayIn.length ; i++) {
        this.stack[i] = arrayIn[i];
    }
}

}