class B {
B() {
System.out.println("B");
go();
}
private int a=1;
public void go(){
System.out.println("a="+a);
}
}
public class A1 extends B {
A1() {
System.out.println("A1");
}
private int a=11;
public void go(){
System.out.println("a="+a);
}
public static void main(String[] args) {
new A1();
}
}
以上代码输出结果为:
B
a=0
A1
我当时以为是输出a=11,结果回来跑了一把代码后,发现为0,即:先执行A1这时只是申明变量,并没赋值,然后执行B(),这时获取到a是A1里的,但还是初始值0呢,所以输出0.
后来经资料官方的解释为:对类变量的初始化是在执行完其构造方法的第一行代码(即this或super)后才开始的。
以下代码可以证实:
class B {
B() {
final B b=this;
go();
new Thread() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
b.go();
}
}.start();
}
public void go(){
}
}
public class A1 extends B {
A1() {
System.out.println("aa");
go();
}
private int a=11;
public void go(){
System.out.println("a="+a);
}
public static void main(String[] args) {
new A1();
}
}
输出结果为:
a=0
aa
a=11//这个是23行输出的
a=11//这个是12行输出的,由于另起了线程,所以在输出的时候已经执行完了构造方法
分享到:
相关推荐
java面试题-类的初始化顺序.doc 大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,...
- 空指针和未初始化的指针有什么区别? - 野指针是什么?如何避免? - 如何使用指针交换两个变量的值? 3. **内存管理** - C语言中动态内存分配的函数有哪些? - `malloc` 和 `calloc` 有什么区别? - 什么是...
byte属于Java中的整型,长度为1字节8bit,取值10000000(-128)到 01111111(127),变量初始化默认值为0,包装类Byte 2.short short属于Java中的整型,长度为2字节16bit,取值10000000 00000000(-32768)到 ...
系统会初始化static int变量为0,但该值会一直保存,所谓的不可重入... -------------------------------------------------------------------------- 13.写出运行结果: {// test1 char str[] = "world"; cout (str...
static 局部变量只被初始化一次,下一次依据上一次结果值。static 函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。 六、内存分配 程序的局部变量存在于堆栈中,全局变量存在于静态区中,动态申请数据...
JAVA面试题解惑系列(一)——类的初始化顺序 大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行...
C++ 成员变量的初始化顺序问题详解 问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void Print(){ cout <&...
以下是对java变量初始化的时机的分析。 【java变量执行初始化的步骤】 java是一门强类型语言,因此java语言规定每个变量必须先声明,然后才能使用,声明变量时必须指定该变量的数据类型。首先看下面这条语句的...
本文提供了二十道常见的面试题,涵盖了Java中的基本数据类型、引用数据类型、作用域、初始化等方面的知识点。这些问题旨在考察候选人对Java变量类型的理解和应用能力。通过阅读本文,您将能够加深对Java变量类型的...
1.1 JAVA面试题解惑系列(一)——类的初始化顺序 1.2 JAVA面试题解惑系列(二)——到底创建了几个String对象? 1.3 JAVA面试题解惑系列(三)——变量(属性)的覆盖 1.4 JAVA面试题解惑系列(四)——final、...
如果修饰的是引用类型数据变量,则该变量不会再次初始化。 static 修饰的方法是否可以被继承 static 修饰的方法为静态方法,不能被重写,可以被继承。它可以直接使用类名.方法名进行调用,即该方法不属于某个对象...
1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与...
C语言面试题大全 1.限制变量的作用域(DL:使其只在定义的当前文件中起作用,static是只能由与变量在同一个文件中定义的程序 存取的全局变量。也就是说使全局变量成为文件的私有变量,以致其他文件不可以通过将它们...
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字...
1.1 类的初始化过程 要创建一个类的实例,必须加载和初始化该类。 main()方法所在的类,会被优先加载并初始化 子类初始化前,会先加载并初始化它的父类 初始化一个类,其实质上就是执行了()方法 ()方法包含了,静态...
static局部变量只被初始化一次,下一次依据上一次结果值;static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。 8、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在...
Vue经典面试题_227题(部分题没答案).pdf_前端面试题 MVVM 模式 MVVM 模式是 Model-View-ViewModel 的缩写,代表一种设计思想。Model 层代表数据模型,也可以在 Model 中定义数据修改和操作的业务逻辑;View 代表 ...
面试题 面试题1:变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义,不分配地址的称为...说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间, 如外部变量。
华为 1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外)...最新的统计华为面试题.无论面试还是学习指导都具有重要意义.
静态变量和静态方法的意义,如何引用一个类的静态变量或者静态方法? 50.JAVA语言如何进行异常处理,关键字:thorws,throw,try,catch,finally 51.Object类(或者其子类)的finalize()方法在什么情况下被调用? 52....