JAVA

定义Person类

package models;
​
public class Person {
public Person() {
System.out.println("person constructor");
}
​
{
System.out.println("person init block");
}
​
static {
System.out.println("person static block");
}
}

定义Chinese类

package models;
​
public class Chinese extends Person {
public Chinese() {
// super();
System.out.println("chinese constructor");
}
​
{
System.out.println("chinese init block");
}
​
{
System.out.println("chinese init block2");
}
​
static {
System.out.println("chinese static block");
}
​
static {
System.out.println("chinese static block 2");
}
}
​

创建Chinese类实例

public class Program {
public static void main(String[] args) {
new Chinese();
}
}

输出结果如下:

person static block
chinese static block
chinese static block 2
person init block
person constructor
chinese init block
chinese init block2
chinese constructor

执行顺序为:

基类静态初始化块——当前类静态初始化块——基类初始化块——基类构造函数——当前类初始化块——当前类构造函数

⚠️ JAVA中加载类时会调用类的静态代码块

try {
Class.forName("models.Chinese");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

执行结果如下:

person static block
chinese static block
chinese static block 2

.NET

与JAVA相比,.NET中没有初始化块及静态初始化块

定义类型如下:

class Person
{
public Person()
{
Console.WriteLine("person constructor");
}
​
static Person()
{
Console.WriteLine("person static constructor");
}
}
​
class Chinese : Person
{
public Chinese()
{
Console.WriteLine("chinese constructor");
}
​
static Chinese()
{
Console.WriteLine("chinese static constructor");
}
}
​

创建对象:

class Program
{
static void Main(string[] args)
{
new Chinese();
}
}

输出结果如下:

chinese static constructor
person static constructor
person constructor
chinese constructor

执行顺序为:

当前类静态构造函数——基类静态构造函数——基类构造函数——当前类构造函数

小结

JAVA与.NET创建对象时都是先执行静态代码块后执行非静态代码块;

JAVA先执行基类中的静态及非静态代码块;

.NET先执行当前类中的静态代码块,然后先执行基类中的实例构造函数;

JAVA & .NET创建对象构造函数调用顺序的更多相关文章

  1. java初始化构造函数调用顺序

    类初始化时构造函数调用顺序: (1)初始化对象的存储空间为零或null值:  (2)调用父类构造函数:  (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式:  (4)调用本身构造函数. 例子 ...

  2. C# 构造函数调用顺序

    了解C#的一个类的加载过程,对于语言机制的理解和写出高效的语言很有帮助,这里简单介绍一下类的实例的构造函数调用过程.C#类的实例的构造过程是,先为实例的数据字段分配内存,并对所有字段按字节置零(0或者 ...

  3. C++派生类构造函数调用顺序(详解)

    我们来看下面一段代码: class B1 { public: B1(int i) {cout<<"constructing B1 "<<i<<e ...

  4. Java的默认构造函数调用

    // 注意,这里不能是 public class OOO,否则编译无法通过,需把文件命名成 OOO.java class OOO { // 注意:如果不定义OOO(),那么Shapes(int i)编 ...

  5. Java类的成员函数调用顺序

    class A { public A() { System.out.println("----------A 构造-------------"); } static void sb ...

  6. C++ 全局构造函数调用的顺序

    C++的全局类和静态类的构造函数是在main函数之前调用的.但是,不同的类的构造函数以什么顺序调用呢? 对于g++编译器来说,这个顺序是由链接时,文件顺序决定的. 我们用一个例子来说明这一点. 我们有 ...

  7. java创建对象 的初始化顺序

    java创建对象 的初始化顺序 1.初始化块 初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句: 初始化块分为instance初始化块和static初始化块,初始化 ...

  8. Java中创建对象的5种方式

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...

  9. Java多线程之构造与发布

    资料来源 http://www.ibm.com/developerworks/library/j-jtp0618/ http://www.javaspecialists.eu/archive/Issu ...

随机推荐

  1. 6 week work 1

    CSS单位 em and rem: are often used to create scalable layouts, which maintain the vertical rhythm of t ...

  2. SVN完全备份,增量备份,库同步

    svn备份一般采用三种方式:1)svnadmin dump 2)svnadmin hotcopy 3)svnsync. 优缺点分析: ============== 第一种svnadmin hotcop ...

  3. Python之旅Day12 HTML与CSS

    前端CSS与HTML部分 <a href="http://www.baidu.com" target="_Blank">百度</a>_B ...

  4. 10个经典的Java面试题集合

    这里有10个经典的Java面试题,也为大家列出了答案.这是Java开发人员面试经常容易遇到的问题,相信你了解和掌握之后一定会有所提高.让我们一起来看看吧. 1.Java的HashMap是如何工作的? ...

  5. 使用《JAVA面向对象编程》总结

    抽象和封装 现实世界是“面向对象”的,面向对象就是采用“现实模拟” 的方法设计和开发程序. 面向对象设计是目前计算软件开发中最流行的技术.面向对象设计的过程就是抽象的过程. 类是对某一类事物的描述,是 ...

  6. MySQL 报错ERROR 1054 (42S22): Unknown column 'plugin' in 'mysql.user'

    MySQL  我们在创建用户的时候,可能会遇到以下报错: ERROR 1054 (42S22): Unknown column 'plugin' in 'mysql.user' 说明mysq.user ...

  7. Oracle创建表空间创建用户和用户授权

    今天要创建一个Oracle用户,然后发现sql不太记得了,然后只能再去找找资料,发现这样效率并不是很高,所以记录成博客,有需要就直接从博客复制. 下面是我简单整理的,有需要可以参考. --创建表空间 ...

  8. Python图像处理库PIL中图像格式转换

    o 在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现.本文基于这个需求,使用python中的图像处理库PIL ...

  9. 超声波手势识别(STM32四路超声波获取)

    超声波手势识别在市场上已经有见实现,但研究其传感器发现并不是市场上随意可见的,如果暂且考虑成本,该如何入门实现简单的手势识别呢.聊天中老师给出一个很好的提议,就是固定四个超声波,分别为上下左右,然后进 ...

  10. [原创]K8 Jboss jmx-console getshell exploit

    [原创]K8 Jboss jmx-console getshell exploit https://www.cnblogs.com/k8gege/p/10645858.html 0x00 前言 今天内 ...