`
acen.chen
  • 浏览: 157366 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java笔试必考题(一)类的初始化顺序

阅读更多

(一)类的初始化顺序
关键字: java 面试题 初始化 发布时间:2008-06-26
作者:臧圩人(zangweiren)
网址:http://zangweiren.iteye.com
>>>转载请注明出处!<<<
大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的
关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某
种运算,另外还有一些将变量值输出到控制台的代码,然后让我们判断输出的结果。这实际
上是在考查我们对于继承情况下类的初始化顺序的了解。
我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化
顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下
面的测试代码来验证这一点:
Java 代码
public class InitialOrderTest {
// 静态变量
public static String staticField = "静态变量";
// 变量
public String field = "变量";
// 静态初始化块
static {
System.out.println(staticField);
System.out.println("静态初始化块");
}
// 初始化块
{
System.out.println(field);
System.out.println("初始化块");
}
// 构造器
public InitialOrderTest() {
System.out.println("构造器");
}
public static void main(String[] args) {
new InitialOrderTest();
}
}
运行以上代码,我们会得到如下的输出结果:
1. 静态变量
2. 静态初始化块
3. 变量
4. 初始化块
5. 构造器
这与上文中说的完全符合。那么对于继承情况下又会怎样呢?我们仍然以一段测试代码来获
取最终结果:
Java代码 :
class Parent {
// 静态变量
public static String p_StaticField = "父类--静态变量";
// 变量
public String p_Field = "父类--变量";
// 静态初始化块
static {
System.out.println(p_StaticField);
System.out.println("父类--静态初始化块");
}
// 初始化块
{
System.out.println(p_Field);
System.out.println("父类--初始化块");
}
// 构造器
public Parent() {
System.out.println("父类--构造器");
}
}
public class SubClass extends Parent {
// 静态变量
public static String s_StaticField = "子类--静态变量";
// 变量
public String s_Field = "子类--变量";
// 静态初始化块
static {
System.out.println(s_StaticField);
System.out.println("子类--静态初始化块");
}
// 初始化块
{
System.out.println(s_Field);
System.out.println("子类--初始化块");
}
// 构造器
public SubClass() {
System.out.println("子类--构造器");
}
// 程序入口
public static void main(String[] args) {
new SubClass();
}
}
运行一下上面的代码,结果马上呈现在我们的眼前:
1. 父类--静态变量
2. 父类--静态初始化块
3. 子类--静态变量
4. 子类--静态初始化块
5. 父类--变量
6. 父类--初始化块
7. 父类--构造器
8. 子类--变量
9. 子类--初始化块
10.子类--构造器
现在,结果已经不言自明了。大家可能会注意到一点,那就是,并不是父类完全初始化完毕
后才进行子类的初始化,实际上子类的静态变量和静态初始化块的初始化是在父类的变量、
初始化块和构造器初始化之前就完成了。
那么对于静态变量和静态初始化块之间、变量和初始化块之间的先后顺序又是怎样呢?是否
静态变量总是先于静态初始化块,变量总是先于初始化块就被初始化了呢?实际上这取决于
它们在类中出现的先后顺序。我们以静态变量和静态初始化块为例来进行说明。
同样,我们还是写一个类来进行测试:
Java 代码
public class TestOrder {
// 静态变量
public static TestA a = new TestA();
// 静态初始化块
static {
System.out.println("静态初始化块");
}
// 静态变量
public static TestB b = new TestB();
public static void main(String[] args) {
new TestOrder();
}
}
class TestA {
public TestA() {
System.out.println("Test--A");
}
}
class TestB {
public TestB() {
System.

分享到:
评论

相关推荐

    java笔试题加答案(单选,多选,判断,简答)

    以上知识点仅是Java笔试题中的一部分,实际考试可能还会涉及JDBC数据库连接、Spring框架、JavaFX图形界面、并发编程高级特性等。对于简答题,可能会要求解释某些概念、分析代码或设计简单的程序解决方案。准备Java...

    java笔试试题及答案(选择题)

    - 解释:局部变量前加上`final`关键字意味着该变量一旦被初始化就不能被再次赋值。`i1`是在方法内部定义的`final`变量,尝试对其进行赋值会导致编译错误。 11. **多态与类型转换** - 正确选项:`d) 第四行` - ...

    历年计算机二级java笔试试题及答案

    ### 历年计算机二级Java笔试知识点解析 #### 数据的存储结构定义 - **知识点**:数据的存储结构,指的是数据元素在计算机中的存储方式及其相互之间的逻辑关系的表现形式。它不仅包括数据元素本身占据的空间,还包括...

    Java笔试题Java笔试题

    在标题和描述中反复提到的“Java笔试题”暗示了这份文档是针对Java编程语言的考试准备资料。这可能包含了常见的面试问题、编程挑战或理论知识测试,旨在帮助求职者或学习者提高他们对Java的理解和应用能力。 ### 2....

    java笔试题目及答案

    以下是一些可能在Java笔试中出现的知识点,并附带解答,以帮助你更好地准备这类考试。 1. **Java基础** - **数据类型**:Java有八种基本数据类型,包括整型(byte, short, int, long)、浮点型(float, double)、...

    java各公司笔试题集合

    为了在众多求职者中脱颖而出,熟悉各类公司的Java笔试题是非常重要的。这个压缩包文件“java各公司笔试题集合”显然包含了多个公司在招聘Java程序员时可能会用到的试题,涵盖了基础理论、代码纠错和编程题目等多个...

    应聘Java笔试时可能出现问题及其答案

    - 构造器的执行顺序通常会涉及继承关系中的初始化顺序。在上述例子中,先执行父类`FatherClass`的构造器,然后执行子类`ChildClass`的构造器。因此,输出结果是: ``` FatherClass Create FatherClass Create ...

    东华理工java试题

    - 假设`a`是一个已初始化的数组,`i`的初始值为1,则执行`a[i++] = a[i++] + 2`时,首先`i`的值为1,所以操作的是`a[1]`。 - 接下来`i`自增为2,但由于第二次`i++`发生在赋值表达式的右侧,故实际操作的仍然是`a[1...

    java软件工程师考试笔试题2012

    Java软件工程师笔试题通常涵盖了Java语言的基础语法、面向对象特性、异常处理、数据类型、类与接口、集合框架、多线程、IO流、网络编程等多个方面。以下是一些基于题目内容的知识点详解: 1. **标识符合法性**:在...

    2010年9月计算机等级考试二级Java笔试真题.doc

    4. **数组与集合**:学习一维和多维数组的声明、初始化和操作。同时,要掌握ArrayList、LinkedList、HashSet、HashMap等集合框架的使用。 5. **字符串处理**:熟悉String类的常用方法,如substring、indexOf、...

    Jsp试题 Java程序员考试试题

    【JSP(Java Server Pages)试题与Java程序员考试试题详解】 ...在Y2JAVA笔试测试V4.2这样的练习资料中,考生可以找到各种类型的题目,以检验自己对JSP及相关概念的掌握程度,并通过反复操练来巩固知识。

    JAVA笔试题

    在这篇文章中,我们将深入探讨Java笔试题中的常见知识点,帮助你更好地准备这类考试。 1. **Java基础** - **数据类型**:包括基本数据类型(如int、char、float)和引用数据类型(如类、接口、数组)。 - **变量*...

    125条常见的java面试笔试题大汇总 java

    对于那些寻求提升技术能力或者准备Java相关考试的人来说,"125条常见的Java面试笔试题大汇总.doc"文档应该是一个宝贵的资源,它包含了大量的实际问题和解答,可以帮助考生巩固和深化上述知识点的理解。

    亚信科技笔试题-部分有答案

    Java 字符串(String)初始化及内存分配 - **字符串字面量与新创建的区别:** - `String str = new String("abc");`:这种方式创建的字符串,“abc”会首先被存储在常量池中(如果“abc”不存在于常量池),然后...

    JAVA数据库笔试题复习资料在最后.doc

    这份文档标题为"JAVA数据库笔试题复习资料在最后.doc",显然是一份针对Java编程语言和数据库知识的考试复习资料。描述中没有提供额外信息,所以我们将直接基于标签"考试"以及部分内容进行知识点的详细说明。 1. **...

    java工程师笔试题.pdf

    构造器(Constructor)是在创建对象时执行的方法,它与类同名,但并非每个类都必须有一个构造器,一个类可以有多个构造器,供不同初始化需求使用。第三题答案是C。 4. **数据库访问**: 提供Java存取数据库能力的...

    大学Java复习考试

    - 构造方法用于初始化类的实例变量,可以用来赋值,但不仅仅是赋值。 - 对象一旦创建,立即占据内存空间。 - 访问权限修饰符(如`public`, `private`, `protected`, `default`)在定义变量和方法时是必要的,用于...

Global site tag (gtag.js) - Google Analytics