在声明部分和构造函数部分中实例化对象有什么区别?
例如,
案例一如下:
public ClassName{
private ArrayList objectName = new Arraylist();
public ClassName(){
}
}
案例二如下:
public ClassName{
public ClassName(){
ArrayList objectName = new ArrayList();
}
}
声明部分中的objectName与构造函数部分中的objectName之间是否有任何区别?
答案 0 :(得分:2)
您在Class
范围中实例化的第一个对象对所有类方法和构造函数都是可见的。
但是你在Constructor
中创建的第二个对象只对该构造函数可见,除非你在类中声明它并在构造函数中实例化。
基本上,对象声明用它定义对象的范围。 Refer this了解更多细节。
答案 1 :(得分:2)
范围是不同的。
<案例1private 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)您可以创建一个对象,其构造函数仅在构造函数
中抛出已检查的异常