在Java中实例化类中的对象作用域

时间:2013-09-17 05:34:27

标签: java

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

例如,

案例一如下:

public ClassName{

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

    }
}

案例二如下:

 public ClassName{

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

声明部分中的objectName与构造函数部分中的objectName之间是否有任何区别?

3 个答案:

答案 0 :(得分:2)

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

基本上,对象声明用它定义对象的范围。 Refer this了解更多细节。

答案 1 :(得分: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)

答案 2 :(得分:1)

1)当你在costructor中创建一个对象时,只有当真正调用这个特定的构造函数时,才会创建这个对象,同时始终创建在字段初始化期间创建的对象。

2)您可以创建一个对象,其构造函数仅在构造函数

中抛出已检查的异常