网上看到关于static的描述,有个不理解的地方求解:
描述:
1 - 在静态方法中不能访问类的非静态成员变量和非静态成员方法;
2 - 即使没有显示地声明为static,类的构造器实际上也是静态方法。
问题:
如果按这个描述的话构造器是不能访问非静态成员变量的,但是我试了一下,结果却是反的:
private String name;
private static String school;
public Person(String name) {
super();
this.name = name;
}
想问问大神,这是什么道理??
这个主要看你对“静态”是如何理解的
Java语言规范中关于构造器的说明中提到:
Java Language Specification, 3rd 写道
8.8 Constructor Declarations
A constructor is used in the creation of an object that is an instance of a class:
(... 省略)
Constructor declarations are not members. They are never inherited and therefore are not subject to hiding or overriding.
实例构造器无法被隐藏或覆写,不参与多态,因而可以做静态绑定。从这个意义上可以认为实例构造器是“静态”的,但这种用法与Java语言定义的“静态方法”是两码事。
在java中,类的构造方法具有一些static的特性,但并不和static完全一样,比如构造里面可以有this,static修饰的方法或者代码块没有this。所以static关键字不能修饰构造方法,会与构造本身的特性冲突,构造只能使用public,protected和private进行修饰。不过在C#中,static关键字可以放在构造器前面,表示静态构造器,在类实例化之前调用。