java与c# 对象初始化的区别

首先看下c#

 1 class Program
2 {
3 static void Main(string[] args)
4 {
5 new Child();
6 }
7 }
8
9
10 class Faher
11 {
12 public static Test FSTest = new Test("基类静态成员");
13
14 public Test FTest=new Test("基类实例成员");
15
16 static Faher()
17 {
18 Console.WriteLine("基类静态构造函数");
19 }
20
21 public Faher()
22 {
23 Console.WriteLine("基类构造函数");
24 }
25
26 }
27
28 class Child : Faher
29 {
30 public static Test CSTest =new Test("子类静态成员");
31
32 public Test CTest=new Test("子类实例成员");
33
34 static Child()
35 {
36 Console.WriteLine("子类静态构造函数");
37 }
38
39 public Child()
40 {
41 Console.WriteLine("子类构造函数");
42 }
43 }
44
45
46 //用于做成员的类
47 class Test
48 {
49 public Test(string info)
50 {
51 Console.WriteLine(info);
52 }
53 }

程序结果:

子类静态成员
子类静态构造函数
子类实例成员
基类静态成员
基类静态构造函数
基类实例成员
基类构造函数
子类构造函数


再来看看java的

 1 public class Show 
2 {
3 public static void main(String[] args)
4 {
5 new Child();
6 }
7 }
8
9 class Father
10 {
11 public static Test FSTest=new Test("基类静态成员");
12
13 public Test FTest=new Test("基类实例成员");
14
15 public Father()
16 {
17 System.out.println("基类构造函数");
18 }
19
20 static
21 {
22 System.out.println("基类静态块");
23 }
24 }
25
26 class Child extends Father
27 {
28 public static Test CSTest=new Test("子类静态成员");
29
30 public Test CTest=new Test("子类实例成员");
31
32 public Child()
33 {
34 System.out.println("子类构造函数");
35 }
36
37 static
38 {
39 System.out.println("子类静态块");
40 }
41
42 }
43
44
45 //用于做成员的类
46 class Test
47 {
48 public Test(String info)
49 {
50 System.out.println(info);
51 }
52 }

程序结果:

基类静态成员
基类静态块
子类静态成员
子类静态块
基类实例成员
基类构造函数
子类实例成员
子类构造函数


由于以上的程序可以看出

c#初始化顺序为

子类静态成员-->子类静态构造函数-->子类实例成员-->基类静态成员-->基类静态构造函数-->基类实例成员-->基类构造函数-->子类构造函数

java初始化顺序为

基类静态成员-->基类静态块-->子类静态成员-->子类静态块-->基类实例成员-->基类构造函数-->子类实例成员-->子类构造函数

 

总结一下:

c#创建对象的时候会为先初始化子类各成员再初始化基类各成员静态成员(而静态成员总先于实例成员),java创建对象是总是先初始化基类静态成员和子类静态成员,然后才是基类实例成员和子类实例成员,c#和java最后是先调用基类构造函数最后调用子类构造函数

要点:

1 c#先子后基,java先基后子

2 静先于实

3 先基构后子构

 

 

posted on 2011-12-22 11:35  穆穆  阅读(651)  评论(0)    收藏  举报