静态概念

时间:2008-12-09 13:25:53

标签: java static

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()); 
   } 
}

这里的试验是一个非静态类,我是一个静态变量。如何从静态main方法访问它。这种方式是否正确?

5 个答案:

答案 0 :(得分:3)

是的,这是正确的方法。

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

Trial t1 = new Trial(); 

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

此外,java中没有静态类这样的东西。你也应该把那个静态变量私有化。因此,在这个意义上,我反对@Daok关于将其公之于众的建议。

作为示例,这可行,但如果您描述实际用例,则可能存在一些可识别的设计错误。

答案 4 :(得分:0)

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

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

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

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

当你运行main方法时,输出将是 10 10 100

与使用可打印的静态变量形成对比 10 100 100