我知道我们不能在静态方法中使用“this”,因为它用于指向对象,静态方法由类而不是对象调用。
在静态方法中是否还有其他东西无法使用?
答案 0 :(得分:3)
你可能不会在没有实例的情况下使用实例成员......但这基本上就是你已经提到的......
答案 1 :(得分:1)
你不能在静态方法中引用类的非静态实例变量。
答案 2 :(得分:1)
静态方法 只能 访问静态数据 它无法访问/调用
"this"
或"super"
个关键字示例:无法访问非静态数据,即实例变量“name”,无法从静态方法内部调用非静态方法play()。
public class Employee {
private String name;
private String address;
public static int counter;
public Employee(String name, String address) {
this.name = name;
this.address = address;
this.number = ++counter;
}
public static int getCounter() {
System.out.println(“Inside getCounter”);
name = “Rich”; //does not compile!
// Let's say, e is a object of type Employee.
e.play(); //Cannot call non-static methods. Hence, won't compile !
return counter;
}
public void play() {
System.out.println("Play called from Static method ? No, that's not possible");
}
}
答案 3 :(得分:0)
正如其他人所说,你只能访问静态变量和方法。我想你应该注意的另一件事是,这也适用于像内部类这样的东西(这可能不会立即显而易见,至少它在我第一次尝试这样做时抓住了我):
public class OuterClass
{
private class InnerClass {}
private static void staticMethod()
{
// Compile-time error!
InnerClass inner = new InnerClass();
}
}
发出编译时错误:
无法访问类型为OuterClass的封闭实例。必须使用OuterClass类型的封闭实例限定分配(例如x.new A(),其中x是OuterClass的实例)。
但这是有效的:
public class OuterClass
{
private static class InnerClass {}
private static void staticMethod()
{
// Compiles fine
InnerClass inner = new InnerClass();
}
}
答案 4 :(得分:0)
您也不能引用任何泛型类型,因为您没有具体(类型化)实例的上下文。