实例变量还是静态变量?

时间:2012-12-14 08:06:04

标签: java static-members

我有一个我想在2级中使用的变量。我必须将其声明为静态变量吗?它可以是实例变量吗?

public class Text extends JFrame implements ActionListener{

JTextArea t;
String s;
}

我想在另一个类中使用 s 。我必须将其声明为静态变量吗?是否可以将其声明为实例变量?

5 个答案:

答案 0 :(得分:8)

根据如何使用变量,您无法确定变量是否为静态变量。如果它对所有Text实例都是通用的,那么它必须是静态的。如果每个Text实例都有自己的s(无论这个选择不当的名称可能实际上代表什么),那么它必须是一个实例变量。

答案 1 :(得分:3)

I want to use s in another class

如果s在整个应用程序中都有一个相同的值,那么继续使用static。

相反,如果它实际上是一个实例变量,您可以在其他类中引用Text,并在Text.java中使用s的getter方法来访问它

答案 2 :(得分:3)

您可以将其声明为实例变量,并为s创建一个公共getter方法。

public String getValue() {
    return s;
}

请查看JB Nizet关于是否应将其声明为静态变量或实例变量的答案。

答案 3 :(得分:3)

public class Text extends JFrame implements ActionListener{

public static JTextArea t;
String s;
};

以上内容可以像这样:Text.t在类本身之外。如果它适用于您的情况或使用实例开始,您可能需要考虑继承,即:

public class Text extends JFrame implements ActionListener{   
     private JTextArea t;
     private String s;
     public JTextArea getTextArea() {
         return this.t;
     }
};

然后使用getter和setter来访问它们的值,这是Java的做事方式。 要使用上述内容,您现在需要在另一个类中创建一个实例:

public class otherClass {
private Text theInstance = new Text();
JTextArea theTextArea = theInstance.getTextArea();
};

此外,停止命名变量s和t。这是一种糟糕的编码方式。使用显式名称,以便很容易判断变量的用途/用途。想象一下,您想要在几天后查看代码,您可能不记得s和{ {1}}意图在您的代码中执行。

答案 4 :(得分:0)

为s制作公共getter方法,并从其他类中使用它。