java基础笔记之static关键字的学习

                                                                     我的java笔记,期待与您交流!

以前遇到static关键字有些时候容易犯浑,今天来把static关键字的用法来整理一下.

开始做笔记!

一:static就是静态的意思,可以修饰成员变量和成员方法.

二:被静态修饰的成员的特点:

1,随着类的加载而加载,也正因为如此,才使得静态的成员优先于对象存在.

2,被静态修饰的成员被类所有的对象所共享.

3,可以通过类名调用,也可以通过对象调用.一般是通过类名调用.

下面附图一张来说明static用法:

我们可以看到在上图中,我们可以用实例对象s1,s2调用静态修饰的staticMark,可以说明静态修饰的成员是被该类所有成员所共享的,其实该静态成员是以字节码形式放在数据共享区中,有且只有一份,被该类的所有的实例对象所共享.

而我们也可以直接用Student类名来调用,这就说明static修饰的成员可以用类名直接方便的调用

刚才我们在静态方法中调用静态成员可以,现在我们在非静态方法中调用静态成员行不行呢?

可以看到我们在一个普通的method方法中调用静态修饰的成员依旧可以,并且可以运行,所以可以在非静态成员中调用静态成员,其实原因就是静态成员随着类的加载而加载,故优先于实例对象存在,所以后来的实例对象当然可以找到先存在的静态成员,然后去调用它.

但是我们可以想一下,如果在静态中调用非静态会怎么样呢,按照刚才的猜想应该是失败的,因为静态是先加载的,调用还未加载的非静态是不行的

下面就代码论证一下

 

我们可以看到在static修饰的main()方法中,调用该类的非静态成员method()方法和成员变量temp都不行,报的错是

这两句话都是在说不能再静态中引用非静态成员,原因就是先后加载的问题.

三:区别一下静态成员变量和非静态成员变量:

首先: 1,所属不同:静态成员变量属于类,是类变量,

非静态成员变量属于实例对象,是成员变量.

2,内存位置不同:前者在内存中的数据共享区(静态方法区)

后者在堆内存;

3,生命周期不同:前者是随着类的加载而加载,随着类的消失而消失

后者是随着对象的加载而加载,随着对象的消失而消失.

4,调用不同:前者可以通过类名,对象调用

后者只能通过对象调用

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值