不开编译器,不看答案看你是否能看出代码的运行结果:
class A
{
public A(){
System.out.println("A的无参构造方法!");
}
}
class B
{
public B(){
System.out.println("B的无参构造方法!");
}
}
class C
{
public C(){
System.out.println("C的无参构造方法!");
}
}
public class Test extends A
{
static{
System.out.println("Test的静态代码块");
}
private static B b;
private C c;
public Test(){
System.out.println("Test的无参构造方法");
}
public static void main(String args[]){
Test test = new Test();
}
}
运行结果是:
D:\>java Test
Test的静态代码块
A的无参构造方法!
Test的无参构造方法
怎么样!?你做对了吗??
我们再修改下代码,看这次你能否做对:
class A
{
public A(){
System.out.println("A的无参构造方法!");
}
}
class B
{
public B(){
System.out.println("B的无参构造方法!");
}
}
class C
{
public C(){
System.out.println("C的无参构造方法!");
}
}
public class Test extends A
{
static{
System.out.println("Test的静态代码块");
}
private static B b = new B();
private C c = new C();
public Test(){
System.out.println("Test的无参构造方法!");
}
public static void main(String args[]){
Test test = new Test();
}
}
执行结果是:
D:\>java Test
Test的静态代码块
B的无参构造方法!
A的无参构造方法!
C的无参构造方法!
Test的无参构造方法!
你做对了吗?细心的你应该已经发现第二次代码和第一次代码执行结果不同是因为在第一代码里我们只是声明了成员变量b,c而没有初始化。
通过这个例子你是否明白了对象实例化时的执行顺序呢:
实例化静态成员变量执行静态代码块(实例化静态成员变量和执行静态代码块的顺序按代码编写顺序而定)-->实例化父类对象-->实例化非静态成员变量-->执行构造方法
欢迎大家修改补充!!!
分享到:
相关推荐
“礼让”原则学习Java对象初始化顺序
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,网上关于Java中对象初始化顺序的文章很多,这篇文章我们将详细介绍Java中对象初始化顺序。有需要的可以参考学习。
主要介绍了c#对象初始化顺序,实例分析了C#对象初始化的相关使用技巧与调用顺序,需要的朋友可以参考下
本篇文章介绍了,Java对象初始化顺序的使用。需要的朋友参考下
以下这段小程序对调用对象构造函数时,父类构造函数、成员变量初始化函数,以及非静态初始化块调用顺序进行验证,不考虑静态成员及静态初始化块
本篇文章介绍了,Java对象初始化顺序的使用。需要的朋友参考下
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
今天用了jmock对进行单元测试编码,发现一个比较奇怪的语法,static使用方法,见下面例子
java对象的初始化顺序[参考].pdf
类的初始化顺序,适用于任何一种面向对象的语言。真正了解面向对象的程序的流程。配有实例
2.缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空 3.创建一个对象时,系统自动调用构造函数 析构函数 1.析构函数没有参数,也没有返回值。不能重载,也...
类对象的构造顺序是这样的: 1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员 2.进入构造函数后在构造函数中执行一般计算 1.类里面的任何成员变量在定义时是不能初始化的。 2.一般的数据成员可以在...
memset初始化std::string对象时,按字节顺序将std::string对象所在空间清零,破坏了std::string对象的成员结构,使Myroxy指针资源变为野指针,操作其迭代器会出现不可预知的异常,在存储字符串时可能分配了不必要的...
对象创建和初始化过程3.1 new对象底层字节码指令分析3.2 对象初始化过程详解【重点】3.2.2 实例变量初始化顺序分析3.2.3 继承中实例变量初始化顺序四 类实例化顺序总结4.1 类初始化阶段4.2 对象的创建和初始化阶段...
本文对Java如何执行对象的初始化做一个详细深入地介绍。有需要的小伙伴们可以参考。
分析java对象初始化顺序,对于java初学者来说非常有用。
(3)任何成员对象的构造函数按照它们声明的顺序调用; (4)类自己的构造函数。 #include using namespace std; class OBJ1 { public: OBJ1(){ cout <<OBJ1 ; } }; class OBJ2 { public: OBJ2...
如果为对象:这些对象会按顺序初始化。 ※在所有类成员初始化完成之后,才调用本类的构造方法创建对象。 构造方法的作用就是初始化。 (2) 静态对象的初始化 程序中主类的静态变量会在main方法执行前...
java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序