实例成员与类成员(5)

持续更新中😬 加个关注,后续上新不错过~

1. 实例变量和类变量的声明

类体中包括成员变量的声明和方法的定义,而成员变量又可细分为实例变量和类变量。

在声明成员变量时,用关键字static给予修饰的称作类变量,否则称作实例变量(类变量也称为static变量、静态变量),例如:

class Dog{
    float x; // 实例变量
    static int y; // 类变量
}

注意:static需放在变量的类型的前面

2. 实例变量和类变量的区别

2.1 不同对象的实例变量互不相同

一个类通过使用new运算符可以创建多个不同的对象,这些对象将被分配不同的(成员)变量。即分配给不同对象的实例变量占有不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的实例对象。

2.2 所有对象共享类变量

如果类中有类变量,当使用new运算符创建多个不同的对象时,分配给这些对象的类变量占有相同的一处内存,改变其中一个对象的类变量会影响其他对象的类变量。

2.3 通过类名直接访问类变量

当Java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类中的实例变量不会被分配内存。但是,类中的类变量,在类被加载到内存时,就分配了相应的内存空间。该类创建的所有对象的类变量是相同的一处内存空间,类变量的内存空间直到程序退出运行,才释放所占有的内存。

因此类变量不仅可以通过某个对象访问,也可以直接通过类名访问。对象的实例变量可以该对象访问,但不能使用类名访问

注意:类变量似乎破坏了封装性,其实不然,当对象调用实例方法时,该方法中出现的类变量也是该对象的变量,只不过这个变量和所有的其他对象共享而已。

3. 实例方法和类方法的定义

类中的方法可以分为实例方法和类方法。方法声明时,方法类型前面不加关键字static修饰的是实例方法,加static关键字修饰的是类方法(静态方法)。
注意:static需放在方法的类型的前面

4. 实例方法和类方法的区别

4.1 对象调用实例方法

当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,只有该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。

当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不在分配入口地址。也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。

实例方法中不仅可以操作实例变量,也可以操作类变量。

4.2 类名调用类方法

对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址,从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。类方法的入口地址知道程序退出才被取消。

注意:实例方法不能通过类名调用,只能由对象来调用。

和实例方法不同的是,类方法不可以操作实例变量,这是因为在类创建对象之前,实例成员变量还没有分配内存。(也不能用this)

4.3 设计类方法的原则

对于static方法,不必创建对象就可以用类名直接调用他(创建对象会导致类中的实例变量被分配内存空间)。

如果一个方法不需要操作类中的任何实例变量,就可以满足程序的需要,考虑将这样的方法设计为一个static方法。 如Java类库提供的Arrays类,该类中许多方法都是static方法。再如,Java类库提供的Math类,该类中所有方法都是static方法。


若有帮助的话,请点个赞吧!😊

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值