1
class Trial 
{   static int i; 
    int getI() 
    {       return i;} 
    void setI(int value) 
    {       i = value;} 
} 
public class ttest 
{  public static void main(String args[]) 
   {    Trial t1 = new Trial(); 
        t1.setI(10); 
        System.out.println(t1.getI()); 
        Trial t2 = new Trial(); 
        t2.setI(100); 
        System.out.println(t1.getI()); 
        System.out.println(t2.getI()); 
   } 
}

这里 trial 是一个非静态类, i 是一个静态变量。如何从静态主要方法访问它。这种方式正确吗?

4

5 回答 5

3

是的,这是正确的方法。

当一个类不是静态的时,您需要使用 new 关键字对其进行实例化。就像你做的那样

Trial t1 = new Trial(); 

如果您不想在所有 Trial 对象之间共享其值,则静态变量 i 不应该是静态的。如果您想使用此值(在“共享模式”中),您可以按照您的方式进行操作。如果你把这个变量公开,你可以简单地做 Trial.i = "your value"...

于 2008-12-09T13:30:35.963 回答
2

本质上,是的,但是如果您将访问器声明为 public static,那么您应该能够通过类名访问它们,即 Trial.getI();

于 2008-12-09T13:31:37.303 回答
1

您可能希望将 setter 和 getter 设为静态,因为它们访问静态变量。如果您看不到源代码,如果您将它们保留为非静态的,则可能会让该类的用户感到非常困惑。

于 2008-12-09T13:47:25.523 回答
0

你真的想要一个静态成员变量吗?如上所述,静态变量在所有实例之间共享,因此 t2.setI(x) 也意味着 t1.getI() == x。

如果您将 setter 和 getter 声明为静态,则可以通过类而不是实例来访问它们。试用.setI(x)。现在任何人都清楚 x 在所有实例之间共享。

但我似乎你真正需要的是一个非静态变量。

class Trial {   
    private int i; 
    int getI() { return i;} 
    void setI(int value) {i = value;} 
} 

运行主方法时,输出将为 10 10 100

与使用静态变量相比,它会打印 10 100 100

于 2008-12-09T14:54:04.547 回答
0

其他人已经提到 get 和 set 方法应该是静态的,因为它们指的是静态变量。

此外, java中没有静态类之类的东西。您还应该将该静态变量设为私有。所以从这个意义上说,我反对@Daok 将其公开的建议。

作为一个例子,这是可行的,但是如果您描述实际用例,则可能会发现一些设计错误。

于 2008-12-09T14:31:09.977 回答