JAVA学习笔记(一)static关键字

static关键字

static(静态的),在类体中用关键字static声明的变量叫做类变量,否则即为实例变量。用关键字static声明的方法叫做类方法,否则即为实例方法。

类变量与实例变量的区别

要想彻底理解这个问题,我们先需要知道类中的实例变量也就是普通变量(方便理解,后面都叫普通变量)是什么时候分配内存的,当我们声明了一个对象,此时该对象的普通变量还没有分配内存,当我们用new 调用该类的构造方法的时候,此时给该对象拥有的普通变量分配内存,同时new 计算出一个引用值赋值给该对象,到此时一个对象就创建好了。

简单说就是当我们是给对象分配内存空间时就是给该对象所拥有的普通变量分配内存的时候。那么类变量什么时候分配内存的呢?

当java程序执行时,类的字节码文件被加载到内存,此时类变量就已经分配好了内存空间,且此地址固定。那么当我们创建对象时,对象拥有的普通变量此时分配内存空间,但是类变量已经分配了内存空间,所以此时类变量不分配内存空间。

那么这样我们就会发现当我们创建多个不同对象时,类变量的内存空间一直是一开始分配好的,所以多个不同对象拥有的是相同的一个类变量,这说明类变量被大家共享。

由于类变量一开始就分配了内存空间,当我们没有创建对象,这时候我们无法通过对象名去访问该类变量,但是类变量却已经存在我们计算机上了,此时可以类名来访问类变量。

1.分配内存的时间不同,类变量在类的字节码文件被加载到内存时分配内存空间,实例变量在对象创建时分配内存空间

2.当对象创建好以后,该对象拥有的实例变量为自己独有,类变量被多个对象共享

3.类变量可以通过类名访问,当然也可以通过对象名访问

类方法与实例方法的区别

类比,我们一下就想到了类方法肯定也是在类字节码被加载到内存时分配了相应的入口地址。

但是实例方法(普通方法),是在第一个对象创建时就给所有普通方法分配了唯一的入口地址,此后其他对象创建时不在分配地址,因为显然每个对象用的普通方法都是一样的,所以分配一次就好了。

1.分配入口地址的时间不同,类方法在类字节码被加载到内存时分配了相应的入口地址,实例方法第一次创建对象的时候分配唯一的入口地址。

2.可以使用类名调用类方法

3.类方法不可以操作实例变量
关于这一点很简单,因为类方法分配地址比实例变量早,如果我们没有创建对象,也就没有实例变量被分配内存空间,此时类方法去操作一个不存在的变量显然会出错

4.类方法在程序结束以后才会被回收入口地址,而实例方法在没有对象存在时就会被回收入口地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值