日期:2014-05-19  浏览次数:20805 次

ArrayList的问题。谢谢您了!!
容器ArrayList作为类的属性,就可以不用new,之后直接add()。但是在一个方法里定义了一个ArrayList的对象就必须要先new才能再add()。。。。。why?????
------最佳解决方案--------------------
引用:
容器ArrayList作为类的属性,就可以不用new,之后直接add()。但是在一个方法里定义了一个ArrayList的对象就必须要先new才能再add()。。。。。why?????

引用:
就算ArrayList作为属性时、你没有创建对象、直接add、那也会有运行时错误的。

+1
引用:
成员变量在类实例化的时候有默认值,局部变量没有。
ArrayList的默认值是一个空的ArrayList?以前倒没注意过。一般来说,对象的默认值都是Null

成员变量,如果是对象的话,默认值都是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的,(引用)传递给了它
------其他解决方案--------------------
引用:
容器ArrayList作为类的属性,就可以不用new,之后直接add()。但是在一个方法里定义了一个ArrayList的对象就必须要先new才能再add()。。。。。why?????


什么是new?new 就是在堆中创建一个对象

add是这个对象的方法。

比如你是个人(ARRAYLIST),你妈妈(JVM)一定要把你生(NEW)下来
你才有吃饭(ADD)这个方法 是吗?

能理解这个那就OK了。
------其他解决方案--------------------
引用:
引用:容器ArrayList作为类的属性,就可以不用new,之后直接add()。但是在一个方法里定义了一个ArrayList的对象就必须要先new才能再add()。。。。。why?????

什么是new?new 就是在堆中创建一个对象

add是这个对象的方法。

比如你是个人(ARRAYLIST),你妈妈(JVM)一定要把你生……

------其他解决方案--------------------
肯定是要new的 是不是其他地方new了你没有注意
------其他解决方案--------------------
那是不可能没有new 的,你自己没有写new 不代表程序或者框架没new, 空指针怎么可能调用方法?
------其他解决方案--------------------
引用:
引用:容器ArrayList作为类的属性,就可以不用new,之后直接add()。但是在一个方法里定义了一个ArrayList的对象就必须要先new才能再add()。。。。。why?????
引用:就算ArrayList作为属性时、你没有创建对象、直接add、那也会有运行时错误的。
+1
引用 1 楼 ha……

懂了,你给的代码就是我描述的意思,原来引用属性默认为null。晓得了