C#的类初始化顺序和Java以及C++类初始化顺序是不同的,曾经我被这个问题害惨了。
对于C#和Java,其共同点都是先变量后构造函数,先静态后普通 
区别在于,C#是子类变量->父类变量->父类构造函数->子类构造函数,才轮到构造函数,但是Java的是父类变量->父类构造函数->子类变量->子类构造函数.

using System; 

namespace Test
{
public class A
{ private static Display d1 = new Display("基类静态变量");
private Display d2 = new Display("基类变量");
private static readonly Display d3 = new Display("基类静态readonly常量");
private readonly Display d4 = new Display("基类 readonly常量"); public A()
{
Console.WriteLine("基类 构造函数");
} } class B : A
{
private static Display d1 = new Display("子类静态变量");
private Display d2 = new Display("子类变量");
private static readonly Display d3 = new Display("子类静态readonly常量");
private readonly Display d4 = new Display("子类readonly常量"); public B()
{
Console.WriteLine("子类 构造函数");
} } /// <summary>
/// 用于显示的类
/// </summary>
class Display
{
public Display(string str)
{
Console.WriteLine(str);
}
} class programe
{
static void Main(string[] args)
{
B b = new B(); }
}
}
  1. 子类静态变量
  2. 子类静态readonly常量
  3. 子类变量
  4. 子类readonly常量
  5. 基类静态变量
  6. 基类静态readonly常量
  7. 基类变量
  8. 基类 readonly常量
  9. 基类 构造函数
  10. 子类 构造函数

而对于java呢,源码如下:

package com.vision.paintTest; 

class A { 

    private static Display d1 = new Display("基类静态变量");
private Display d2 = new Display("基类变量");
private static final Display d3 = new Display("基类静态final常量");
private final Display d4 = new Display("基类 final常量"); public A() {
System.out.println("基类 构造函数");
} } class B extends A {
private static Display d1 = new Display("子类静态变量");
private Display d2 = new Display("子类变量");
private static final Display d3 = new Display("子类静态final常量");
private final Display d4 = new Display("子类final常量"); public B() {
System.out.println("子类 构造函数");
} } class Display {
public Display(String str) {
System.out.println(str);
}
} public class Mytest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
B b = new B();
} }

  

结果如下:

  1. 基类静态变量
  2. 基类静态final常量
  3. 子类静态变量
  4. 子类静态final常量
  5. 基类变量
  6. 基类 final常量
  7. 基类 构造函数
  8. 子类变量
  9. 子类final常量
  10. 子类 构造函数

C# 类初始化顺序的更多相关文章

  1. java类初始化顺序

    一.概述 了解类的初始化顺序,可以更灵活.方便的构造一个类. 二.类初始化顺序 2.1 示例 public class InitialOrderTest { public static void ma ...

  2. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...

  3. Android(java)学习笔记136:Java类初始化顺序

    Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论:     1 .继承体系的所有静态成员初始化( ...

  4. 【知识总结】Java类初始化顺序说明

    微信公众号:努力编程的小猪如有问题或建议,请公众号留言 Java类初始化顺序说明 一个类中包含如下几类东西,他们前后是有顺序关系的 静态属性:static 开头定义的属性 静态方法块: static ...

  5. Android(java)学习笔记78:Java类初始化顺序

    1. Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: (1)静态变量 (2)静态初始化块 (3)变量 (4)初始化块 (5)构造器 由此得出Java继承类初始化顺序结论: (1)继 ...

  6. 转!!关于java类初始化顺序

    原文地址:http://www.cnblogs.com/luckygxf/p/4796955.html 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方 ...

  7. C++——类继承以及类初始化顺序

    对于类以及类继承, 几个主要的问题:1) 继承方式: public/protected/private继承. 这是c++搞的, 实际上继承方式是一种允许子类控制的思想. 子类通过public继承, 可 ...

  8. Java类初始化顺序,大神3个示例带你躺坑。。

    最近发现微信群里面有些群友在讨论类的初始化顺序,如类的静态变量.成员变量.静态代码块.非静态代码块.构造器,及继承父类时,它们的初始化顺序都是怎样的,下面我通过例子来说明这个情况,以免被人误导. 示例 ...

  9. java和C#实例化类初始化顺序

    c# 初始化顺序 子类的静态字段 子类的静态构造方法 子类的实例字段 父类的静态字段 父类的静态构造方法 父类的实例字段 父类的实例构造方法 java 初始化顺序 初始化过程: 1. 初始化父类中的静 ...

随机推荐

  1. 输出tuple和chrono的使用小例子

    // move example #include <iostream> // std::cout #include<tuple> #include<ratio> # ...

  2. 【Python编程:从入门到实践】chapter8 函数

    chapter8 函数 8.6 将函数存储在模块中 8.6.1 导入整个模块 要让函数是可导入的,的先创建模块.模块 的扩展名为.py的文件 import pizza 8.6.2 到导入特定的函数 f ...

  3. spark 多语言编程

    参考官方地址:https://spark.apache.org/docs/1.6.2/programming-guide.html 误解: spark多语言的支持,并不是说spark可以操作各个语言写 ...

  4. solr亿万级索引优化实践(四)

    本篇是这个系类的最后一篇,但优化方案不仅于此,需要后续的研究与学习,本篇主要从schema设计的角度来做一些实践. schema.xml 这个文件的作用是定义索引数据中的域的,包括域名称,域类型,域是 ...

  5. Sass、Less编译器koala及koala不支持中文字体的解决方法

    一款很好用的Sass编译器,还可以编译Less.coffeescript等 去官网下载适合自己电脑的版本 http://koala-app.com/index-zh.html 打开后拖动或者打开项目目 ...

  6. foreach的使用

    //foreach循环语句,常用来遍历数组,一般有两种使用方法:不取下标,取下标 //不取下表 foreach(数组 as 值) { //执行的程序 echo 值; } //取下标 foreach(数 ...

  7. selenium+python自动化90-unittest多线程执行用例

    前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时... 那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线 ...

  8. 2017-2018-2 20165233 实验三 敏捷开发与XP实践

    20165233 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 一.编码标准 编程标准包含:具有说明性的名字.清晰的表达式.直截了当的控制流.可读的代码和注释,以及 ...

  9. localhost 127.0.0.1

    No1: localhost也叫local ,正确的解释是:本地服务器 127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器) 他们的解析通过本机的host文件,windows自 ...

  10. 19.OGNL与ValueStack(VS)-OGNL入门

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 下面我们在com.asm.vo.User类中增加一个字段private Ad ...