什么时候实例变量被初始化?是在构造函数块完成之后还是之前?
考虑以下示例:
public abstract class Parent {
public Parent(){
System.out.println("Parent Constructor");
init();
}
public void init(){
System.out.println("parent Init()");
}
}
public class Child extends Parent {
private Integer attribute1;
private Integer attribute2 = null;
public Child(){
super();
System.out.println("Child Constructor");
}
public void init(){
System.out.println("Child init()");
super.init();
attribute1 = new Integer(100);
attribute2 = new Integer(200);
}
public void print(){
System.out.println("attribute 1 : " +attribute1);
System.out.println("attribute 2 : " +attribute2);
}
}
public class Tester {
public static void main(String[] args) {
Parent c = new Child();
((Child)c).print();
}
}
家长建设者
子init()
父Init()
儿童构造者
属性1:100
属性2:null
什么时候在堆中分配属性1和2的内存?
好奇地知道为什么属性2为NULL?
有设计上的缺陷吗?
什么时候在堆中分配属性1和2的内存?
整个对象的内存是在new
调用java.lang.Object
构造函数之前在调用运算符时分配的。在中为单个Integer
实例分配了内存init
,但是为单个属性分配内存(仅对整个对象)毫无意义。
好奇地知道为什么属性2为NULL?
init
在super构造函数中调用该方法,然后对其进行attribute2
分配new Integer(200)
,然后调用子类构造函数,该子类将按属性初始化程序在源代码中出现的顺序应用属性。这条线
private Integer attribute2 = null;
覆盖分配init()
给的值null
。
如果您添加呼叫
System.out.println("attribute 2 : " +attribute2);
在您致电super();
之后,这将变得显而易见。
有设计上的缺陷吗?
在基类完成初始化之前调用子类方法很危险。子类可能依赖于其基类的不变量来保护自己的不变量,如果基类的构造函数尚未完成,则其不变量可能不成立。
init
由于C
在输入构造函数时会重写vtable指针,因此这也可能会使C
程序员等人感到困惑,他们希望从基类进行调用以调用基类的版本。
有关所有详细信息,请参见Java语言规范。
本文向大家介绍tensorflow 初始化未初始化的变量实例,包括了tensorflow 初始化未初始化的变量实例的使用技巧和注意事项,需要的朋友参考一下 今日在Stack Overflow上看到一个问如何只初始化未初始化的变量,有人提供了一个函数,特地粘贴过来共大家品鉴: 通过tf.global_variables()返回一个全局变量的列表global_vars, 然后以python列表解析式的
我想了解各种情况下类实例的初始化 在JLS-7第12.5节中,没有提到如何以及何时初始化最终实例变量?如果实例变量被声明为final,是否有人能给我一点参考来理解其行为? 给出的输出如下 在哪里作为 是否将输出作为
问题内容: 我刚刚创建了一个类,并给了它一些变量。不幸的是,我无法在中访问这些变量。但是,相同的语法也可以在游乐场中使用… 问题答案: 类声明 的语法为: 您的include 声明本身不是 声明 ,而是 声明 -特别是带有infix运算符的 二进制表达式 。
问题内容: 这是一些示例代码, 输出:d.value()返回0 //我希望10是因为lookup()被覆盖,但不是0!有人可以澄清吗? 的实例变量的初始化在执行其查找方法时尚未发生。如何确保在调用其方法时初始化的实例变量? 问题答案: 首先,由于缺乏方法,该代码无法编译。 无论如何,我相信您的问题是,由于构造函数是分层运行的,您的期望是无效的。 超类的构造函数始终在子类的构造函数之前运行,这包括子
问题内容: 在我的Android应用程序中,我有一个奇怪的错误。像下面这样的实例变量在运行时意外分配给它的默认值(在这种情况下为false)。何时在Android活动中初始化此类变量? 问题答案: 创建实例时,将初始化Java中的实例变量。 大多数情况下,对象会使用实例化。 对于活动,它们由Android框架使用反射实例化(请参阅参考资料)。然后执行的初始化,并在实例上调用活动。 有关详细信息,请
问题内容: 我想知道静态变量何时初始化为其默认值。加载类时,先创建(分配)静态变量,然后执行静态初始化程序和声明中的初始化是否正确?在什么时候给出默认值?这导致前向参考的问题。 另外,如果你可以参考“ 为什么没有及时初始化静态字段?”这一问题进行解释,尤其是Kevin Brock在同一网站上给出的答案。我不明白第三点。 问题答案: 从请参阅Java静态变量方法: 它是一个属于类而不属于对象(实例)