以下的答案为我自己的读书心得(捏造的答案),如有童鞋不忍直视,还请不吝赐教

1、实例变量属于JAVA对象

2、类变量属于类本身

类体内定义的变量称为成员变量,没有static修饰的为非静态变量或实例变量,有static修饰的为静态变量或类变量。static只能修饰类里的成员,不能修饰外部类、局部变量、局部内部类。

3、实例变量的初始化细节

实例变量属于JAVA对象本身,每次程序创建对象时需要为实例变量分配内存空间,并进行初始化。

程序在3个地方对实例变量进行初始化:定义时指定初始值,非静态初始化块中指定初始值,构造器中指定初始值。前俩种方法比第三种更早执行。

4、类变量的初始化细节

JAVA程序运行时,系统只为类变量分配一次内存空间,执行一次初始化。

程序可以在2个地方对类变量进行初始化:定义类变量时指定初始值,静态初始化块中对类变量指定初始值。

类变量可以通过(类.变量)直接赋值。一个类变量只需一块内存空间(无论怎么复制,它的值只有一个);但对于实例变量,该类每创建一次实例,就需要为实例变量分配一块内存空间。

类变量的初始化时机处于实例变量的初始化之前。定义成员变量时必须采用前向引用。

5、子类构造器调用父类构造器

程序依次调用每个父类非静态初始化块、父类构造器执行初始化,最后调用本类的静态初始化块、构造器初始化块。至于调用父类哪个构造器进行初始化,则分为3种情况:

a)子类构造器使用super显示调用父类构造器,系统根据super调用里传入的实参列表确定调用父亲的哪个构造器

b)子类构造器使用this显示调用本类中重载构造器,系统会根据this调用里传入的实参列表确定本类的另一个构造器

c)子类构造器中既没有super也没有this,系统隐式调用父类无参构造器。

注:super用于显示调用父类构造器,this用于显示调用本类中另一个重载构造器,super和this只能在构造器中使用,且作为第一行代码。

6、避免在构造器中访问子类的实例变量

构造器只负责JAVA对象实例变量执行初始化,在初始化之前,该对象所占内存已经被分配,默认是空值。

当this在构造器中时,this代表正在初始化的JAVA对象。

7、避免在构造器中调用被子类重写的方法

程序执行时,会首先调用父类的构造器,若父类中的构造器方法被子类重写,则程序重写方法会在子类构造器所有代码执行前执行,此时子类的成员变量还是默认值,从而导致子类重写方法访问不到子类实例变量值的情形。

8、JAVA继承对成员变量和方法的区别

不管多少个变量,只要他们实际指向一个对象,无论他们声明时是什么类型,当调用方法时,方法的行为总表现出他们实际类型行为;但如果通过这些变量访问他们所指对象的实例变量,这些变量总表现为声明这些变量的行为。

9、父、子实例的实例变量的内存分配机制

当程序创建一个子类对象时,系统不仅会为该类中定义的实例变量分配内存,也会为其父类中定义的实例变量分配内存,即使子类中定义了与父类中同名实例变量,子类中定义的变量会隐藏父类中定义的变量。为了在子类方法中访问父类中定义的被隐藏的实例变量,或者被覆盖的方法,可以通过super作为限定来修饰这些实例变量和实例方法。

10、父、子类的类变量的内存分配

类变量属于类本身,实例变量属于JAVA变量,类变量在类初始化阶段完成初始化,实例变量在对象初始化阶段完成初始化。使用类名作为主调来访问类变量,能保持最好的代码可读性。当然也可以使用super来访问。

11、final修饰符的作用

final修饰变量,必须由程序员显示指定初始值,本质上fianl实例变量只能在构造器中被赋值。final类变量也必须显示的被赋值,本质上只能在静态初始化块中被赋值。如果定义final变量时指定初始值,而且该初始值可以在编译时就被确定下来。

12、系统对哪些final变量执行“宏替换”

对于一个final变量,不管它时类变量、实例变量还是局部变量,只要定义该变量时使用final修饰符,并指定了初始值,而且该初始值可以在编译时就被确定下来,那么这个final变量本质上已经不再是变量,而是一个直接量。

13、final方法注意点

final方法不能被重写

14、使用final修饰被匿名、局部内部类访问的局部变量

如果程序需要在匿名内部类中使用局部变量,那么局部变量必须使用final修饰。

