Java 没有声明为public、private或protected的变量是什么?

Java 没有声明为public、private或protected的变量是什么?,java,Java,如果不是: private JButton theButton; 我定义了这样一个字段: JButton theButton; 区别是什么?包。它们对同一包中的其他类可见 FWIW,我通常在这些上使用我自己的no op@Package注释,只是为了清楚地表明我知道我在做什么——我并没有忘记什么。尽管这是默认情况,但在高质量代码中使用包访问的可能性可能比其他三种可能性中的任何一种都要少,只有一个例外: 在某些类型的单元测试中,希望能够访问通常是私有的方法或字段。提供访问的一种方法是将它们设置为

如果不是:

private JButton theButton;
我定义了这样一个字段:

JButton theButton;
区别是什么?

包。它们对同一包中的其他类可见

FWIW,我通常在这些上使用我自己的no op@Package注释,只是为了清楚地表明我知道我在做什么——我并没有忘记什么。尽管这是默认情况,但在高质量代码中使用包访问的可能性可能比其他三种可能性中的任何一种都要少,只有一个例外:


在某些类型的单元测试中,希望能够访问通常是私有的方法或字段。提供访问的一种方法是将它们设置为包访问,并将单元测试类放在同一个包中(但通常放在不同的“测试”目录树中)。一些开发人员认为这是一种不好的做法——一般来说,在测试中使用私有(或用于测试的包)方法是不好的;从最可见到最不可见的顺序

如果未指定,则默认情况下,可见性为

package mytest.myvisibility;

public class MyClass
{
    public int myPublicInt; // visible to all
    protected myProtectedInt; // visible to subclasses of MyClass and to other members of the mytest.myvisibility package
    int myPackageInt; // visible only to other members of the mytest.myvisibility package
    private int myPrivateInt; // visible only to MyClass objects
}

与c上的静态函数相同。仅在同一个文件上可见。

这不完全正确(请参阅上面@LukeH提供的Oracle文档)。受保护的项在当前package.Update中也可见——详细说明了“package”的可见性,并使可见性顺序在描述和代码示例中保持一致。这是错误的。它们是“包私有”的,正如其他答案中所阐述的,这意味着它们不仅在同一文件中可见,而且在同一包的其他文件中也可见。