您的位置:首页 > 其它

关于static class的意义和一些解释

2008-06-14 20:49 597 查看
在java中:

1。final 篇
final 做为一个独立的存在,也表现的与众不同。一般情况都可以理解为 can't be changed.
1)final data: 实现constant语义。说明这个值:在编译时不会变;在运行时也不能被改变。
在java中,提供了blank final:允许大家将初始化的动作延迟到constructor中。这是极限,有编译器保证。
2)final parameter: 同上语义。
3)final method:
a)防止子类overriden.(注:这个角度,private 隐含了final语义) b)efficiency: 允许编译器转换调用为inline call.
4)final class: 拒绝inherited.

2。static 篇
1。定义:static is modifier.本想找一个权威的定义给大家,才发现此物没有特定范围。也就意味着可能明天还有新的用法,也说明了语言的无限扩展性。不得以,我们只好在此注明:以下用法为java 1.5 之前的说明:

闲言碎语:这 static 可不得了,跟谁沾上整个就变质了。如果你想标榜独立个性,请用。static 一上,就表明 “我是人民的公仆,你只要找得着我,就可以让我为您服务“。它属于定义层次,在jvm层次独一无二。从另一个角度上,它只能用于成员定义。我们不能定义一个 top-level class 为static.
public static class Outest { // compile error
...;
}

装载:
因为static成员(include field, method, nested class)是在存储在类定义层次的,只要任何与其类相关的操作,均会产生它的初始化动作。(也就意味着,它已经准备就绪,你只要想用就用。classname.staticMember)

所有的static object/primitive and static block,按照先来后到的顺序执行初始化操作。
与其他一样。

abstract 和 sealed一起用?定义abstract的目的就是抽象基类,seal表示不能继承的实体类,完全是两回事,怎么可能一起用呢?
abstract表明必须要被继承,sealed表明不可以被继承,这两个是矛盾的,怎么可以一起用呢。
通过查看 IL 代码,我们会发现 static class 实际上就是 abstract sealed class,只不过编译器在编译时顺便对 static class 的成员修饰符进行检查而已。
让我们再来猜测一下 MS 开发人员的想法:他们的目的是想获得 abstract sealed class 的效果,但却为语义上的矛盾而苦恼不已,大家想获得一个优美的解决方式,于是就为 C# 2.0 新增了一个 static 关键字,完美的解决了这个问题。
也许有人会问:为什么不是 static class = abstract class + static member limit 而要加上 sealed 的限制呢?理由是继承一个只有 static 成员的类和重新写一个类完全没有区别。为什么这么说呢?因为 static 必然是not virtual,继承它又能有什么用呢?
static class 还有一个限制,那就是只能从 System.Object 继承,为什么会有这个限制,理由和上面差不多。
每每提到 static 关键字,我就想起了 static constructor,感谢 MS 的开发人员提供了这么好的一个特性。但是 C# 提供了 static constructor 却没有提供 static destructor,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: