关于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,
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,
相关文章推荐
- 关于函数名前加static的一些解释
- [转]关于struct的一些解释与class对比
- 关于HIbernate中的lazy属性的一些解释
- 关于 "the serializable class XXX does not declare a static final seriaVersionUID..."的问题
- C++:关于class member声明为static的情况
- 关于《C语言深度解剖》一些例程的实验和感悟——关键字static
- 关于一些宏的解释
- js中关于document.domain的一些解释
- 关于 HOG 代码 的一些解释
- 7-关于GOP与RAP的一些解释
- 关于static的一些理解
- 关于 最优化/Optimization 的一些概念解释
- (12) 关于Linux 定时任务crontab的一些存疑 解释
- 【C++ static】关于 error LNK2001: unresolved external symbol "public: static class CString 错误处理
- 关于EXCEL相关类的一些函数解释
- [活着的意义是什么?]关于世界观的一些看法
- 关于HIbernate中的lazy属性的一些解释
- 关于ngx_epoll_add_event的一些解释
- 【转载】关于终端和控制台的一些解释
- 关于上传文件有问题的一些解释