本帖最后由 fantacyleo 于 2014-7-5 15:29 编辑
静态只能访问静态的完整说法应该是:
Person类中的静态方法如果要【直接】访问Person类中的成员,它只能直接访问Person类的静态成员,而不能直接访问Person类的非静态成员。
非静态方法中能【直接】访问类的成员是因为其参数列表中有一个隐式传入的this(JVM规范原文:The reference to this is passed implicitly by the method invocation instructions of the Java virtual machine used to invoke instance methods.)。因此如果Person类中声明了:
int age;
那么你在非静态方法中写age = 3;实际上是在写this.age=3。而静态方法的参数列表中则不含这个隐式传入的this,因而无法访问本类的非静态成员。
回到lz的问题:
1. new Object()是this.new Object()的缩写吗?显然不是!new是一个运算符,不属于任何对象。new运算符能不能写在那里,跟是否处于静态方法没有任何关系。
2. 构造函数是静态成员的吗?不是!首先,Java语言规范明确说了构造函数不是类的成员,不能被继承、覆盖、隐藏(Constructor declarations are not members. They are never inherited and therefore are not subject to hiding or overriding.)其次,构造函数的参数列表中也隐含着一个this,你在构造函数中就可以使用这个this。因此构造函数虽不参与多态判定,但不能说是静态成员。
|