static方法和非static方法的区别(java)
2017-08-18 11:55
232 查看
● 生命周期(Lifecycle):
静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。
非静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM 回收之后,也跟着消失。
● 在内存中存储位置
静态方法和静态变量创建后始终使用同一块内存,是连续的。
非静态方法会存在于内存的多个地方,是离散的。
● 效率
静态方法的使用效率比非静态方法的效率高。
● 线程安全
静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。
非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。
● 使用范围
静态方法:⒈ 有静态属性的类,一般会定义静态方法。⒉ 没有属性的类,一般会定义静态方法。⒊ 如果一个方法与他所在类的实例对象无关,那么它就应该是静态的。静态方法可以被继承但是不能被覆盖。
● 总计
如果静态方法在系统中定义太多,会占用大量的资源,最后造成内存溢出,所以静态方法不能滥用。如果从线程安全、性能、兼容性上来看,选用实例化方法为宜。
静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。
非静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM 回收之后,也跟着消失。
● 在内存中存储位置
静态方法和静态变量创建后始终使用同一块内存,是连续的。
非静态方法会存在于内存的多个地方,是离散的。
● 效率
静态方法的使用效率比非静态方法的效率高。
● 线程安全
静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。
非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。
● 使用范围
静态方法:⒈ 有静态属性的类,一般会定义静态方法。⒉ 没有属性的类,一般会定义静态方法。⒊ 如果一个方法与他所在类的实例对象无关,那么它就应该是静态的。静态方法可以被继承但是不能被覆盖。
● 总计
如果静态方法在系统中定义太多,会占用大量的资源,最后造成内存溢出,所以静态方法不能滥用。如果从线程安全、性能、兼容性上来看,选用实例化方法为宜。
相关文章推荐
- Java多线程之Synchronized应用在static和非static方法上的区别
- Java中synchronized 修饰在static方法和非static方法的区别
- static方法和非static方法的区别(java)
- java static块和static方法及static方法和非static方法的区别
- Java中static修饰的方法和非static修饰的方法的区别
- java 关于对“是否可以从一个static方法内部发出对非static方法的调用”问题的理解
- Java基础问题:static方法中为什么不能使用非static的方法或变量
- java多线程下synchronized修饰static方法与非static方法的区别
- java——多线程——单例模式的static方法和非static方法是否是线程安全的?
- 浅谈Java中static和非static的区别
- Java语言中synchronized 修饰在 static方法和 非static方法的区别
- Java中普通方法与静态方法static区别
- Java中static方法和普通方法的区别
- java基础--java静态代码块和静态方法的区别、static用法
- synchronized 修饰在 static方法和非static方法的区别
- synchronized 修饰在 static方法和非static方法的区别
- synchronized 修饰在 static方法和非static方法的区别
- java static 方法与普通方法区别
- java回顾篇——static和非static的区别
- Java中主类中定义方法加static和不加static的区别