容器ArrayList作为类的属性,就可以不用new,之后直接add()。但是在一个方法里定义了一个ArrayList的对象就必须要先new才能再add()。。why?????
解决方案 »
- tomcat 启动时候
- 急....C语言代码转成java代码
- tomcat启动404,解决就给分
- 线程
- java中导入Excel文件问题
- 急问:windows环境下tomcat ZIP版如何配置开机自动启动
- 请教一个java中使用xslt转换xml生成fo文件的问题?
- 有状态sessionbean,里为什么会出现这种情况啊?(对hibernate的操作总失败)
- oracle简单问题,游标如何定位?
- 如何调用servlet
- struts2的问题java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.Filter
- org.springframework.beans.factory.BeanCreationException: Error creating bean
不过。。ArrayList的默认值是一个空的ArrayList?以前倒没注意过。一般来说,对象的默认值都是Null
ArrayList作为类的属性时、不用new直接可以添加是因为编译器认为你会在其它模块给它设值开辟空间、所以便可以编译通过、而在局部方法里面、编译器很肯定的知道你绝对没有给它开辟空间、那么就不会让你编译通过、当然现在都是使用工具、工具也会有相应的提示的!
---------猜测结束---------
就算ArrayList作为属性时、你没有创建对象、直接add、那也会有运行时错误的。
使用没有初始化的变量都会抛出:NullPointerException
---------------------------------
java中声明一个变量之后、必须用赋值语句对变量进行显式初始化。
什么是new?new 就是在堆中创建一个对象add是这个对象的方法。比如你是个人(ARRAYLIST),你妈妈(JVM)一定要把你生(NEW)下来
你才有吃饭(ADD)这个方法 是吗?能理解这个那就OK了。
成员变量,如果是对象的话,默认值都是null,ArrayList类型的也是null,不会是空的ArrayList。
--------------------楼主说的那种情况比较诡异,估计有以下两种可能:
1、 如果楼主的意思是运行错误,那就和大家说的一样:可能在别的地方赋值了,所以不报错。
2、 如果楼主的意思是编译错误,如代码所示,list_2会报未初始化的编译错误,而list_1不会。
(这是由于属性会自动初始化为null,所以编译不会报错) private ArrayList list_1 ;
public void test() {
ArrayList listl_2;
list_2.add("ui"); // 编译报错
list_1.add("ui"); // 不报错
}