我惊讶地发现这令人困惑。我一定错过了什么。
所以我有这个简单的语法
public class OMG{
public static void main(String args[]){
int hi=2;
letsDoIt();
System.out.println(hi);
}
public static void letsDoIt(){
hi+=1;
}
}
显然这会导致错误,因为hi是一个局部变量。
根据我从python的经验判断,我添加了this
public class OMG{
public static void main(String args[]){
int hi=2;
letsDoIt();
System.out.println(hi);
}
public static void letsDoIt(){
this.hi+=1;
}
}
当无法从静态方法访问非静态变量时会增加额外的错误。
我将 static
添加到了
public class OMG{
public static void main(String args[]){
static int hi=2;
letsDoIt();
System.out.println(hi);
}
public static void letsDoIt(){
this.hi+=1;
}
}
编译器骂我非法表达。我用private
代替静态(有些SO答案,推荐)但是同样的错误。
我的错误在哪里?有没有什么办法可以解决这个问题,而没有进行全球化的分类?
答案 0 :(得分:3)
您无法在方法中声明static
变量,因为static
修饰符表示方法或字段属于该类。
解决此问题的最简单方法是将变量声明为static
类变量。使用此方法,您还需要在this
方法中从this.hi
中删除lestDoIt
。代码如下:
public class OMG {
static int hi=2;
public static void main(String args[]) {
letsDoIt();
System.out.println(hi);
}
public static void letsDoIt() {
hi+=1;
}
}
另一种解决方案可能是使用非static
变量hi
。这还需要您删除static
方法的letsDoIt
修饰符才能访问hi
字段,因为static
方法无法访问实例字段,因为如上所述, static
表示方法或字段属于该类,而不属于该类的特定对象实例。
解决方案是:
public class OMG {
int hi=2;
public static void main(String args[]) {
//note that we have to create a new instance of OMG
//because, again, static methods cannot access to non-static methods/fields
OMG omg = new OMG();
omg.letsDoIt();
System.out.println(omg.hi);
}
public void letsDoIt() {
this.hi+=1;
}
}
更多信息:
答案 1 :(得分:0)
静态变量是类的变量,而不是其实例。你不能在方法中有一个静态变量。
要修复此错误,请将hi
移到main方法之外(保持静态)。还要摆脱this
中的letsDoIt()
。
public class OMG {
static int hi=2;
public static void main(String args[]){
letsDoIt();
System.out.println(hi);
}
public static void letsDoIt() {
hi+=1;
}
}
答案 2 :(得分:0)
导致您出现问题的原因有两个。
hi
必须在main
方法与letsDoIt
方法main
方法是static
,所以您的letsDoIt
只能看到static
字段(除非作为参数传递实例,即) 因此:
将hi
声明为static
的{{1}}字段:
OMG
在public class OMG {
static int hi;
...
方法中删除本地变量声明。
在main
上下文中使用OMG.hi
或仅hi
引用它,不,static
作为this.hi
引用this
隐含Main
的实例,该实例在static
上下文中不可见
答案 3 :(得分:0)
你不能在静态上下文中执行“this.hi + = 1”,并且为了从“letsDoIt()”访问hi变量,你必须将它声明为类变量,就像我在下面的代码中所做的那样: / p>
public class OMG{
public static int hi;
public static void main(String args[]){
hi=2;
letsDoIt();
System.out.println(hi);
}
public static void letsDoIt(){
hi+=1;
}
}