日期:2014-05-20  浏览次数:20708 次

JAVA定义问题
Java code
class Test{
   String s1[] = new String[3];
   s1[0] = "csdn";     //此处会出错
   String s2[] = null;
   s2[1] = "java";     //此处会出错
   System.out.println();    //此处会出错

}


如果把代码改为以下这样就不会

Java code
class Test{
   //就是让以上代码在代码块中
   {
   String s1[] = new String[3];
   s1[0] = "csdn";     //此处不会出错
   String s2[] = null;
   s2[1] = "java";     //此处不会出错
   System.out.println();    //此处不会出错
   } 
 
}


我想知道其中原理,就是为什么第一个会出错,而第二个不会。谢谢大家!!!

------解决方案--------------------
编译器做的工作只是把java文件编译为class文件;
所谓的编译就是翻译成JVM能识别运行的指令,JVM才根据这些指令去做 怎样初始化,怎样分配内存空间等工作。
Java code

String s1[] = new String[3];
s1[1] = "csdn";

------解决方案--------------------
探讨
/*
对于我提出的问题,通过查找相关资料,个人总结(分析)如下:
<1>数组:是一组相关数据的集合,实际就是一连串变量(这个很重要),
    变量在声明时,不会分配内存空间,而是在类实例化对象时才分配
<2>JAVA中,所有的操作都是以对象为基础,而对象是由类通过实例化产生的,
  所有的方法和属性都可以用对象来调用。
<3>java中常用内存区域:
  a-->栈内存空间:保存所……

------解决方案--------------------
呵呵,我初学java时也经常犯这个错误!
其实7楼已经很清楚地说明了问题的所在,楼主还不明白,以至于逼得16楼把反编译都写出来了^_^
Java类的语法格式说的很清楚了:
class 类名{
类属性定义或初始化;
类方法定义或初始化;
其它块语法;
}
 s1[0] = "csdn"; //是赋值语法,不是定义或初始化语法,就这么简单!