Unlike methods, a constructor cannot be abstract, static, final, native  or synchronized.

1. A constructor is not inherited, so there is no need to declare it final

2. As the same reason above, an abstract constructor could never be implemented.

3. A constructor is always invoked with respect to an object, so it makes no sense for a constructor to be static.

4. There is no practical need for a constructor to be synchronized, because it would lock the object under construction, which is normally not made available to other threads until all constructors for the object have completed their work.

5. The lack of native constructors is an arbitrary language design choice that makes it easy for an implementation of the Java virtual machine to verify that superclass constructors are always properly invoked during object creation.

翻译如下:

不同于方法,构造器不能是abstract, static, final, native, strictfp, 或者synchronized的.

1.构造器不是通过继承得到的,所以没有必要把它声明为final的。

2.同理,一个抽象的构造器将永远不会被实现。(所以也不能声明为abstract的)

3.构造器总是关联一个对象而被调用,所以把它声明为static是没有意义的。

4.没有实际的需要把构造器定义成同步的,因为它将会在构造的时候锁住该对象,直到所有的构造器完成它们的工作,这个构造的过程对其它线程来说,通常是不可访问的。

5.没有本地的构造器是任意一种语言的设计选择,这样会使得在创建对象的过程中JVM实现很容易去校验父类的构造器是否总是被正确地调用了。

(本地化的方法情况特别复杂,所以JVM调用起来非常麻烦,需要考虑很多种情况,没有native关键字的情况下,JVM实现起来比较容易。)

PS:受俺导师的影响,第一次有这种冲动想去翻译一些英文资料。虽然翻译得很烂,但很欣慰。

欢迎来访!^.^!
本BLOG仅用于个人学习交流!
目的在于记录个人成长.
所有文字均属于个人理解.
如有错误,望多多指教!不胜感激!

Feedback

# re: 为什么构造器不能是abstract, static, final, native or synchronized的?  回复  更多评论   

2007-04-10 22:46 by 糖果
学习中~~加油咯^-^

# re: 为什么构造器不能是abstract, static, final, native or synchronized的?  回复  更多评论   

2007-04-20 09:27 by 马嘉楠
strictfp 虽然也不能用来修饰constructor(构造函数),不过原文当中并没有提到,原文说的是native ,呵呵,可能是你的笔误吧。


--我也常有翻译的冲动,^+^
不使用native constructor(本地构造函数)是任何一种程序语言的设计选择,因为这样在对象创建过程中,校验父类的构造器是否总是被正确地调用,对于JVM的实现将会非常容易。



PS:前一段忙就没怎么来这里,你在吉林上学?还是家在吉林阿

# re: 为什么构造器不能是abstract, static, final, native or synchronized的?  回复  更多评论   

2007-04-20 09:39 by 久城
其实那段英文是在Matrix上看到的别人的一个回复。据说是某本书上的。strictfp还是第一次听说,还不大了解。

其实最后一句话我翻译了好久,请教了身边很多人。甚至到CSDN上发帖子问哈哈。到最后也没确定下来。

# re: 为什么构造器不能是abstract, static, final, native or synchronized的?  回复  更多评论   

2007-04-20 09:50 by 马嘉楠
strictfp 是用来精确浮点运算的

strictfp可以修饰一个类、接口以及方法,但是不能对接口中的方法以及构造函数声明为strictfp的。

如果声明为strictfp,则在所声明的范围内都将依照浮点规范IEEE-754来执行,不会因为不同的硬件平台等出现差异。

更具体的你可以搜索以下

上面一段英文是Java Language Specification Second Edition 中
8.8.3节 Constructor Modifiers 中的一段话

# re: 为什么构造器不能是abstract, static, final, native or synchronized的?  回复  更多评论   

2007-04-20 09:52 by 久城
收益!

只有注册用户登录后才能发表评论。


网站导航:
 

Copyright © 久城