一、实例变量和类变量的定义

Java程序的变量可分为成员变量和局部变量。

  • 局部变量(作用时间短,存储在方法的栈中)
  1. 形参:由方法签名中定义,由方法调用者为其赋值,随方法的结束消亡。
  2. 方法内的局部变量:在方法内部定义的,必须在方法内对其进行显式初始化。从初始化完成后开始生效,随方法的结束而消亡。
  3. 代码块内的局部变量:在代码块内定义的,必须在代码块内对其进行显式初始化。初始化完成后开始生效,随代码块的结束而消亡。
  • 成员变量(类体内 定义的变量)
  1. 实例变量(非静态变量):没有static修饰
  2. 类变量(静态变量):有static修饰

注意:static的作用将实例成员变为类成员,只能修饰类里的成员。

public class ErrorDef{//下面代码将提示:非法前向引用int num1 = num2 + 2;int num2 = 20;
}
public class ErrorDef2{//下面代码将提示:非法向前引用static int num1 = num2 + 2;static int num2 = 20;
}
public class RightDef{//下面代码完全正常int num1 = num2 + 2;static int num2 = 20;
}

二、实例变量和类变量的属性

在同一个JVM内,每个类只对应一个Class对象,但每个类可以创建多个Java对象。由于 每个类只对应一个Class对象,所以同一个JVM内的一个类的变量只需要一块内存空间;对于实例变量,该类每创建一次实例,就需要为实例变量分配一块内存空间。

class Person{String name;int age;static int eyeNum;
}
public class FieldTest{public static void main(String[] args){Person.eyeNum = 2;   //------(1)
        System.out.println(Person.eyeNum);Person p = new Person();p.name = "猪八戒";p.age = 300;System.out.println(p.eyeNum);//----(2)
        Person p2 = new Person();p2.name = "孙悟空";p2.age = 500;p2.eyeNum = 3;    //------(3)
        System.out.println(p.eyeNum);System.out.println(p2.eyeNum);System.out.println(Person.eyeNum);    }
}

上面代码的内存分配过程如下所示:

转载于:https://www.cnblogs.com/wangqi327/p/4484284.html

对象与内存控制1---实例变量和类变量相关推荐

  1. java对象与内存控制

    当变量编译时类型和运行时类型不同时,通过该变量访问它引用对象的实例变量时,实例变量的值由声明时的类型决定:但通过该变量调用它引用对象的方法时,由实际引用对象决定. 调用被子类重写的方法:子类构造函数初 ...

  2. 在对象内部尽量直接访问实例变量 --Effictive Objective-C 抄书

    在对象之外访问实例变量时,应该总是通过属性来做.在那么在对象内部访问实例变量的时候,又该如何呢? 这是 OCer们一直激烈讨论的问题.有人认为,无论什么情况,都应该通过属性来访问实例变量;也有人说,& ...

  3. Python基础学习——面向对象编程(第一讲:面向对象概述、面向对象三个基本特征(封装性、继承性、多态性)、类和对象(定义类、创建和使用对象、实例变量、类变量、构造方法、实例方法、类方法、静态方法))

    面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的. 1.面向对象概述 面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系 ...

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

    类体中包括成员变量和局部变量,而成员变量又可以细分为实例变量和类变量,在声明成员变量的时候,用static给予修饰的称作类变量,否则称作实例变量.(类变量也称为static变量,静态变量) 那么,类变 ...

  5. 实例变量和类变量、实例方法类方法区别

    实例变量 实例变量声明在一个类中,但在方法.构造方法和语句块之外: 当一个对象被实例化之后,每个实例变量的值就跟着确定: 实例变量在对象创建的时候创建,在对象被销毁的时候销毁: 实例变量的值应该至少被 ...

  6. java实例变量成员变量_Java的类成员变量、实例变量、类变量,成员方法、实例方法、类方法...

    总是被这些相似的概念搞晕,查阅了资料后做个小总结,以变量为例,方法辨析类似. 1.多胞胎名字汇总辨析 成员变量和成员方法是范围最大的定义,提到成员变量就可以理解成你所定义在一个类体中的各类变量的统称, ...

  7. 7、在对象内部尽量直接访问实例变量

    本文概要: 1.首先给出结论是:除了几种特殊情况外,在读取实例变量的时候采用直接访问的形式,而在设置实例变量的时候通过属性来做. 2.讲解了使用getter.setter的好处. 3.列举了几种上面提 ...

  8. 程序员基本功02对象与内存控制

    以下的答案为我自己的读书心得(捏造的答案),如有童鞋不忍直视,还请不吝赐教 1.实例变量属于JAVA对象 2.类变量属于类本身 类体内定义的变量称为成员变量,没有static修饰的为非静态变量或实例变 ...

  9. python中静态方法可以访问对象变量_python 面向对象-实例变量、类变量、实例方法、类方法、静态方法...

    需要搞清楚的是, 实例方法与类方法是什么?类变量和实例变量又是什么? 类方法中如何访问类变量.类方法要如何调用?当然 实例方法中如何访问类变量?能 实例方法访问实例变量,实例方法如何被调用?当然 类方 ...

最新文章

  1. python--切片
  2. 用Express搭建 blog (一)
  3. linux下maxwell安装教程,完美起航-Maxwell采集binlog系列(二)-Linux系统安装MySQL
  4. docker-maven-plugin 发布镜像到 window环境的docker服务器
  5. iOS Xcode Implicit declaration of function 'callbackBlock' is invalid in C99
  6. 那些年,我们踩过的 Java 坑 | 凌云时刻
  7. 云服务器哪家强?AWS、Azure、阿里云、腾讯云、华为云深度评测
  8. 三维地图开发三维地图服务器
  9. 什么是smart原则,有什么好的例子
  10. 传统语音识别介绍【二】—— 特征提取
  11. java中decrement,Java LongAdder decrement()用法及代码示例
  12. JSONObject.parseObject
  13. 车辆管理系统设计C++代码
  14. 达梦主备集群,主库部分redo被删除或损坏,故障恢复。
  15. MyDocument exe病毒查杀方法
  16. OpenGL编程设置
  17. chrome浏览器会自动添加淘宝、京东等书签的解决方法
  18. 小戴门户站转来的mysql_fetch_array()运用
  19. 计算机网络——TCP/IP协议网络原理
  20. 崇州 鸡冠山 白塔湖 九龙沟 罨画池 陆游祠{组图及介绍}

热门文章

  1. 计算机网络总结各种协议首部的长度,计算机网络协议总结
  2. android切环境插件,Android Studio下Flutter环境搭建图文教程
  3. access工资明细表_《ACCESS》工资管理完整(整理).doc
  4. jemeter python接口自动化测试平台_ant+jmeter+Jenkins接口自动化测试实战(1)
  5. 系统试运行总结报告_制药行业计算机化系统验证与数据可靠性实施精要
  6. java在退出前释放资源_Java中如何通过try优雅地释放资源?
  7. java有趣的技术分享ppt_技术分享 | 关于 MySQL Online DDL 有趣的验证
  8. jmeter吞吐量_深入理解Jmeter常用定时器
  9. 为什么parsefloat加出来还是字符串_Python 100天从新手到大师 | Day 7 字符串与数据结构...
  10. python代码覆盖率测试_利用coverage工具进行Python代码覆盖率测试