学习Java没有多长时间还是一只菜羊,在写一个方法的时候出现了Cannot make a static reference to the non-static method这样的问题,下面分享一下解决方法和心得。
出错代码如下:
package test;
public class Test {
public static void main(String[] args) {
Animal a=new Cat();
testVoice(a);
}
public void testVoice(Animal animal){
animal.voice();
if(animal instanceof Cat ){
((Cat)animal).shake();
}
}
}
错误提示:Cannot make a static reference to the non-static method testVoice(Animal) from the type Test
为什么会出现这样的问题呢?我们先看一下关于静态方法的说明;
- 说明:在静态方法中,不能直接访问非静态成员(包括方法和变量)。因为,非静态的变量是依赖于对象存在的,对象必须实例化之后,它的变量才会在内存中存在。例如一个类 Student 表示学生,它有一个变量String address。如果这个类没有被实例化,则它的 address 变量也就不存在。而非静态方法需要访问非静态变量,所以对非静态方法的访问也是针对某一个具体的对象的方法进行的。对它的访问一般通过 objectName.methodName(args……) 的方式进行。而静态成员不依赖于对象存在,即使是类所属的对象不存在,也可以被访问,它对整个进程而言是全局的。因此,在静态方法内部是不可以直接访问非静态成员的。【引自7974430】
我们在看看上面那段说明,我们可以尝试实例化Test类;这样代码变成了下面的样子
package test;
public class Test {
public static void main(String[] args) {
<span style="color:#ff6666;">Test test=new Test(); </span>
Animal a=new Cat();
<span style="color:#ff6666;">test.testVoice(a);</span>
}
public void testVoice(Animal animal){
animal.voice();
if(animal instanceof Cat ){
((Cat)animal).shake();
}
}
}