2015-09-03 50 views
0

我想知道一个类中定义的静态方法和静态变量是否被认为是该类的成员(或者,如果“成员”一词仅表示实例变量/方法和内部类)静态方法和静态变量是否被JLS视为类成员?

哪些成员做类由在Java中?

+0

_I觉得我找到了一些inconsistencies._请澄清。 –

+0

该用法与英语中“member”的通用定义相一致。但是,JLS也没有做出任何区分。 – Voo

+0

@Insignficant我知道你在哪里感到困惑。实例变量与类变量,成员与类成员。简而言之,成员包括一个类中的所有内容,除了构造函数。 – user3437460

回答

1

成员组成的方法和所有的变量,无论是静态或没有。但是成员不包含构造函数。


总之,班级内的一切(except the constructors)的成员,无论是从一个超类继承与否和无论是静态还是非静态的。

+1

**备注**:静态/实例初始化器当然也不是一个类的成员。内部定义的是成员。 – user3437460

1

请您谈一下属性和方法,然后引用有关静态类,但无论如何:

静态成员仍在成员。

报价从JLS 8.1.6

ClassMemberDeclaration: 
    FieldDeclaration 
    MethodDeclaration 
    ClassDeclaration 
    InterfaceDeclaration 
    ; 

字段声明例如是specified here

FieldDeclaration: 
    {FieldModifier} UnannType VariableDeclaratorList ; 

随着最后FieldModifier可能包括static

FieldModifier: 
    (one of) 
    Annotation public protected private 
    static final transient volatile 
2

构件在JLS如§8定义的定义是:

一类的主体声明成员(字段和方法,并且嵌套 类和接口),

所以,是静态与否,字段或方法是类的成员。这与通常被理解为英语事物的“成员”的情况非常吻合。什么可能是更高达辩论:

一类的成员包括申报和继承的成员

+1

http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.6和http://docs.oracle.com/javase/specs/jls/se8/HTML/JLS-8。HTML#JLS-8.2 –