Java 基础 -1 - 内存管理之内存分配
2016-05-07 00:00
405 查看
摘要: 内存管理 JAVA内存分配 向上造型
1.基础
内存区 : 栈内存 (局部变量 ),堆内存(对象) ,方法区 (贮存方法)。
局部变量 (随方法结束消亡): 形参 , 方法内局部变量 ,代码块中局部变量 。
成员变量 : 类变量 (静态变量 ) ,实例变量 ; 类变量初始化在实例变量之前 。(即使 写在实例变量之后 )。
关于static 只能修饰 类里面定义的成员: 成员变量, 方法 ,内部类,内部枚举类, 代码块 。
代码块理解成几个成员变量放在一起,成员变量语句也可理解成,单句的代码块。因此代码块与成员变量具有相同优先级。
2.内存分配过程:
遵循以下三点 :
①对于同一个jvm 来说每个类只对应 一个Class 对象, 也就是 类加载一次 (开辟一段内存空间), 但是每次创建一次实例对象就对应一个 Java对象 ,也就是实例化多次 (在堆内存 开辟多个对象内存空间) ,并且每次实例化的对象中都不包含类成员。每个类在程序运行过程中第一次调用时 会加载一次,即产生一个class 对象。
②每当程序调用 构造方法 创建对象时 ,会对变量进行初始化 即开辟内存空间 。初始化顺序为 如下:(该类已经被加载过,即静态块已经被初始化):先对非静态初始化快进行初始化,之后对构造器初始化 。
③含有继承关系的内存分配:每当程序调用子类的属性或者方法时 ,程序会先从其最高父类 进行初始化,根据先初始化 非静态方法 再初始化构造器 的顺序 进行初始化 。依次 初始化 最高父类 ,父类 , 一直到调用方法的子类。
若父类有多个构造方法,调用哪个构造方法遵循以下:SUPER () 显式调用 则根据形参参数判断 ,this()调用子类重载构造, 不写 默认 调用父类无参构造,若父类无无参构造 则视为编译错误。
④:初始化块执行初始化 与 定义实例变量执行初始化 因为是平等的 所以同时被提到 构造方法中进行初始化 (开辟内存空间),赋值顺序依照 程序中书写顺序。
⑤:对于以上初始化顺序,若程序第一次调用该类,则优先初始化 静态块,调用构造方法 。之后再按照 ② ,③中顺序进行初始化 。
3. 其他:
类变量可以通过类访问 也可以通过 实例访问 ,本质都是通过类访问 ,都是访问的同一个类变量,假如通过实例访问 进而改变类变量的值,那么 再通过其他实例调用类变量值都改变。
向上造型时 ,父类引用调用子类重写方法 ,视为调用的子类的方法。调用 与父类同名属性则视为调用父类属性。
1.基础
内存区 : 栈内存 (局部变量 ),堆内存(对象) ,方法区 (贮存方法)。
局部变量 (随方法结束消亡): 形参 , 方法内局部变量 ,代码块中局部变量 。
成员变量 : 类变量 (静态变量 ) ,实例变量 ; 类变量初始化在实例变量之前 。(即使 写在实例变量之后 )。
关于static 只能修饰 类里面定义的成员: 成员变量, 方法 ,内部类,内部枚举类, 代码块 。
代码块理解成几个成员变量放在一起,成员变量语句也可理解成,单句的代码块。因此代码块与成员变量具有相同优先级。
2.内存分配过程:
遵循以下三点 :
①对于同一个jvm 来说每个类只对应 一个Class 对象, 也就是 类加载一次 (开辟一段内存空间), 但是每次创建一次实例对象就对应一个 Java对象 ,也就是实例化多次 (在堆内存 开辟多个对象内存空间) ,并且每次实例化的对象中都不包含类成员。每个类在程序运行过程中第一次调用时 会加载一次,即产生一个class 对象。
②每当程序调用 构造方法 创建对象时 ,会对变量进行初始化 即开辟内存空间 。初始化顺序为 如下:(该类已经被加载过,即静态块已经被初始化):先对非静态初始化快进行初始化,之后对构造器初始化 。
③含有继承关系的内存分配:每当程序调用子类的属性或者方法时 ,程序会先从其最高父类 进行初始化,根据先初始化 非静态方法 再初始化构造器 的顺序 进行初始化 。依次 初始化 最高父类 ,父类 , 一直到调用方法的子类。
若父类有多个构造方法,调用哪个构造方法遵循以下:SUPER () 显式调用 则根据形参参数判断 ,this()调用子类重载构造, 不写 默认 调用父类无参构造,若父类无无参构造 则视为编译错误。
④:初始化块执行初始化 与 定义实例变量执行初始化 因为是平等的 所以同时被提到 构造方法中进行初始化 (开辟内存空间),赋值顺序依照 程序中书写顺序。
⑤:对于以上初始化顺序,若程序第一次调用该类,则优先初始化 静态块,调用构造方法 。之后再按照 ② ,③中顺序进行初始化 。
3. 其他:
类变量可以通过类访问 也可以通过 实例访问 ,本质都是通过类访问 ,都是访问的同一个类变量,假如通过实例访问 进而改变类变量的值,那么 再通过其他实例调用类变量值都改变。
向上造型时 ,父类引用调用子类重写方法 ,视为调用的子类的方法。调用 与父类同名属性则视为调用父类属性。
相关文章推荐
- Java 基础 -2 关于final
- java抽象类和接口类
- java中Arrays.sort()实现原理
- 验证java环境是否安装成功
- Java HotSpot(TM) 64-Bit Server VM warning:
- 《Java编程思想》第四版读书笔记 第五章
- 《Java编程思想》第四版读书笔记 第六章
- SpringMVC初步学习
- springMVC
- 注解 springMVC
- java 读txt
- java pdfbox2.0.0 划线,表格
- Java之------类反射系列(二)
- 转:eclipse技巧之快速生成Override函数
- java 读取 Excel文件
- JAVA获取class的三种方式
- 从JBoss Seam 2.x迁移到JavaEE 7之二:组件的有效范围Scope
- java 异步机制与同步机制的区别
- JAVA多线程总结
- JAVA学习-类和对象