2

在声明部分和构造函数部分实例化对象有什么区别?

例如,

案例一如下:

public ClassName{

    private ArrayList objectName = new Arraylist();
    public ClassName(){

    }
}

案例二如下:

 public ClassName{

   public ClassName(){
           ArrayList objectName = new ArrayList();
    }
}

声明部分的 objectName 和构造函数部分的 objectName 有什么区别吗?

4

3 回答 3

2

您在范围内实例化的第一个对象Class对所有类方法和构造函数都是可见的。
但是,您创建的第二个对象Constructor仅对该构造函数可见,除非您在类中声明它并在构造函数中实例化。

基本上,一个对象的声明定义了一个对象的范围。有关更多详细信息,请参阅此

于 2013-09-17T05:38:20.093 回答
2

范围就是区别。

情况1

private ArrayList objectName = new Arraylist();

objectName 是一个实例变量,它在ClassName对象的实例中可见。这意味着您可以使用.运算符访问它:

ClassName className = new ClassName();
className .objectName; // this is valid(assume this statements in the same class)

案例2

public ClassName(){
    ArrayList objectName = new ArrayList();
}

这里,objectName对于构造函数是本地的,并且在 的实例中不可见ClassName

   ClassName className = new ClassName();
   className .objectName; // this is invalid (compiler error)
于 2013-09-17T05:47:26.417 回答
1

1)当您在构造函数中创建对象时,只有在真正调用此特定构造函数时才会创建该对象,而始终创建在字段初始化期间创建的对象。

2)您可以创建一个对象,其构造函数仅在构造函数中引发检查异常

于 2013-09-17T05:42:51.370 回答