在Java中实例化类中的对象范围

在Java中实例化类中的对象范围,java,Java,在声明部分和构造函数部分实例化对象有什么区别 比如说, 案例一如下: public ClassName{ private ArrayList objectName = new Arraylist(); public ClassName(){ } } public ClassName{ public ClassName(){ ArrayList objectName = new ArrayList(); } } 案例二如下:

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

比如说,

案例一如下:

public ClassName{

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

    }
}
 public ClassName{

   public ClassName(){
           ArrayList objectName = new ArrayList();
    }
}
案例二如下:

public ClassName{

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

    }
}
 public ClassName{

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

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

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

基本上,对象的声明定义了对象的范围。有关更多详细信息。

1)在costructor中创建对象时,仅当确实调用此特定构造函数时才会创建此对象,而在字段初始化期间创建的对象始终会创建


2) 您可以创建一个对象,该对象的构造函数仅在构造函数中抛出选中的异常。范围是不同的

案例1 这里的
objectName
是一个实例变量,它在
ClassName
对象的实例中可见。这意味着您可以使用
操作符访问它:

ClassName className = new ClassName();
className .objectName; // this is valid(assume this statements in the same class)
案例2 这里,
objectName
是构造函数本地的,在
ClassName
的实例中不可见:

   ClassName className = new ClassName();
   className .objectName; // this is invalid (compiler error)

你有证据证明这一点吗?然而,我必须说,你的回答对我来说是有意义的:)这是对的,只是你的术语不正确。您所称的类范围实际上是实例范围。看见他在比较一个实例字段和一个局部变量,您已经正确地解释了这两个变量与作用域的角度非常不同。“证明它的资源”是Java语言规范。