java中静态方法与非静态方法的区别及非静态方法的注意事项

本文详细介绍了Java中的静态方法与非静态方法的区别,包括生命周期、调用方式、访问限制及执行顺序。静态方法在类装载时即加载到内存,无需对象即可调用,而非静态方法需先创建对象。静态方法只能访问静态成员,不允许调用非静态成员,且不能使用this关键字。了解这些区别对于理解Java类和对象的概念至关重要。
摘要由CSDN通过智能技术生成

一旦使用static修饰成员方法,那么这就成为了静态方法。静态方法不属于对象,而是属于类的。
如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它。
如果有了static关键字,那么不需要创建对象,直接就能通过类名称来使用它。

无论是成员变量,还是成员方法。如果有了static,都推荐使用类名称进行调用。
静态变量:类名称.静态变量
静态方法:类名称.静态方法()

静态方法与非静态方法的区别:
1.生命周期
与静态成员变量一样,属于类本身,在类装载的时候被装载到内存中,不自动进行销毁,会一直存在内存中,直到JVM关闭,静态方法的生命周期从进程创建时就开始,一直到进程结束,所以说静态方法是全局的,贯穿整个进程。

非静态方法的生命周期,从实例化对象开始,一直到实例化对象被注销回收之后结束。

所以非静态方法的生命周期是短于静态方法的生命周期,这也是非静态方法中不能调用静态方法的原因。

2.调用方式
在外部调用静态方法时,可以使用 “类名.方法名”的方式,也可以使用“对象.方法名”的方式,也就是说调用静态方法时无需创建对象。

实例方法只能使用“对象.方法名的方式”。

3.访问限制
静态方法在访问本类的成员时,只允许访问静态成员(即静态变量和静态方法),而不允许访问非静态变量和非静态方法;而非静态方法则无此限制。
4.执行顺序
当一个class文件被ClassLoader load进入JVM之后,方法指令保存在Stack中,此时Heap区并没有数据。然后程序技术器开始执行指令,如果是静态方法,直接依次执行指令代码,当然此时指令代码是不能访问Heapshuju数据区的;如果是非静态方法(非静态方法有一个隐含的传入参数,该参数是JVM给它的,这个参数就是实例对象在Stack中的内存地址,因此实例方法才可以找到在Heap中属于自己的数据),则在调用前必须实例化该对象,在Heap中分配数据,并将Stack中的内存指针通过JVM的隐含参数传给非静态方法。若不实例化直接调用,由于隐含参数没有值,会报错。

注意事项:
1.静态只能直接访问静态,不能直接访问非静态。
原因:因为内存当中是先有的静态内容,后有的非静态内容。
“先人不知道后人,但是后人知道先人。”
2.静态方法中不能用this。
原因:this代表当前对象,通过谁调用的方法,谁就是当前对象。调用静态方法时会被javac强制翻译成“类名称.静态方法名”,
故静态方法中不能用this。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

征程123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值