疯狂JAVA16课——读书笔记(第一课、第二课)
来源:互联网 发布:linux iic架构 编辑:程序博客网 时间:2024/06/06 01:24
1、Java数组是静态的,一旦数组的初始化完成,数组元素的内存空间分配即结束,程序只能改变数组元素的值,而不能重新改变数组对象在内存中的位置和大小。
2、数组有两种初始化方式,即静态初始化和动态初始化。
3、Java内存管理分为两个方面:内存分配和内存回收。这里的内存分配特指创建Java对象时JVM为该对象在堆内存中所分配的内存空间。内存回收指的是当该Java对象失去引用,变成垃圾时,JVM的垃圾回收机制自动清理该对象,并回收该对象所占用的内存。虽然JVM内置了垃圾回收机制回收失去引用的Java对象所占用的内存,但是Java程序依然会有内存泄露。
4、JVM的垃圾回收机制由一条后台线程完成(我记得JVM默认的GC是串行的,貌似不是一条后台线程?),本身也是非常耗性能的,因此如果肆无忌惮地创建对象,让系统分配内存,那这些分配的内存都将由垃圾回收机制进行回收。这样做有两个坏处:①不断分配内存使得系统可用内存减少,从而降低程序运行性能 ②大量已分配内存的回收使得垃圾回收的负担加重,降低程序运行性能。
5、从另一个角度来看,类也是对象,所有类都是Class的实例,每个类初始化完成之后,系统都会为该类创建一个对象的Class实例,程序可以通过反射来获取某个类所对应的Class实例。例如,要获取Person类对应的Class实例,通过Person.class;或Class.forName("Person");任意一条代码即可。
6、对于实例变量而言,它属于Java对象本身,每次程序创建Java对象时都需要为实例变量分配内存空间,并执行初始化。从程序运行角度来看,每次创建Java对象都会为实例变量分配内存空间,并对实例变量执行初始化。从语法角度来看,程序可以在3个地方对实例变量执行初始化:①定义实例变量时指定初始值②非静态初始化块中对实例变量指定初始值③构造器中对实例变量指定初始值。其中第①②种方式比第③种方式更早执行,但第①②种方式的执行顺序与他们在源程序中的排列顺序相同。实际上,经过编译器处理之后,它们三者对应的赋值语句都被合并到构造器中。
7、类变量的初始化时机大致与实例变量相同。
8、以Java对象而言,程序开始对Java对象初始化,初始化分为2个阶段:①为实例变量分配内存空间并指定默认值②按初始化代码排列顺序对实例变量进行初始化。
9、当创建任何Java对象时,程序总会先依次调用每个父类非静态初始化块、父类构造器(总是从Object开始)执行初始化,最后才调用本类的非静态初始化块、构造器执行初始化。
10、如果在父类的构造器中调用子类中覆盖的方法,那么此时子类中的实例变量还未完成初始化,则会出现数据错误的问题。
11、当一个父类引用变量指向一个子类的时候,调用该变量引用的对象的实例变量时表现出的是编译时的类型,而调用方法的时候表现出的是运行时类型。
- 疯狂JAVA16课——读书笔记(第一课、第二课)
- 疯狂JAVA16课——读书笔记(第四课)
- 《疯狂Android讲义》(第二版)读书笔记目录
- 廖雪峰《Python3 基础教程》读书笔记——第一、第二章
- 《疯狂java--突破程序员基本功的16课》读书笔记
- 《疯狂 Java 突破程序员基本功的 16 课》读书笔记
- OpenGL学习——第二课:第一个OpenGL程序
- 嘉兴培训第二天——第一堂课
- 《疯狂Java讲义》读书笔记——面向对象(上)
- 《疯狂Java讲义》读书笔记——面向对象(下)
- 第二周第一课绪论
- 第二周第一课绪论
- 第二周第一课绪论
- java16
- 【3DSmax】3DSmax9基础建模教程—读书笔记2(第二课)
- 【3DSmax】3DSmax9基础建模教程—读书笔记1(第一课)
- 读书笔记-疯狂Java讲义(第三版)第二章 理解面向对象
- Effective Java读书笔记 第一部分(第二章-第六章)
- Android Volley完全解析(二),使用Volley加载网络图片
- 请用户输入年份,输入月份,输出该月份天数
- windows 消息循环(二)
- 3D Math Primer for Game Programmers (quaternion)
- got git 学习笔记(3)
- 疯狂JAVA16课——读书笔记(第一课、第二课)
- c++中类和结构体的区别
- 链表是否有相交,求取相交点所在
- YYMMDD转换成4位字符压缩表示算法java实现——应用各位不等进制的思想
- margin隐藏最后的分割线
- Mockito中ArgumentCaptor的使用方法
- rsync等ssh命令忽略密码的方式
- Linux Shell scp 文件定时上传
- VS2010 MFC使用TeeChart绘图控件之一:控件和类的导入