
本文共 1043 字,大约阅读时间需要 3 分钟。
- 实例变量和类变量的区别
- 实例方法和类方法的区别
类体的定义包括成员变量的定义和方法的定义
成员变量又分为实例变量和类变量,用static修饰的变量是类变量
两个变量的生命周期不同
成员变量随着对象的创建而存在,随着对象的回收而释放。
静态变量在第一次被访问时创建,在程序结束时销毁。
数据存储位置不同
成员变量存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
除了构造方法外,其他的方法又分为实例方法和类方法,在方法声明中用关键字static修饰的方法称为类方法或者静态方法
注意:
实例方法可以调用该类的实例方法和类方法
类方法只能调用该类的类方法,不能调用实例方法
一:实例变量和类变量的区别
一个类可以通过new运算符创建多个不同的对象,这些对象将被分配不同的内存空间
其中,不同对象的实例变量分配不同的内存空间
如果类中有类变量,所有对象的类变量都分配在相同的内存空间
如果改变一个对象的这个类的类变量,会影响其他对象的这个类变量
也就是对象共享类变量
Java程序执行------类的字节码文件被加载到内存------类变量被分配到内存,如果类没创建对象,类中的实例方法不会分配内存,如果类有创建对象,不同对象的实例变量分配不同的内存空间,而类变量不会重新分配内存------程序退出,类变量释放占有的内存
注意:
- 改变一个对象的类变量就同时改变了其他对象的这个类变量
- 类变量可以通过某个对象访问,也可以直接通过类名访问
- 改变一个对象的实例变量不会改变其他的对象的实例变量
- 实例变量可以通过对象访问,不能使用类名直接访问
二:实例方法和类方法的区别
对象在创建之后,都可以用“.”运算符调用这些方法
Java程序执行------类的字节码文件被加载到内存------
1.类方法分配入口地址,因此类名也能调用,类方法的入口地址直到程序退出才取消
2.类的实例方法不会分配入口地址,在该类创建对象后,类的实例方法才分配入口地址(注意的是:第一个对象创建后分配入口地址,后面的不会再分配,方法的入口地址被所有对象共享,当所有对象不存在时候才取消方法的入口地址)
注意:
(1)在java语言中,类方法不可以操作实例变量和实例方法
那是因为在类创建对象之前,实例成员变量还没有分配内存,实例方法也还没有入口地址
(2)如果一个方法不用操作实例变量就能实现功能,可以考虑声明为类方法,这样可以避免创建对象浪费内存
发表评论
最新留言
关于作者
