// 用构造器初始化时,使用new初始化不报错,直接使用花括号的简写会报错,这是为啥啊
public class BigDecimalDemo {
final int[] a ;
public BigDecimalDemo(){
this.a = {1,2,3};  //报错:Array constants can only be used in initializers
}
}public class BigDecimalDemo {
final int[] a ;
public BigDecimalDemo(){
this.a = new int[]{1,2,3};  //不报错
}
}

解决方案 »

  1.   

    第一种写法相当于是静态创建数组,不能分开写, 必须在创建数组的同时为其赋值开辟内存空间, 第二种写法是动态创建数组, a的引用是null, new int[]{1,2,3}是给a赋值内存空间的引用
      

  2.   

    this.a = {1,2,3}; 这种必须在数组初始化时赋值使用。
    Object[] obje=null;
    obje={"1"}; //这样的赋值只有在声明的同时可以使用,即Object[] obje = {"1"};是可以的
    //除此之外的赋值,就要针对数组元素分别赋值或用new的方式或引用别的数组对象,即
    Object[] obje=null;
    obje=new Object[]{"1"}; //这样是可以的
    //或者
    obje=new Object[1]; 
    obje[0]="1";
    //或者
    Object obje2={"1"};
    obje=obje2; 
      

  3.   

    final修饰的变量不能改变  只能在声明时赋值
      

  4.   

    int[] a = {1, 2, 3};这种语法只能用在定义数组(初始化)变量的时候。如果在数组变量创建之后去修改,就不能直接等于{1, 2, 3};必须重新初始化一个数组对象并且对其进行赋值。