C#初始化顺序

  1. 类成员变量初始化先于类的构造函数
  2. 静态成员变量先于实例变量
  3. 子类成员变量先于父类成员变量(java相反)
  4. 父类构造函数先于子类构造函数

参考实例:

using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// DriveB d = new DriveB();
DriveC f = new DriveC();
}
} class BaseA
{
static DisplayClass a = new DisplayClass("基类静态成员初始化"); DisplayClass BaseA_c = new DisplayClass("基类实例变量BaseA_c初始化"); public BaseA()
{
Console.WriteLine("基类构造方法被调用A");
}
} class DriveB : BaseA
{
static DisplayClass DriveB_b = new DisplayClass("继承类静态成员DriveB_b初始化");
//static BaseA DriveB_a = new BaseA();
DisplayClass DriveB_c = new DisplayClass("继承类实例变量DriveB_c初始化"); public DriveB()
{
Console.WriteLine("继承类构造方法被调用B");
}
}
class DriveC : DriveB
{
static DisplayClass DriveC_d = new DisplayClass("继承类静态成员DriveC_d初始化");
DisplayClass DriveC_e = new DisplayClass("继承类静态成员DriveC_e初始化");
public DriveC()
{
Console.WriteLine("继承类构造方法被调用C");
}
}
class DisplayClass
{
public DisplayClass(string diplayString)
{
Console.WriteLine(diplayString);
Console.WriteLine();
}
} }

输出结果:

继承类静态成员DriveC_d初始化

继承类静态成员DriveC_e初始化

继承类静态成员DriveB_b初始化

继承类实例变量DriveB_c初始化

基类静态成员初始化

基类实例变量BaseA_c初始化

基类构造方法被调用A
继承类构造方法被调用B
继承类构造方法被调用C

java 初始化顺序

先父类静态成员初始化,后子类静态成员初始化
然后是父类成员,父类构造函数,最后是子类成员,子类构造函数
参考实例:
class Parent {

    private static int s = getS("父类静态成员");

    private int num = getNum();

    public Parent() {
System.out.println("父类构造函数");
} private static int getS(String string) {
System.out.println(string);
return ;
} public int getNum() {
System.out.println("父类私有成员");
return num;
} public static void setS(int s) {
Parent.s = s;
} } class Child extends Parent { private int num = prt("子类私有成员"); private static int s = getS("子类静态成员"); public static void setS(int s) {
Child.s = s;
} public Child() {
System.out.println("子类构造函数");
} public void setNum(int num) {
this.num = num;
} private int prt(String string) {
System.out.println(string);
return ;
} public static int getS(String string) {
System.out.println(string);
return s;
}
} public class Tee { /**
* @param args
*/
public static void main(String[] args) {
Child c = new Child();
c.setNum(); // 为什么输出的是0
System.out.print(c.getNum());   //Child cStatic = new Child();
    //cStatic.setS(100);
    //System.out.println(cStatic.getS("s")); } }
输入结果:
父类静态成员
子类静态成员
父类私有成员
父类构造函数
子类私有成员
子类构造函数
父类私有成员

C# 与Java初始化顺序及异同(转)的更多相关文章

  1. Java初始化顺序

    package com.helei.init; class Log { public static String fatherStaticString(){System.out.println(&qu ...

  2. [转]Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数

    Java初始化顺序1在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入)2,在装载类时,先装载父类A,再装载子类B3,装载父类A后,完成静态动作(包 ...

  3. java 初始化顺序

    java 变量类型如下: 实例变量: 类变量: 初始化途经如下: 实例变量 --声明时,初始化: --非静态初始化块内,初始化: --构造函数内,初始化: 实例1: public class bean ...

  4. java 初始化顺序问题

    今天在<thinking in java>上面看了关于初始化问题,之前从来都没有深入考虑过,这次算是把它搞明白了,所以记录一下: 这个不是我看到的初始化顺序问题,在网上搜索的时候发现的,感 ...

  5. Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)

    1.执行顺序 1.1.一个类中的初始化顺序 类内容(静态变量.静态初始化块) => 实例内容(变量.初始化块.构造器) 1.2.两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)= ...

  6. 10、java初始化顺序

      在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入) 2,在装载类时,先装载父类A,再装载子类B3,装载父类A后,完成静态动作(包括静态代码和变 ...

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

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

  8. Java 类成员的初始化顺序

    Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究.   1  无继承情况下的Jav ...

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

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

随机推荐

  1. vue切换样式

    在vue中使用事件来切换绑定的class样式,在vue-cli脚手架中的Home.vue中 <template> <div id="main"> <l ...

  2. STL理论基础、容器、迭代器、算法

    一.STL基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段 ...

  3. VS软件版本号定义、规则和相关的Visual Studio插件

    http://blog.csdn.net/cnhk1225/article/details/37500593 软件版本号主要标识了软件的版本,通过其可以了解软件.类库文件的当前版本,使得软件版本控制有 ...

  4. angularJs 指令的封装

    首先 指令的应用场景: 1:使你的html更具语义化,不需要深入研究代码就可以知道页面的大概逻辑. 2:抽象出一个自定义组件,在其他的地方进行重用. 一:directive的定义及其使用方法: 下面是 ...

  5. PKU campus 2018 A Wife——差分约束?/dp

    题目:http://poj.openjudge.cn/campus2018/A 有正规的差分约束做法,用到矩阵转置等等. 但也有简单(?)的dp做法. 有一个结论(?):一定要么在一天一点也不选,要么 ...

  6. java中io的详解

    注:本文全篇转载于:http://blog.csdn.net/taxueyingmei/article/details/7697042,觉得讲的挺详细,就借过来看看,挺不错的文章. 先贴一张图 Jav ...

  7. springboot或者jetty等启动服务器后,如何去停止这个服务

    首先在win7下找到运行,但是win7的运行不像XP那么好找,win7运行的位置在:开始→所有程序→附件→运行.   然后在对话框中,输入cmd(大小写均可).   然后是如何查看80端口的方法,一般 ...

  8. java代码。从键盘输入次数。可控制的

    总结:把一碗水端平,本来水就不多. package com.b; import java.util.Scanner; //想办法用数组.一次性,多个的输出分解质因数 public class fa4 ...

  9. __cdecl & __stdcall calling conventions

    (一) __cdecl: c declaration C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈.C/C++默认的调用方式,可用于函数参数不确定的情况下. ...

  10. [原]实例-简单设计&精简代码&复用代码

    引言 本文以实际项目为例谈一谈我个人对于软件开发的理解,偏细节   软件项目B 基于.net平台,使用WPF框架,c#语言,MVVM模式开发的桌面软件 该软件支持可视化的设计器功能,允许所见即所得的方 ...