静态方法不可以调用非静态变量

时间:2022-04-28 19:30:25
public class TestEquals{
public static void main(String[] args){
Object circled1 = new Circled();
Object circled2 = new Circled();
System.out.println(circled1.equals(circled2));
}

}
class Circled{
double radius;
public boolean equals(Circled circled){
return this.radius == circled.radius;
}
}

编译时候第三四行出错,non-static variable this cannot be referenced from a static context 
为什么?

18 个解决方案

#1


搞笑嘛。我用你的代码编译通过运行结果:false

#2


为什么我编译通不过?
我也不知道运行结果,就是想看结果啊.
但是这里是错误的:
public   boolean   equals(Circled   circled)
因为equals方法是:object1.equals(object2)

#3


TestEquals.java:3: non-static variable this cannot be referenced from a static c
ontext
                Object circled1 = new Circled();
                                  ^
TestEquals.java:4: non-static variable this cannot be referenced from a static c
ontext
                Object circled2 = new Circled();
                                  ^
2 errors

#4


顶一下有分么,你其它的编译能通过么,
我没分了

#5


可以运行。。。。
鉴定完毕。。
呵呵

#6


class   Circled能通过编译,就是那个问题.

#7


顶上去啊,牛大哥们怎么都不在啊?

#8


应该没有问题吧

#9


我自己也觉得是啊,但是编译不过,郁闷啊

#10


我试了能运行,结果为false
可能你出的不是程序方面的问题

#11


to myshinesxg:
为什么我编译不过呢?结果应该是false
class   Circled{ 
double   radius; 
public   boolean   equals(Circled   circled){ 
return   this.radius   ==   circled.radius; 

}
修改为
 class Circled{ 
double radius; 
public boolean equals(Object circled){ 
return this.radius == ((Circled)circled).radius; 


这样应该就可以得出正确结果.

#12


关注钟

#13


Object 里没有radius

#14


Object a=new Object(),v=new Object();
System.out.println(a.equals(v));

#15


public   class   TestEquals{ 
public   static   void   main(String[]   args){ 
Circled  circled1   =   new   Circled(); 
Circled  circled2   =   new   Circled(); 
System.out.println(circled1.equals(circled2)); 



class   Circled{ 
public   double   radius; 
public   boolean   equals(Circled   circled){ 
return   this.radius   ==   circled.radius; 


你看一下这样可不可以了,,
结果是false 

#16


compile:
run-single:
true
BUILD SUCCESSFUL (total time: 1 second)

#17


这个例子练习的是多态,如果那样该了就不是多态了~

#18


最后发现原来是自己不小心搞错了,这两个类我是放在不同文件中的,而我调试的是两个类在同一个文件中的,那样的话,要把内部类声明为static就好了~
结贴了~

#1


搞笑嘛。我用你的代码编译通过运行结果:false

#2


为什么我编译通不过?
我也不知道运行结果,就是想看结果啊.
但是这里是错误的:
public   boolean   equals(Circled   circled)
因为equals方法是:object1.equals(object2)

#3


TestEquals.java:3: non-static variable this cannot be referenced from a static c
ontext
                Object circled1 = new Circled();
                                  ^
TestEquals.java:4: non-static variable this cannot be referenced from a static c
ontext
                Object circled2 = new Circled();
                                  ^
2 errors

#4


顶一下有分么,你其它的编译能通过么,
我没分了

#5


可以运行。。。。
鉴定完毕。。
呵呵

#6


class   Circled能通过编译,就是那个问题.

#7


顶上去啊,牛大哥们怎么都不在啊?

#8


应该没有问题吧

#9


我自己也觉得是啊,但是编译不过,郁闷啊

#10


我试了能运行,结果为false
可能你出的不是程序方面的问题

#11


to myshinesxg:
为什么我编译不过呢?结果应该是false
class   Circled{ 
double   radius; 
public   boolean   equals(Circled   circled){ 
return   this.radius   ==   circled.radius; 

}
修改为
 class Circled{ 
double radius; 
public boolean equals(Object circled){ 
return this.radius == ((Circled)circled).radius; 


这样应该就可以得出正确结果.

#12


关注钟

#13


Object 里没有radius

#14


Object a=new Object(),v=new Object();
System.out.println(a.equals(v));

#15


public   class   TestEquals{ 
public   static   void   main(String[]   args){ 
Circled  circled1   =   new   Circled(); 
Circled  circled2   =   new   Circled(); 
System.out.println(circled1.equals(circled2)); 



class   Circled{ 
public   double   radius; 
public   boolean   equals(Circled   circled){ 
return   this.radius   ==   circled.radius; 


你看一下这样可不可以了,,
结果是false 

#16


compile:
run-single:
true
BUILD SUCCESSFUL (total time: 1 second)

#17


这个例子练习的是多态,如果那样该了就不是多态了~

#18


最后发现原来是自己不小心搞错了,这两个类我是放在不同文件中的,而我调试的是两个类在同一个文件中的,那样的话,要把内部类声明为static就好了~
结贴了~