Java:过度使用'静态'

时间:2015-10-30 03:30:18

标签: java static

如果没有静态关键字,如何在任何方法之外使用变量?人们说不应该这样做,有更好的方法吗?

以下是一些代码:

public class Main{

private static int a = 0;
private static int b = 1;       //<--- How to use these without the 'static' type?

public static void main(String[] args){ //Which will work here,

    Okay();

}

public static void Okay(){ //And here?
    if(a <= b){
        System.out.println("Alright");
    }else{
        System.out.println("Okay Then");
    }
}

}

3 个答案:

答案 0 :(得分:3)

首先删除static的所有用途(public static void main除外,你需要那个)

public static void main中,创建一个Main的实例并将其称为Okay方法......

Main main = new Main();
main.Okay();

例如

public class Main {

    private int a = 0;
    private int b = 1;

    public static void main(String[] args) { //Which will work here,

        Main main = new Main();
        main.Okay();

    }

    public Main() {

    }

    public void Okay() { //And here?
        if (a <= b) {
            System.out.println("Alright");
        } else {
            System.out.println("Okay Then");
        }
    }

}

虽然这可能看起来微不足道,但如果你有一个以多种不同方式修改值的类,那么使用像这样的实例类会更有意义,因为你可以根据需要创建任意数量的实例。他们会自己维护自己版本的值,允许你以不同的方式操纵不同的实例,而不会影响其他实例

您可能还想查看Understanding Class Members了解更多详情

您可能希望阅读Code Conventions for the Java TM Programming Language,这样可以让人们更轻松地阅读您的代码并让您阅读其他代码

答案 1 :(得分:0)

按照惯例,Java方法名称以小写字母开头。您可以将变量传递给方法

public static void okay(int a, int b)

或者您可以构造用户定义类型(自定义对象)并在那里调用方法。像,

class OkayClass {
   int a;
   int b;
   // ... getters ... setters ...
   public OkayClass(int a, int b) {
       this.a = a;
       this.b = b;
   }
   public void okay() {
       // ...
   }
}

然后

OkayClass oc = new OkayClass(1, 2);
oc.okay();

答案 2 :(得分:0)

创建static方法的最常见用例是常用的实用方法。您将在java标准库中看到它们。请参阅Integer#parseInt()String#valueOf()java.util.Arraysjava.util.Collections中的几乎所有方法。 static变量和方法与类相关联,而不是与该类的单个实例相关联。由于static无法访问非静态变量,因此它们永远不会更改实例的状态。正如Elliott所提到的,您可以将变量传递给方法。

话虽如此,很多时候您需要在所有实例之间共享class'状态或让用户修改该状态。在这种情况下,静态方法的静态变量是有效的。例如,您可能不希望所有城市都使用HashMap个邮政编码,因此请标记Map static