Java 与 C++ 中的Static

3 篇文章 0 订阅

static -- 静态关键字,在C++与Java之中都很常见。既可以用来修饰变量,也可以用来修饰方法(method in Java)和函数(function in C++).

static 通常是伴随着面向对象才会使用,即在程序定义了类。在类中使用static关键字,无论是方法还是变量,都是属于这个类,而不独属于对象(object)。也就是说,即是一个对象都没有声明,静态变量和方法就已经存在了。通常,当所有类都要使用同一个变量时,就需要静态变量。

不如先说静态方法。静态方法只对静态变量有权限(access),而不能使用类中一般变量和非静态的类中其他方法。原因在于,类中的非静态变量/方法需要有具体对象存在才能使用。而静态方法并不依赖于对象。假设这样的情境,没有一个对象,而使用了静态方法,并尝试去操纵非静态变量,自然会出现错误。为避免这种情况,限定静态方法只对静态变量有权限。相反,非静态方法则对静态&非静态变量都有权限。此外,值得注意的是,this关键字必须要依赖具体对象而存在,因此在静态函数中尝试使用this将导致编译错误。

再来说静态变量的使用。在C++中,使用某一类的静态变量,可以直接用 类名:: 的形式,也可以初始化一个对象,通过 对象名.  的形式。当然写一个access函数也是可以的。在java中,同样可以使用对象名. 或者access函数的方式。不同的是,如果直接使用类名,则是用 类名. 的方式。Anyway,Java中是没有::这样的符号的。比如 Math.PI ,就是以这种方式来调用静态变量PI。当然,我想PI 至少也是final的。

static在两种语言里的差异还不止于此。C++中的static比较tricky。C++认为静态变量不属于任何一个对象,因此尽管在类中声明,其定义却必须在任何对象之外。也就是说,还得在类外定义(define)静态变量。举例来讲,我们有个Employee class

class Employee{
     ......
     static int numEmployees ;   // declaration
 }  
 int Employee::numEmployees = 0;  //define here

当然了,细究起来说,static在类中声明时最好应该设定为private,并且使用一个静态access函数来获取之。

而在Java中,则可以直接在类中声明并初始化(即使不初始化也会默认初始化),无须在类外再做定义。Java中还有static import之说,用来获取别的package中的静态变量或者接口,并且,在使用时无须在加上类的名字和 .(dot)号。

import static java.lang.Math.*;
public class test{
     public static void main(String[] args){
      System.out.printf("sqrt(PI) = %.3f%n",sqrt(PI));  // here sqrt and PI are both static 
     }
}
注意到,Java中的main函数就是静态的。个人愚见,Java是OO程度很高的语言,然而应用中难免会需要面向过程语言的便利。个人使用感觉是,静态函数像是一种妥协,当你需要自己写一些独立于一般class的函数时,就需要静态函数。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值