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. 树结构之JavaScript

    对于数据结构“树”,想必大家都熟悉,今儿,我们就再来回顾一下数据结构中的二叉树与树,并用JavaScript实现它们. ps:树结构在前端中,很多地方体现得淋漓尽致,如Vue的虚拟DOM以及冒泡等等. ...

  2. 6、SpringMVC源码分析(1):分析DispatcherServlet.doDispatch方法,了解总体流程

    所有的http请求都会交给DispatcherServlet类的doDispatch方法进行处理,将DispatcherServlet.doDispatch函数的javadoc复制到下面: /* * ...

  3. XE6 HTML设计器

    XE6 自带的HTML编辑器很好用 File>New>Other>Web Documents>HTML Page 自动有code和Design,在Design标签可以拖放控件 ...

  4. 程序员必看:给你一份详细的Spring Boot知识清单

    在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架.或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用.因而Spring Boot应用本质上就是一个基于Sp ...

  5. gevent 实现io自动切换,gevent.join([]), gevent.spawn, 爬虫多并发的实现

    gevent 是一个第三方库,可以很容易的实现遇到io(文件传输)操作时,程序自动跳转到下一个程序 例一: 用gevent.sleep()  来模拟io操作 import gevent def foo ...

  6. as3 优化

    1 代码写法 1 定义局部变量 定义局部变量的时候,一定要用关键字var来定义,因为在Flash播放器中,局部变量的运行速度更快,而且在他们的作用域外是不耗占系统资源的.当一个函数调用结束的时候,相应 ...

  7. eclipse 和 javaClass

    eclipse 如果设置为 Build automaticaly 会自动对当前的类进行编译,放在项目下的bin文件夹下. 1. 如果此Class有错,则编译后的Class不能用,里面仅仅写会抛出异常代 ...

  8. 基于OpenGL编写一个简易的2D渲染框架-10 重构渲染器-Pass

    Pass,渲染通路,一个渲染通路指的是一次像素处理和一次顶点处理,也就是指的是一次绘制.简单来说就是顶点数据在渲染管线中走一遍最后绘制. 渲染粒子系统的粒子时,需要开启 OpenGL 的混合模式,并使 ...

  9. Linux下类似windows下_beginthread和_endthread 的多线程开发

    在 windows下头文件中包含 #include<process.h> 就可以使用_beginthread进行线程创建.个人感觉挺方便的. 在linux下类似于_beginthread ...

  10. ios push local notification

    UILocalNotification* localNotification = [[UILocalNotification alloc]init]; localNotification.alertB ...