首页 > 技术文章 > 一段小代码的思考

jiayouwyhit 2013-11-15 11:24 原文

已经建立了一个新类:

class Virus{
    static int virusCount = 0;
    
    public Virus(){
        virusCount++;
    }
    
    static int getVirusCount(){
        return virusCount;
    }
}

  在程序中用到了上面这个类:

 1 public class VirusLab {
 2     public static void main(String[] args) {
 3     int numVirus = Integer.parseInt(args[0]);
 4     if(numVirus>0){
 5         Virus[] virii = new Virus[numVirus];
 6         for(int i = 0;i<numVirus;++i)
 7             virii[i] = new Virus();
 8     System.out.println("There are "+ Virus.getVirusCount() + " Viruses.");
 9     }
10         
11     }
12 }

重点关注以上代码中的地5,6,7行:

实验发现,在Java中,新建一个类的数组时(Line 5),并不会调用类的构造函数;但是在新建每一个类对象时(Line 7),会自动调用类的构造函数。这一点和C++好像有比较大的不同。谨记之。

C++中,凡事在用new新建类对象的地方,都会自动调用类的构造函数:

 1 #include "stdafx.h"
 2 #include <iostream>
 3 #include <string>
 4 using namespace std;
 5 
 6 class Virus
 7 {
 8 public:
 9     Virus(){
10         cout<<"empty constructor!"<<endl;
11     }    
12     Virus(string temp){
13         cout<<temp<<" constructor1!"<<endl;
14     }
15 
16     ~Virus(){}    
17 };
18 
19 

20 int main(int argc, char* argv[])
21 {
22     Virus* virii = new Virus("test");
23     cout<<endl;
24     Virus* virii2 = new Virus[4];
25 
26     return 0;
27 }

以上代码的输出为:

 

推荐阅读