已经建立了一个新类:
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 }
以上代码的输出为: