在类的内部,成员变量定义的先后顺序决定了初始化的顺序,其中,先初始化静态变量(或者对象),再初始化非静态变量(或者对象)。
在new 出一个对象时,必定是先初始化成员变量,成员变量包括基本数据类型和引用对象,然后再执行构造器。
静态初始化只在Class对象首次加载的时候进行一次。
下面的程序说明了这一点(故意打乱了编码的顺序,实际开发中,还得要按正常的编码顺序来写)
package com.thinkingInJava;
public class StaticInitialzation {
static Table table = new Table();
static Cupboard cupboard = new Cupboard();
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Creating new Cupboard in main");
new Cupboard();
System.out.println("Creating new Cupboard in main");
new Cupboard();
table.f2(1);
cupboard.f3(1);
}
}
class Bowl{
Bowl(int marker){
System.out.println("Bowl" + marker);
}
void f1(int marker){
System.out.println("f1(" + marker + ")");
}
}
class Table{
static Bowl bowl1 = new Bowl(1);
Table(){
System.out.println("Table()");
bowl2.f1(1);
}
void f2(int marker){
System.out.println("f2(" + marker + ")");
}
static Bowl bowl2 = new Bowl(2);
}
class Cupboard{
Bowl bowl3 = new Bowl(3);
static Bowl bowl4 = new Bowl(4);
Cupboard(){
System.out.println("Cupboard()");
bowl4.f1(2);
}
void f3(int marker){
System.out.println("f3(" + marker + ")");
}
static Bowl bowl5 = new Bowl(5);
}
输出:
Bowl1
Bowl2
Table()
f1(1)
Bowl4
Bowl5
Bowl3
Cupboard()
f1(2)
Creating new Cupboard in main
Bowl3
Cupboard()
f1(2)
Creating new Cupboard in main
Bowl3
Cupboard()
f1(2)
f2(1)
f3(1)
分享到:
相关推荐
delegate 委托 匿名方法 自动属性 集合初始化器 类初始化器 委托方法
03_JavaSE面试题:类初始化和实例初始化等
java面试题-类的初始化顺序.doc 大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,...
Kotlin 1.3 案例集锦第五章 登录渐变动画类初始化
类的初始化顺序,适用于任何一种面向对象的语言。真正了解面向对象的程序的流程。配有实例
实例初始化过程:实例初始化就是执行()方法:()方法可能重载有多个,有几个构造器就有几个方法()方法由非静态实例
对java类初始化以及顺序,详解,由于转载仅供大家参考!
类继承的初始化顺序类继承的初始化顺序类继承的初始化顺序类继承的初始化顺序
所有构造方法执行顺序如下: 执行父类的构造方法。没有继承默认继承的Object。... // 单独一行的初始化算一个代码块,这个是初始化a的代码块 private String a = "hello"; // 这个只是声明变量,并b不算代码块
Java 的初始化问题和其他高级语言类似。一个明显不一样的地方是体现在它的类加 载过程。传统的编程语言包括C++等,...Sun 公司说类初始化的时机是“initialize on first actice use”, (在首次主动使用时初始 化)。
注意:本文所说的全局变量指的是 variables with static storage,措词来自 c++ 的语言标准文档。 什么时候初始化 ... static initialization: 静态初始化指的是用常量来对变量进行初始化,主要包括 zero init
ButterKnife的demo实现,注解清晰,实现控件初始化,事件注入
C语言的各种初始化(基础类)C语言的各种初始化(基础类)C语言的各种初始化(基础类)C语言的各种初始化(基础类)
主要介绍了Java类初始化和实例化中的2个“雷区”,大家要注意,感兴趣的小伙伴们可以参考一下
当我们一个系统既需要mysql驱动,也需要oracle驱动的时候,在并发加载初始化这些驱动类的过程中产生死锁的可能性非常大,下面是一个模拟的例子,对于Thread2的实现其实是jdk里java.sql.DriverService的逻辑,也是...
java 数组初始化 详解 doc
C++ 基本知识 - 类定义、初始化、析构 本文将对 C++ 中的类定义、初始化和析构进行详细的阐述。 1.1 类的定义 在 C++ 中,类是一种新的数据类型,而对象是具有这种类型的变量。类就是对同类对象的属性和行为进行...
Revit外部工具无法初始化附加模块的解决方法 大家在安装完Revit或者卸载后重装Revit时是否遇到外部工具无法初始化附加模块的问题,每次打开不停的弹出对话框,烦得要死。 无法初始化附加模块“CollaborateDB”,...
编程思想的第十四章,代码,本人亲测通过后才上传的 这段是介绍编程思想14章构造函数初始化表达式表