Java 静态方法static调用非静态方法non-static

非静态方法可直接调用静态方法

而静态方法(static) 无法直接调用非静态方法(non-static),想要调用的话有以下两个做法:

  • 把非静态方法改成静态方法
  • 使用 <类名.方法名> 调用非静态方法
public class Static_test {
	
	public static void main(String[] args) {
		//Method1();//错误调用方法 无法直接调用
		Method2();//静态方法可直接调用静态方法
		Static_test s = new Static_test();//类名为Static_test
		s.Method1();//使用<类名.方法名>可调用非静态方法
	}

	public void Method1() {//非静态方法 non-static
		System.out.println("11111");
        Method2();//非静态方法可直接调用静态方法
	}
	
	public static void Method2() {//非静态方法 static
		System.out.println("22222");
	}
}

静态方法是属于类的,而普通方法是属于对象的

因此静态方法会随着类的加载而被加载,即属于类的静态方法可以在对象不存在的时候就能访问到,而普通方法必须先new一个对象才能用这个对象访问,所以在static方法内部无法直接调用non-static方法。

由于static方法在装载class时首先完成,比构造方法早,此时non-static属性和方法还没有完成初始化,程序最终都是在内存中执行,变量只有在内存中占有一席之地时才会被访问,类的静态成员(变态和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问,非静态成员(变量和方法)属于类的对象,所以只有在类的对象创建(创建实例)的时候才会分配内存,然后通过类的对象去访问。因此可知,在一个类的静态成员中去访问非静态成员之所以会出错是因为在类的非静态成员不存在的时候静态成员就已经存在了,访问一个内存中不存在的东西当然会出错。

你可能感兴趣的:(Java)