java static方法中的变量_从零开始的Java学习记录(13)——static关键字,静态方法/变量与普通方法/变量的区别...

d68074531e4d312fb2f28a558efbb852.png内筒概览

8b22ab26ef493287a87a82da4f4b89c6.png

1. 创建对象示意图

cdbca35c5d2eb4f22082820748f14558.png创建对象示意图

左边为栈(栈帧是指栈里的一小块空间),右边为堆。

所谓栈可以理解为一本书的目录,而堆为这本书的正文部分。即真正的对象(正文)是存在堆里面的,而栈里只是保存这个对象的地址(第几页)。

编号3中的主方法public static void main(String[] args){}是所有程序的入口。没有主方法程序是运行不了的。

2. 静态关键字static

上图中有个叫静态区的空间,即static area,凡是被static修饰的方法与变量都存于此处,即静态变量与静态方法,也叫类变量与类方法。正如上所说堆犹如一本书的正文,但是此书正文四杂乱无序,所以需要一小页的目录(栈)来帮助查找,而静态区就像此书的序言,不管内容多乱,但是序言总是在最前面的,很容易就翻到的。

8b22ab26ef493287a87a82da4f4b89c6.png

3. 静态变量(类变量)static修饰的静态方法会随着类的定义而被分配和装载入内存中,编译器只为整个类创建了一个静态变量的副本,也就是只分配一个内存空间,虽然可能有多个实例,但这些实例共享该内存,特别值得注意的是,任何一个对象对静态数据成员的修改,都会影响其它对象。

也就是说,被static修饰的成员变量,就变成了静态变量(类变量),只会加载一次。只会加载一次说明类变量是共享的唯一的。

举个栗子,你在大学寝室玩电脑,这时你室友也看到了,也想玩,如果电脑(成员变量)没被static修饰,你室友也会去赋值一台属于自己的电脑。但是如果电脑(成员变量)被static修饰了,就变成了共享的电脑(即变成了类变量,也叫静态变量),你的电脑不再是你的了,而是属于全寝室(类),你室友对电脑的操作也会影响到你,如你室友给电脑屏幕上写个正字,那轮到你玩的时候,该电脑屏幕上也会有个正字。

再说一次,普通变量从属于对象,即每个人都有自己的电脑,类变量从属于类,即该类(寝室)的对象都只能玩同一台电脑。

8b22ab26ef493287a87a82da4f4b89c6.png

4. 静态方法(类方法)

被static修饰的成员方法,就变成了静态方法(类方法),即从属于类的方法,因为不从属于对象,可以不创建对象即可调用。

举个栗子,有个水池类,有加水的水管(方法),如果没有被static修饰的加水方法,是要先new一个水池类的对象,再通过对象调用,相当于每个水池都有自己的水管,而被static修饰的方法,则相当于所有水池类里的对象都共用一条水管,不用问用哪个水池的水管(不必通过对象调用,)。fdb79a0b98b3b9a18cfe29bb9f377036.png静态方法

补充一点,我们知道,两个非静态方法在同一类下是可以直接引用的(都在一个类空间里,容易找)。

而即便处于同一类体的方法,静态方法是不能直接引用非静态方法的,正如前面所说,静态区相当于一块固定的空间,从固定的空间去无序的空间找是很难找到的(敌暗我明)。而非静态里却可以直接调用静态方法,因为从无序的空间去有序的空间找是容易的(敌明我暗)。

8ad427074752a591314f13787d21a78c.png敌暗我明、敌明我暗

8b22ab26ef493287a87a82da4f4b89c6.png

5. 通过4个例子深入清楚知道静态非静态之间的区别

重要的事再说一遍:静态变量与静态方法之所以可以直接调用是因为它们从属于类,不从属于对象,故又称类变量与类方法,再以四张图简单对比静态与非静态的区别。

5.1非静态变量,非静态方法,各有各的车,各开各的车。37eabed158e80ce102b296a394fd8fad.png非静态变量,非静态方法,各有各的车,各开各的车。

5.2静态变量,非静态方法,大家开唯一的一辆车。befeda77bc5a068fa5ce26f3b1ff4fe5.png静态变量,非静态方法,大家开唯一的一辆车。

5.3静态变量,静态方法,不用通过对象(人)就能开,上帝(灵魂)开大家唯一的一辆车.153e5feee4aeef41636383a9eca089b3.png静态变量,静态方法,不用通过对象(人)就能开,上帝(灵魂)开大家唯一的一辆车.

5.4非静态变量,静态方法,上帝可以开每个人的车,但必须告诉上帝开哪辆(参数)。61b646a3ca16b3e9f17979b2956f7a14.png非静态变量,静态方法,上帝可以开每个人的车,但必须告诉上帝开哪辆(参数)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值