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方法访问它。这种方式是否正确?
答案 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