学习资源来源:
java中静态方法为什么不能调用非静态成员_小白的学习历程的博客-CSDN博客_java静态函数可以调用非静态成员吗
静态方法在没有创建对象、实例化的时候就已经存在了,所有静态方法可以互相调用,非静态方法和变量是属于对象的,不能直接访问
static成员是在JVM的CLASSLOADER加载类的时候初始化的,而非static的成员是在创建对象,即new 操作的时候才初始化的;类加载的时候初始化static的成员,此时static 已经分配内存空间,所以可以访问;非static的成员还没有通过new创建对象而进行初始化,所以必然不可以访问。
静态不需要生成对象就已经存在了,非静态要生成对象才可以产生,静态成员不能直接访问。
所以说在静态方法已经存在的时候去调用不存在的非静态方法是非法操作。
public class TestQuote {
public TestQuote() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
Person a = new Person();
System.out.println(a.name);
func(a);
System.out.println(a.name);
}
public void func(Person aPerson) {
aPerson = new Person();
aPerson.name = "这是修改后的名字";
}
}
class Person {
String name = "niao1";
}
这是非法的
报错:Cannot make a static reference to the non-static method func(Person) from the type TestQuote
如果我们加个static就可以:
public class TestQuote {
public TestQuote() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
Person a = new Person();
System.out.println(a.name);
func(a);
System.out.println(a.name);
}
public static void func(Person aPerson) {
aPerson = new Person();
aPerson.name = "这是修改后的名字";
}
}
class Person {
String name = "niao1";
}
完毕!!