2015-09-20 137 views

回答

4

我认为他们的意思是,这是合法的:

public class Test { 
    private int someValue; 

    public int myMethod() { 
     return someValue + anotherValue; 
    } 

    private int anotherValue; 
} 

(它是!)

不过,我认为这是该网站一个错误来形容这为“ [i] nstance变量可以在使用之前或之后在课程级别声明“

  1. 短语“在课堂上声明”是不好的英语语法。

  2. 短语“在课堂上”是不明确的。它可能意味着在课堂上宣布。然而,它也可能意味着宣布为“班级”(即static)变量。(这是矛盾的,不正确的,但...)

  3. 短语“在使用之前或之后”是不明确的。这可能意味着在源代码文件之前或之后。它也可能意味着在时间意义之前或之后。 (这是不正确的。在运行时,所有对象的实例变量的声明,并在方法或构造函数体的代码被执行之前进行初始化。)


虽然他们正试图说些什么(我认为)在这句话中是正确的,他们已经表达得很差,而且这显然造成了一些读者的困惑。

+0

这是合法的,但我仍然会如果有人叫警察在我的团队中做到了。 –

0

实例变量val在行#2中声明(请注意标记),但在第#1行之前引用。您可以删除第3行和第2条评论的评论。那么它也会工作。

这意味着变量val即使在申报之前在行#1考虑使用之后考虑使用,如果你考虑3号线#1行。

public class prog{ 
    //private int val; //line# 3 
     public int getVal() 
     { 
      return val;//line# 1 
     } 
     private int val; //line# 2 
     prog() 
     { 
      val=0; 
     } 
     public static void main(String [] args) 
     { 
      prog obj= new prog(); 
      System.out.println("val:"+obj.getVal()); 
     } 
    } 
0

尽管您的参考文档很好地解释了它,但我会添加一些细节以确保完整性。


一个实例变量...

  • 是宣布类级别
  • 可以有任何的可见性是必要publicprotectedprivate,或者没有修饰符来表示包-private)
  • 实例化后会收到initial value(也就是说,你没有实例化字段的值...但是,如果你不实例化一个参考值,你可能会碰到一个NullPointerException

“前或使用后”这句话并没有太大的意义,但让我们说明一个场景:

public class Foo { 
    private String word; 

    public void printTheWord() { 
     System.out.println(word); 
    } 
} 

word没有实例,但因为它是收到的null的初始值,我们可以使用它。这意味着我们不会得到我们想要的价值,但它会编译。

将此与局部变量进行对比。下面的代码不会编译,因为word尚未实例化。

public class Foo { 
    public void printTheWord() { 
     String word; 
     System.out.println(word); 
    } 
} 
0

短语“使用前后”。将意味着实例变量适用于整个类,不像局部变量那样仅限于该方法内部。

它可以在课程开始时声明或初始化,这通常是最可能的方式。 其他的,在类的内部,可以在使用它的方法的调用之后声明。

请找到下面的代码片段,了解了一句:

public class InstanceVariable { 

    //declared before 
    int foo=4; 
    public void testInstanceVariableUse(){ 
     System.out.println("The total value of the instance variable is "+ (foo+boo)); 
    } 
    //declared after   
    int boo=5; 
} 


class TestInstanceVariable{ 
    public static void main(String[] args){ 
     InstanceVariable instanceVar = new InstanceVariable(); 
     instanceVar.testInstanceVariableUse(); 
    } 
} 

输出: 实例变量的总价值为9

相关问题