实例变量和类变量、类方法和实例方法

类体中包括成员变量局部变量,而成员变量又可以细分为实例变量和类变量,在声明成员变量的时候,用static给予修饰的称作类变量,否则称作实例变量。(类变量也称为static变量,静态变量)
那么,类变量和实例变量有什么区别呢?
我们知道,一个类通过使用new运算符可以创建多个不同的对象,这些对象将被分配不同的成员变量,说的更精确写就是:分配给不通对象实例变量咱有不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的实例变量。
然而,如果类中有类变量,当使用new运算符创建多个不同的对象时,分配给这些对象的这个类变量占有相同的一出内存,改变其中一个对象的这个类变量,那么将会影响到其他对于下部分的这个类变量,也就算说不同的对象共享类变量。
既然这样,那么我要要怎么访问类变量呢?
不仅仅可以通过某个对象访问,也可以直接通过类名访问。而实例变量不同,只能用某个对象访问。
对象调用实例方法
当类的字节码文件被加载到内存是,类的实例方法不会被分配到入口地址,只有该类创建对象后,类中的实例方法才分配入口地址。从而实例方法可以被创建的任何对象调用执行。这里需要注意的是,当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址。也就是说,方法的入口地址被所有的对象共享,当所有的对象不存在时,方法的入口地址才会被取消。
实例方法中不仅可以操作实例变量,也可以操作类变量,当对象调用实例方法时,该方法中出现的实例变量就是分配给该对象的实例变量,该方法中出现的类变量也是分配给该对象的变量,只不过这个变量和所有其他的对象共享而已。
类名调用类方法
对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址,从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用,类方法的入口地址知道程序退出了才会被取消。需要注意的是实例方法不能通过类名调用,只能由对象调用。
和实例方法不同的是,类方法不可以操作实例变量,这是因为在类创建对象之前,实例成员变量还没有分配内存。
关于设计类方法的原则
对于static方法,不必创建对象就可以用类名直接调用它(创建对象会导致类中的实例变量被分配到内存空间中)。如果一个方法不需要操作类中的任何实例变量,就可以满足程序的需要的话,就可以考虑将这样的方法设计为一个static方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值