在声明节中实例化对象和在构造函数部分实例化对象有什么区别?
例如,
第一个案例如下:
public ClassName{
private ArrayList objectName = new Arraylist();
public ClassName(){
}
}案例二如下:
public ClassName{
public ClassName(){
ArrayList objectName = new ArrayList();
}
}声明区中的objectName和构造函数区中的objectName之间有什么区别吗?
发布于 2013-09-17 05:47:26
范围是不同的。
案例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-17 05:38:20
在Class作用域中实例化的第一个对象对所有类方法和构造函数都是可见的。
但是您在Constructor中创建的第二个对象只对构造函数可见,除非您在类中声明它并在构造器中实例化它。
基本上,对象的声明定义了对象的作用域。有关更多细节,请参见请参阅此。
发布于 2013-09-17 05:42:51
1)当您在costructor中创建一个对象时,只有当这个特定的构造函数真正被调用时,这个对象才会被创建,而在字段初始化期间创建的对象总是被创建的。
2)您可以创建一个对象,其构造函数仅在构造函数中抛出选中的异常。
https://stackoverflow.com/questions/18841969
复制相似问题