我们换个简单易懂的说法,这两句的区别就在于,能不能直接用类名访问。
很好理解的不是吗?
假如,我有一个类,如下图所示:
接下来先实例化一个对象,ca,你会发现它不仅可以访问普通的方法,也可以访问静态的方法
那这又有什么用呢?如果每次我用一个类的方法之前我都要实例化一下这个类,那么无疑是对内存资源的浪费。于是乎,静态方法就带来了便利,如下图所示:
希望以上对你有所帮助。
public void 修饰是非静态方法,该类方法属于对象,在对象初始化(new Object())后才能被调用;public static void 修饰是静态方法,属于类,使用类名.方法名直接调用。正如答主 @小透明 所说,非静态方法之间可以互相调用,非静态方法也可以调用静态方法;但是静态方法不可以直接调用(未初始化的)非静态方法。由于 public static void main 作静态方法,所以遵循这个原则。但是 Java 可以通过对象名调用静态方法(对象名.静态方法)。Java 中不会导致语法错误(syntax error),但是不推荐这样使用,静态方法与非静态方法调用时应当绝对区分;而且其他 OOP 语言如 C#,Swift,Objective-C 都没有这样的语法。
static:静态方法可以直接通过类名调用,任何实例也可以调用,声明为static的变量其实就是全局变量,不能以任何方式引用this或者super
(如果是static修饰的不需要实例化对象,就可以引用成员)