2012-06-26 81 views
2

声明的变量是主要的,一个公共变量中的变量?范围的方法

public static void main(String[] args) { 
    ......... 

    for(int i=0;i<threads.length;i++) 
     try { 
      threads[i].join(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

    long time=0; 
    .... 
    } 

itime是他们公共的变量?

当然,如果我的推论是正确的,也属于公共方法的任何变量,应考虑公众。我对吗?

+0

只有约'其他静态方法main'不同的是,在运行应用程序时,Java运行时会自动调用这个特定的方法。 'main'与其他公有,静态,方法(包括名称范围的规则)不同。 –

回答

3

否。变量'i'和'time'是在main方法内部声明的,所以它们的作用域是局部的,仅限于主方法。你不能在方法外使用它们。

8

变量itime仅限于本地功能。他们在外面看不见。只有类成员变量可以在外部访问(取决于其访问修饰符)。

已经在SO here中详细说明了区别。

+0

所以他们是私人的......不是吗? – qxc

+1

他们在,你不能访问它们使用它们的方法之外的意义*私人*。但是他们在阶级意义上不是*私人*。 –

+0

非私人或公共或受保护。访问修饰符只与类成员相关。局部变量只在本地范围内可见。一些更多的解释[这里](http://stackoverflow.com/questions/1177723/what-is-the-difference-between-a-member-variable-and-a-local-variable) –

2

他们不被视为公众。它们是局部变量。他们在该方法之外没有任何可见性(更不用说该类)。

1

否。如果变量在方法内部 - 即使是主方法 - 它也是局部变量,其范围仅在该方法内。

public class MyClass { 
    public int x; // this is a public variable 

    public void doSomething() { // this is a public method 
     int y = 9; // this is a local variable 
    } 

    public int getX() { 
     return x; // we can do this 
    } 

    public int getY() { 
     return y; // we CANNOT do this because y is not public and is only 
        // defined within the doSomething() method 
    } 
} 
1

正如其他人所说,这两个变量只能用于main。但是我的范围更加有限 - 因为它是在for循环中声明的,所以它只能在for循环中使用。

1

局部变量永远不会公开,不管它们可能驻留的是什么方法(或构造函数)。局部变量的范围至多是整个方法体。

“public”,“private”和类似的概念不适用于局部变量,而是适用于实例或类变量。关键的区别在于局部变量驻留在堆栈上,因此它们的作用域被自动限制为堆栈帧的生存期。他们不需要任何访问规则。访问类型“私有”,“默认”等表示需要特别强加的限制,因为它们不是“自然”的。它们也可以被反射破坏,不像局部变量的范围。