static vs non-static

static与non-static的区别。可以这样理解。

某个对象的特性分为类特性与实例特性。类特性是与类相关的。如

class Student{
static int numberOfStudent;
........
}

这里numberOfStudent是学生数。是与Student类相关的一个数据。
而实例特性是每个对象本身自己的特性。如:

class Student{
int number;
String name;
........
}

这里的number(学号),name(姓名)。是与每个对象自身相关的。

static与non-static是对立的。static应当(注意是应当)使用类名来引用。而non-static必须(是必须)使用对象实例名来引用。

static与non-static在引用数据成员方面的差别:因为static、non-static的数据相关性,static只能引用类的static数据成员;而non-static既可以引用类的static数据成员,也可以引用对象自身的数据。

static与non-static method在overload方面是一样的。

而static与non-static method在override方面则完全不同。static方法是与类相关的,不是通过this引用的,所以它不能被override。其引用在编译期就得确定。而non-static方法才有可能被override。

static与abstract,它们不能同时用于修饰一个方法。因为abstract的语义就是说这个方法是多态方法,需要subclass的实现。而static方法则是在本类中实现的,编译期绑定,不具有多态行为。

static与interface,interface中的method也不能是static的。理由同上。但其数据成员 [color=orange][b]are all static, no matter you mark it static or not [/b][/color]。

多态只限于方法,所以,无论static还是non-static的成员变量,引用的是哪个在编译期就已经确定。

[补充]
static与final。在C与C++中经常在函数与全局里面使用static变量。它的语义与Java里面static的语义已经不同。C与C++中 static的语义是,“其生命期不依赖于该函数作用域,而其作用域(可引用该变量的范围)仅限于该函数作用域。在函数第一次执行时被初始化,当函数返回时其值依然存在。”
而Java里面的static则如前所说,”将变量或者方法(注意这里可以修饰方法)与类绑定,指定与类相关”。
final在修饰变量时表示“变量不可变”,近似于C++里面的const。而其修饰方法时,指示实例方法不可被override。而static修饰的是类方法。其绑定机制指示其不可被override。
static与final可以同时修饰一个方法,这样并不会有语法错误。但是别这么用。在画蛇添足以外,还会让人怀疑你对Java语言的认识程度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值