Java无法从静态上下文中引用非静态方法

The First

这个问题出现在类的方法上。
最简单的解决方案就是在报错的方法前加上 static:
栗子:public void Function()——>public static void Function()
(后附完整测试代码)

更深层次的理解如下
首先要知道的是: 静态的方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,它只有在对象存在时引用,因此如果在对象未创建实例时我们在静态方法中调用了非静态成员方法自然是非法的,所以会报错。

举个栗子:
现在有两个类:Main类和Function类,Functionl中有public void fun1();public static void fun2();。
在这里插入图片描述
在这里插入图片描述
一般来说,要使用Function类中的方法,首先想到的是先创建一个实例。Function fun = new Function();
fun.fun1();
在这里插入图片描述
结果如图
在这里插入图片描述
只要通过实例fun调用,就不必在public void fun1()上添加static。

除上面的操作能调用方法之外,还有一种操作:不创建实例调用方法。Function.fun2();在这里插入图片描述
结果如图
然而调用public void fun2();失败了。
在这里插入图片描述
所以public void fun2();就要修改为public static void fun2();
结果如图
在这里插入图片描述
贴个完整的代码

Main

public class Main
{	
	public static void main(String[] args)
	{
		Function fun= new Function();
		fun.fun1();
		Function.fun2();
	}
}

Function

public class Function
{	
	public void fun1()
	{
		System.out.println("1.通过实例调用方法。");
	}
	public static void fun2()
	{
		System.out.println("2.不创建实例直接调用放方法。");
	}
}

我用的编译器是JCreator,创建了一个Main.java和Function.java才能执行,如果把Function类放到Main中就会报错,也不知道怎么回事,改天再查吧。

猜你喜欢

转载自blog.csdn.net/qq_43228135/article/details/83106716