ArrayList的问题。谢谢您了!!
容器ArrayList作为类的属性,就可以不用new,之后直接add()。但是在一个方法里定义了一个ArrayList的对象就必须要先new才能再add()。。。。。why?????
------最佳解决方案--------------------
+1
成员变量,如果是对象的话,默认值都是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"); // 不报错
}
------其他解决方案--------------------成员变量在类实例化的时候有默认值,局部变量没有。
不过。。ArrayList的默认值是一个空的ArrayList?以前倒没注意过。一般来说,对象的默认值都是Null
------其他解决方案-----------------------下面颜色字体部分、纯属个人猜测---
ArrayList作为类的属性时、不用new直接可以添加是因为编译器认为你会在其它模块给它设值开辟空间、所以便可以编译通过、而在局部方法里面、编译器很肯定的知道你绝对没有给它开辟空间、那么就不会让你编译通过、当然现在都是使用工具、工具也会有相应的提示的!
---------猜测结束---------
就算ArrayList作为属性时、你没有创建对象、直接add、那也会有运行时错误的。
使用没有初始化的变量都会抛出:
NullPointerException
---------------------------------
java中声明一个变量之后、必须用赋值语句对变量进行显式初始化。
------其他解决方案--------------------ArrayList不管做为什么,都要先new,才能add,你很可能没看到它new的地方,或者是别人new的,(引用)传递给了它
------其他解决方案--------------------
什么是new?new 就是在堆中创建一个对象
add是这个对象的方法。
比如你是个人(ARRAYLIST),你妈妈(JVM)一定要把你生(NEW)下来
你才有吃饭(ADD)这个方法 是吗?
能理解这个那就OK了。
------其他解决方案--------------------------其他解决方案--------------------肯定是要new的 是不是其他地方new了你没有注意
------其他解决方案--------------------那是不可能没有new 的,你自己没有写new 不代表程序或者框架没new,
空指针怎么可能调用方法?
------其他解决方案--------------------
懂了,你给的代码就是我描述的意思,原来引用属性默认为null。晓得了