为什么在 java 中,我必须将 class 名称添加到静态变量之前,以便从 class 外部访问它。希望了解编译器

Why is it in java I have to prepend the class name to static variable to access it from outside the class. Looking to understand the compiler

所以在 java 中你写了一个 public 静态变量,你必须在 class 之外通过说 class.var 来访问它我觉得很奇怪你可以如果您的包包含在主文件中,则只需键入变量名称即可访问它。

寻求了解编译器如何在 java 和使用相同 class.publicstatic 方法的面向对象语言上工作。

class 的静态成员不在 class 之外的范围内,甚至不在同一包中的其他 classes 范围内。

不过,您可以通过添加 static import 将它们添加到当前 class 的范围,例如

import static com.example.Foo.*;
import static com.example.Bar.doStuff;

这会将 class Foo 的所有静态成员添加到名称范围。

它还将在 Bar class.

中添加方法 doStuff 的所有静态重载

您可以在不同的 class 中使用同名的静态变量。如果您在未指定 class 名称的情况下发出此请求,则可能会遇到错误。举个例子;

package com.axample;
import ...

public static class FooClass{
    public static int staticVariable;
    .
    .
    .  
}
package com.axample;
import ...

public static class BarClass{
    public static int staticVariable;
    .
    .
    .  ​
}


import static com.example.FooClass.*;
import static com.example.BarClass.*;

public class Main{
    public static void Main(String[] args){
        int baz = 0;
        //staticVariable = baz ;   //Error
        BarClass.staticVariable = baz;  //Must be
    } ​
}