区别
静态方法会随着类的加载装入内存中,并且只为类创建了一个静态副本,只分配一个内存空间,虽然该类可能有多个对象,但是静态成员只有一份,为多个类共享。
非静态方法属于对象的具体实例,只有在类的对象创建时(new 对象时…)在对象的内存中才有这个方法的代码段。
因为静态方法随着类的加载时候就已经构建,时间要早于非静态方法,故静态方法只能调用静态方法和静态变量(因为编译静态方法的时候非静态方法和非静态变量还没有编译),而非静态方法却可以调用静态方法和成员。
静态方法使用
类名.方法名或者对象名.方法名
非静态方法使用
对象名.方法名
多线程调用静态方法是否线程安全?
多线程中使用同一个静态方法时,每个线程使用方法内局部变量的副本,而共享一个静态字段(static field)。所以说,如果该静态方法不去操作一个静态成员,只在方法内部使用局部变量,不会引起安全性问题。但是,如果该静态方法操作了一个静态字段,则需要静态方法中采用互斥访问的方式进行安全处理。
即多线程调用静态方法,会复制一份代码,所以方法是安全。但静态变量在java 虚拟机中是唯一。如果在方法中修改全局静态变量,就会线程不安全。
https://blog.csdn.net/xiamin/article/details/102696179
https://blog.csdn.net/Lzz0614/article/details/86513575