初学者最常犯的错误是试图“静态”地使用类属性而不创建该类的实例。它会给你留下上面提到的错误信息:
您可以将非静态方法设置为静态,也可以创建该类的实例来使用它的属性。
背后的原因是什么?我关心的不是解决方法,而是原因。
private java.util.List<String> someMethod(){
/* Some Code */
return someList;
}
public static void main(String[] strArgs){
// The following statement causes the error.
java.util.List<String> someList = someMethod();
}
面向对象编程的本质是将逻辑与它所操作的数据封装在一起。
实例方法是逻辑,实例字段是数据。它们一起构成了一个物体。
public class Foo
{
private String foo;
public Foo(String foo){ this.foo = foo; }
public getFoo(){ return this.foo; }
public static void main(String[] args){
System.out.println( getFoo() );
}
}
运行上述程序可能会得到什么结果?
没有对象,就没有实例数据,虽然实例方法作为类定义的一部分存在,但它们需要对象实例为它们提供数据。
理论上,不访问任何实例数据的实例方法可以在静态上下文中工作,但实际上没有任何理由将其作为实例方法。这是一种语言设计决定,无论如何都要允许它,而不是制定一个额外的规则来禁止它。
面向对象编程的本质是将逻辑与它所操作的数据封装在一起。
实例方法是逻辑,实例字段是数据。它们一起构成了一个物体。
public class Foo
{
private String foo;
public Foo(String foo){ this.foo = foo; }
public getFoo(){ return this.foo; }
public static void main(String[] args){
System.out.println( getFoo() );
}
}
运行上述程序可能会得到什么结果?
没有对象,就没有实例数据,虽然实例方法作为类定义的一部分存在,但它们需要对象实例为它们提供数据。
理论上,不访问任何实例数据的实例方法可以在静态上下文中工作,但实际上没有任何理由将其作为实例方法。这是一种语言设计决定,无论如何都要允许它,而不是制定一个额外的规则来禁止它。