`

为什么构造器不能是abstract, static, final, native or synchronized的?

阅读更多

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:受俺导师的影响,第一次有这种冲动想去翻译一些英文资料。虽然翻译得很烂,但很欣慰。
分享到:
评论

相关推荐

    深入理解java构造器机理

    构造器可以有任何访问修饰符,例如 public、protected、private 或者没有修饰符,但不能有 abstract、final、native、static 或者 synchronized 修饰符。构造器没有返回值,也不需要 void。最后,构造器的命名与类名...

    构造器和方法的区别

    然而,构造器不能使用`abstract`、`final`、`native`、`static`或`synchronized`等非访问修饰符,这些修饰符仅适用于方法。 构造器没有返回类型,而方法可以有任意类型的返回值,包括`void`表示无返回值。此外,...

    从零开始学JAVA第10章_构造器.ppt

    构造器不能声明为abstract、final、native、static或synchronized,而普通方法可以根据需要使用这些修饰符。此外,构造器没有返回值,而方法可以有或没有返回值。最后,构造器的名称与类名相同,而方法名则可以自由...

    Java面向对象(基础)- 类的成员之三:构造器(Constructor)

    2. **权限修饰符**:可以是`public`、`private`、`protected`或默认访问级别,但不能有其他修饰符如`static`、`final`、`synchronized`、`abstract`或`native`。 3. **无返回值**:构造器不返回任何值,因此不需要`...

    Java面试宝典 Java面试宝典

    23. abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 答:abstract的method不能同时是static、native或synchronized。 Java内部类 24. 什么是内部类?Static Nested Class和...

    java笔试题java笔试题java笔试题

    3、abstract 的 method 是否可同时是 static, native, synchronized? - 抽象方法(abstract method)不能是 static,因为 static 方法属于类,而抽象方法属于接口或抽象类,这两者不能结合。 - 抽象方法也不能是 ...

    Java面试宝典2017.zip

    25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 26、什么是内部类?Static Nested Class 和 Inner Class的不同。 19 27、内部类可以引用它的包含类的成员吗?有没有什么...

    Java软件工程师面试宝典

    25. abstract方法能否是static、native或synchronized? 不可以,abstract方法不能是static、native或synchronized。 26. 什么是内部类? 内部类是指定义在另一个类内部的类,它能访问外部类的所有成员。 27. ...

    Java面试题含答案.doc

    25. abstract 的 method 是否可同时是static,是否可同时是 native,是否可同时是 synchronized? 答案:抽象方法不能是静态或native的,不能是同步的。 二十六、内部类 26. 什么是内部类?Static Nested Class 和...

    Java问题宝典2012版

    25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 20 26、什么是内部类?Static Nested Class 和 Inner Class的不同。 20 27、内部类可以引用它的包含类的成员吗?有没有什么...

    变态级JAVA程序员面试32问(附答案)

    21. abstract 的 method 是否可以同时是 static, 是否可以同时是 native, 是否可以同时是 synchronized? abstract 的方法不能同时是 static,因为 static 方法不能被重写。abstract 的方法也不能同时是 native,...

    java面试宝典

    32、abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized? 11 33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法内部发出对非static 方法的调用? 11 35、写clone...

    java面试试题,精挑细选

    29. abstract 的 method 是 否 可 同 时 是 static, 是 否 可 同 时 是 native , 是 否 可 同 时 是 synchronized? abstract 的 method 不能是 static 的,因为 static 方法属于类所有,而 abstract 方法属于对象...

    java 面试常问的问题 如何回答

    25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 26、什么是内部类?Static Nested Class 和 Inner Class的不同。 19 27、内部类可以引用它的包含类的成员吗?有没有什么...

    net学习笔记及其他代码应用

    答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。 42.是否可以继承String类? 答:String类是final类故不可以继承。 43.try {}里有一个return语句,那么紧跟在这个try后的...

    2022年Java方向常见面试题.doc

    Java面试题知识点总结 Java方向常见面试题可以分为多个方面,包括Java基础知识、多线程、字符串操作、异常处理、继承和实现接口等。 ...abstract方法不能被声明为static、native或synchronized。

    corejava_面试题

    abstract的method是否可同时是static、native、synchronized? 不可以,static、native、synchronized修饰的方法不能是抽象的,因为它们都需要有具体的方法实现。 内部类(InnerClass)和静态内部类(StaticNested...

    java程序员面试题及解答.pdf,这是一份不错的文件

    21. abstract, static, native, synchronized 结合:abstract 方法不能是 static 或 native,因为它们是声明方法的实现方式。abstract 也不能是 synchronized,因为抽象方法没有具体实现。 22. 接口继承接口,抽象...

    Java修饰符详细解析

    方法修饰符有public、protected、private、abstract、final、synchronized、native七个。 1. public:公共的,可以从所有的类中访问。 2. protected:保护的,只能从自己的类和它的子类中访问。 3. private:私有的...

    JAVA程序员面试32问.pdf,这是一份不错的文件

    - abstract 不能与 static、native、synchronized 同时使用。 22. 接口可以继承接口,抽象类可以实现接口,抽象类也可以继承实体类。 23. 启动线程用 start() 方法,run() 方法只是线程执行的主体。 24. 构造器 ...

Global site tag (gtag.js) - Google Analytics