3 回答
TA贡献1834条经验 获得超8个赞
这很简单。
在第一个示例中,您将在静态方法之外生成变量。salary1
在第二个示例中,您将在静态方法中生成变量,该变量不是整个 Bike 类。bike
TA贡献1866条经验 获得超5个赞
当我开始使用Java时,我遇到了同样的问题,然后我把静态放在任何地方,这是错误的选择!
您的“静态上下文”是静态方法主(请注意方法名称前面的“static”关键字)。静态方法不是对象的方法,而是类的方法。静态方法只能访问类的字段(以 static 关键字为前缀的字段),这些类型的字段在此类的所有对象之间共享。
例如,尝试:
public class Counter {
private static int cpt = 0;
public int incr() {
cpt = cpt + 1;
return cpt;
}
public static void main(String args[]) {
Counter counter1 = new Counter();
Counter counter2 = new Counter();
System.out.println(counter1.incr()); // print 1
System.out.println(counter2.incr()); // print 2
}
}
在这里,即使我只在“counter2”上调用了一次“incr”,它也返回“2”,因为“cpt”在counter1和counter2之间共享。
那么,如何解决您的问题。您必须访问对象的字段(也称为实例的字段)会抛出一个实例标识符,如“counter1.cpt”或在对象的方法中(如“incr()”)。这里有一个修复你的第一堂课:
public class MoneyTracker {
float salary1;
public void enterSalary1(float newValue){
salary1 = newValue;
}
public static void main(String[] args) {
MoneyTracker monthlySpend = new MoneyTracker();
monthlySpend.enterSalary1(1385.50f);
System.out.println(monthlySpend.salary1);
}
}
希望它能帮助你。
TA贡献1871条经验 获得超8个赞
这是因为main方法是静态的,并且您尝试在那里引用非静态字段(salary1),执行.在第二个示例中,您没有在静态 main 方法中引用任何非静态字段,这就是为什么没有错误的原因。使用 getters/setters。希望我帮助了:)System.out.println(salary1)
添加回答
举报