static方法和非static方法的区别(java)

本文探讨了静态方法与非静态方法在生命周期、内存存储位置、效率、线程安全及使用范围等方面的区别,并讨论了它们在软件开发中的合理应用。

● 生命周期(Lifecycle):

静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。

非静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM 回收之后,也跟着消失。 

● 在内存中存储位置

静态方法和静态变量创建后始终使用同一块内存,是连续的。

非静态方法会存在于内存的多个地方,是离散的。

● 效率

 静态方法的使用效率比非静态方法的效率高。

● 线程安全

静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。

非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。

● 使用范围

静态方法:⒈ 有静态属性的类,一般会定义静态方法。⒉ 没有属性的类,一般会定义静态方法。⒊ 如果一个方法与他所在类的实例对象无关,那么它就应该是静态的。静态方法可以被继承但是不能被覆盖

●  总计

如果静态方法在系统中定义太多,会占用大量的资源,最后造成内存溢出,所以静态方法不能滥用。如果从线程安全、性能、兼容性上来看,选用实例化方法为宜。

Java 中,**`static` 方法**** `static` 方法**(实例方法)有显著的区别,主要体现在调用方式、访问权限、以及使用场景上。 --- ### ✅ 一、定义区别 - **`static` 方法(静态方法)**: - 属于类本身,而是类的实例。 - 可以通过类名直接调用。 - 示例:`ClassName.methodName()` - ** `static` 方法(实例方法)**: - 属于类的某个具体对象。 - 必须先创建对象,才能调用。 - 示例:`MyClass obj = new MyClass(); obj.methodName();` --- ### ✅ 二、主要区别对比表: | 特性 | `static` 方法 | `static` 方法 | |------|----------------|-------------------| | 所属 | 类级别 | 实例级别 | | 调用方式 | 类名直接调用 | 必须通过对象调用 | | 可否访问实例变量 | ❌ 能访问 static 员(变量/方法) | ✅ 可以访问所有员 | | 是否可以重写(Override) | ❌ 能被重写 | ✅ 可以被重写 | | 使用场景 | 工具方法、共享逻辑、与对象状态无关的操作 | 与对象状态相关的操作 | --- ### ✅ 三、示例代码 ```java public class Person { private String name; private static int count = 0; public Person(String name) { this.name = name; count++; } // 静态方法:只能访问静态员 public static int getCount() { return count; } // 实例方法:可以访问静态静态员 public void introduce() { System.out.println("Hello, I'm " + name); } public static void main(String[] args) { // 静态方法直接通过类名调用 System.out.println("Total persons: " + Person.getCount()); Person p1 = new Person("Alice"); p1.introduce(); // 实例方法必须通过对象调用 } } ``` --- ### ✅ 四、注意事项 - **静态方法能使用 `this` 或 `super`**,因为它们依赖对象。 - **静态方法能被重写(Override)**,但可以被隐藏(通过在子类中定义同名静态方法)。 - **静态方法适合做工具类方法**,如 `Math.sqrt()`、`Arrays.sort()` 等。 --- ### ✅ 五、总结 - `static` 方法属于类, `static` 方法属于对象。 - 静态方法适用于共享逻辑、工具方法等场景。 - 实例方法用于操作对象的状态行为。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值