zl程序教程

您现在的位置是:首页 >  其他

当前栏目

关于Non-static method xx cannot be referenced from a static context的分析与解决方案

2023-03-31 10:52:17 时间

关于static method的解释


想要解决上面的报错,我们首先需要了解什么叫做static method(静态方法)。

静态方法为类所有,一般情况下我们通过类来使用(而对于不加static的实例方法我们则只能通过对象的来调用)。
以下我们通过一些代码的例子来对此进行说明:

在同一类里面调用静态方法与实例方法的区别:

点击查看代码
public class Main{
	public static viod main(String[] args){
	//Test01();//直接调用Test01会报Non-static method xx cannot be referenced from a static context.
	//用如下方式调用Test01
	Main m=new Main();
	m.Test01();
	
	//Test02可以直接调用,通过类
	Main.Test02();
	
	}
	public viod Test01(){
	System.out.println("此方法为非静态方法")
	}
	
	public static viod Test02(){
	System.out.println("此方法为静态方法")
	}
}

通过上面的代码不难看出我们的**main()方法是静态的**,如果要在 main() 方法中调用本类中的其他方法,则该方法也必须是静态的,否则需要先创建本类的实例对象,然后再通过对象调用该成员方法。

在不同类里面调用静态方法与实例方法的区别:

点击查看代码
public class Main{
	public static viod main(String[] args){
		TestNonStatic.Test01();//会报错,不能直接引用其他类的非静态方法
		TestNonStatic testnonstatic=new TestNonStatic();
		TestNonStatic.Test01;//依然可以通过创建一个实体对象来访问。
		TestNonStatic.Test02();
	}
}

class TestNonStatic{
	viod Test01(){
	System.out.println("其他类中的实例方法")
	}
	static void Test02(){
	System.out.printlin("其他类中的静态方法")
	}
}

通过以上代码不难看出静态方法与实例方法的主要区别在于是否需要创建一个对象来引用所对应的方法。只要满足封装的条件在同一类或者不同类均不影响调用。(从内存模型上来讲,我们的静态成员是处于堆中的,已经被分配了内存,所以我们可以直接对其进行调用。而非静态成员是没有被分配内存的,只有当他们被对象化,实例化才能被我们调用)。