这是如何运作的?
编辑:静态不是一个很好的解释,因为我可以使用非静态方法,它将全部工作。更新了代码以反映出来。
我在一个名为Foo.java的文件中有这个:
// This is in the Foo.java file
class Test {
public void printSomething() {
System.out.println("In Foo.Test");
}
};
这是一个名为Caller.java的文件:
// This goes in the Caller.java file
public class Caller {
public static void main(String[] args) {
Test test = new Test();
test.printSomething();
}
}
我可以执行我的来电,它会打印In Foo.Test
。这怎么可能不是编译问题?我甚至没有创建Foo
课程。我甚至不必在Foo.Test
中定义Caller
。
这是关于Eclipse Luna,Java8。
答案 0 :(得分:1)
一个java文件可以包含单个 public 类,但它可以包含任意数量的非公共类(在您的情况下为package-local)。
Foo.Test
用于内部类。您声明的是top level type.
答案 1 :(得分:1)
main
- Foo.java
的方法被声明为静态
调用静态方法可以在不创建类的对象的情况下工作。
例如,您可以在Foo.java
class Test {
public static void test(String test) {
System.out.println(test);
}
};
现在您可以致电Test.test("No object will be created");
,并且不会有Test
答案 2 :(得分:1)
Java很奇怪。您可以拥有一个没有任何代码行的文件,它仍然可以编译。继续尝试吧。
现在,我认为你把测试与Foo.Test混淆了(我明白,这是星期五)。
本质上你所定义的是:
public class Foo {} // this is by default, but don't try to use it because you didn't define the scope
class Test {}
你的困惑是" OMG,Test
是一个不存在的阶级的不纯的后代!!!",因为你期待像
public class Foo {
class Test {}
}
这与静态方法无关。它与javac
中的怪癖有关。