为什么一些面向对象语言中的main函数是static的

为什么一些面向对象语言中的main函数是static的

  (2009-06-26 16:13:10)
标签: 

it

 
       不知学过java以及c#的有没有产生过这样的疑问,为什么main函数会声明为static,也就是静态的!由于这些是完全面向对象编程的编程语言,所以常常会见到以下的代码段:

namespace A
{
        class B
        {
                 static void main( string[] args )
                 {
                          ....
                   }
          }
}

       我最先接触的编程语言应该是c++,虽然c++学的不怎么样,但是一个我们的建立程序工程中只能拥有一个非静态的main函数我还是记得的!为什么我这儿要加个“一个”来强调下呢?其实在java语言中,一个工程文件是允许多个.java文件中包含main 函数的!而且当你编译运行的时候,编译器会列出含有main函数的几个源文件,而决定权则是在于你选择运行哪个!而在c/c++中编译器则会跑出错误信息,因为它无法识别哪个源文件才是程序的真正的入口点,而它又不会把这个问题的决定权抛给你,所以就报错了!
       呵呵,好了,貌似跑题了!还是说说为什么main必须是static的吧(这儿指的是java C#等一类语言),虽然只是个人的愚见,但是还是拿出来和大家分享分享,不对的还请大家指出!我们知道,我们那么多代码堆砌起来的程序在运行起来,肯定需要一个入口点,而这个入口点就是main函数!由于像java这类的语言,完全以类的形式来编程,也就是代码是写在类中的!既然每次运行程序,仅会有一个main函数的实例运行,而且整个程序的生命周期伴随着main函数的结束而结束!如果还是有点明白,那再直白点,main函数不会像一般的函数,在程序运行中被多次调用,即不会产生多个副本,而static好处就是保证了单一性,并且声明为static的变量或者函数会一直驻留在内存中的直到被销毁!所以,static来修饰main函数也是大势所趋!
      
     好了,顺带再提一下,也许有的初学者会有以下的疑问(其实我也差不多是个初学者了吧,囧)!

namespace A
{
        class B
        {
                 void function()
                 {
                         ........
                 }  
              
                 static void main( string[] args )
                 {
                         function();                              //注:这句话会报错的
                         ....
                   }
          }
}

           也许大家可能会有过这样的疑问(NB的人物除外)!为什么会出错呢?那么怎么改正才不会出错呢?首先先是解释下为什么会出错,其实还是static修饰main函数所引起的!我们知道类中声明为static的函数是不属于对象的实例的,我们在static的main中直接调用function函数,其实等价于 this.function。this指的是什么?当然是指代的是B这个对象了,甚至我们可以这么写 B.function,呵呵,很明显不对了吧!所以一中改法就是直接将函数function声明为static的!
       那还有其他的改法吗?呵呵,想必学过java的都知道,直接声明个B的对象,然后直接调用去成员函数不就OK了么!也就是将 function(); 换成以下的代码:
       B b=new B();
       b.function();

       虽然是些小的细节,很基础的东西,但是还是希望大家也重视下!同时也算是自己的一次知识的巩固吧!





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值