程序员基本功02对象与内存控制相关推荐

  1. 程序员基本功01数组与内存控制

    以下的答案为我自己的读书心得(捏造的答案),如有童鞋不忍直视,还请不吝赐教 1.JAVA数组基本语法 int[] a 2.JAVA数组的静态特性 当数组被初始化后,数组的长度是不可改变的 3.JAVA ...

  2. ZooKeeper官方文档学习笔记03-程序员指南02

    这个太多了 我总是坚持不下来,还是分开写吧,这样更有成就感 程序员指南02 使用ACL的ZooKeeper访问控制 permission schema Zookeeper的C语言client API ...

  3. 程序员如何找对象(1)

    写在前面的 一直想写一个系列的博客,但是发现自己的技术水平还有很多欠缺,干脆来一个非技术贴系列吧,看文章题目就知道本文要说什么了. 可以喷,可以评论,希望的就是大家能多多交流. 下面进入正题,程序员如 ...

  4. 对于一个程序员来说,电脑的内存需要多大?

    1. 程序员电脑内存有多大内存够用足够了,纯写代码的编程对电脑要求不高,尤其对显卡几乎没有要求,一般编程可能开的任务窗口比较多,所以只要cpu和内存大点就可以了一般来说,处理器确实比显卡来得重要一些, ...

  5. 程序员基本功04JAVA的内存回收

    读书笔记自己看的(O_O) 1.Java引用的功能和意义 程序员需要通过关键字new创建Java对象,即可视作为Java对象申请内存空间,JVM会在堆内存中为每个对象分配空间:当一个Java对象失去引 ...

  6. 每个程序员都应该了解的内存知识(3)-虚拟内存

    英文原帖地址:http://lwn.net/Articles/253361/ 原翻译地址:http://www.oschina.net/translate/what-every-programmer- ...

  7. 每个程序员都应该了解的内存知识(2)-CPU caches

    [原文:http://www.cnblogs.com/mikewolf2002/archive/2013/04/13/3017855.html] 英文原帖:http://lwn.net/Article ...

  8. 每个程序员都应该了解的内存知识-CPU高速缓存

    [编者按:这是Ulrich Drepper写"程序员都该知道存储器"的第二部.那些没有读过第一部 的读者可能希望从这一部开始.这本书写的非常好,并且感谢Ulrich授权我们出版. ...

  9. 我们程序员眼中的对象-看完华华的文章妈妈再也不担心我找不到对象了-Java面向对象编程思想理解系列(1)

    大家好!!!我叫霜华,是一个帅到没天理 骚里骚气,热爱人生与绿色 是一个不像程序员的程序员 作为一个在java这门领域沉迷一年半的人,如今在技术栈广度和深度 还是业务能力在客观层面讲确实进步迅速 (可 ...

最新文章

  1. 剑指offer:数组中重复的数字
  2. VC6工程升级VS2013遇到的问题
  3. python timer使用-Python timer定时器两种常用方法解析
  4. oracle 数据库的数据事务的相关概念
  5. 针对开发人员的Microsoft SQL Server元数据
  6. php 数组值sum,php sum数组值(如果特定列的值重复)
  7. 真实感人故事_您的数据可以告诉您真实故事吗?
  8. CCF专区推荐重点SCI期刊征稿中~
  9. win10子系统安装php,win10 ubuntu 子系统安装php
  10. 时间管理---重要紧急四象限法
  11. uva1589 Xiangqi
  12. Promise的九大方法(resolve、reject、then、catch、finally、all、allSettled、race、any)你都用过那些?
  13. 我的书进驻美国 amazon.com 、 ebay.com
  14. python查询员工信息表
  15. Spring5底层原理 学习笔记(二)AOP篇
  16. 数据库分区:MySQL分区
  17. 我的世界服务器无限背包,我的世界无限背包存档
  18. 电脑开机自动登录,断网自动重连以及桌面联网小程序
  19. [附源码]计算机毕业设计JAVA学生考试成绩分析系统
  20. 神经网络数值分析软件,神经网络预测结果分析

热门文章

  1. 电脑桌面图标异常 计算机只显示C盘,Windows7系统桌面图标异常如何解决?
  2. 给数值加上千分位的php程序,JavaScript_js 实现数值的千分位及保存小数方法(推荐),实例如下:/*** 将数 - phpStudy...
  3. java ==和===_java中==和equals的区别详解
  4. python3 打印_Python 3 进阶 —— print 打印和输出
  5. 机器狗背上枪成了杀手,已经与美澳军队合作!
  6. python数据科学实战_Python数据科学实战第三讲作业HW4
  7. 两个列向量相乘怎么计算_机器学习 线性代数基础 | 1.4 矩阵乘向量的新视角:变换基底...
  8. 怎么取消苹果手机自动续费_手机 App 自动续费套路多?我们要如何取消?
  9. python01_python简介
  10. mysql存储引擎的方式_Mysql转换表存储引擎的三种方式