对象与内存控制
来源:互联网 发布:网络刺客ii使用教程 编辑:程序博客网 时间:2024/04/30 07:16
1.Class文件
Java class文件是对Java程序二进制文件格式的精确定义,每一个java class文件都对一个类或者一个接口作出了全面的描述。当每一次使用类时,JVM会检查对应的class文件是否已经加载,如果未加载,则需要通过类加载子系统来加载。类加载的过程如下:
(1)装载-----查找并装载类型的二进制数据,即读取.class文件。
(2)连接-----执行验证准备以及解析。
验证:确保被导入类型的正确性;
准备:为类变量分配内存,并将其初始化为默认的值;
解析:把类型中的符号引用转化为直接引用;
若正在被加载的类还有父类,且父类没有被加载,则对其所有父类(未加载的)执行步骤1和步骤2,加载顺序为从直接基类到最上层的父类依次执行装载和连接。
(3)初始化-----将类变量初始化为正确的初始值。对所有未加载的父类,从最上层的父类开始依次往下到最该类,执行静态初始化和静态初始化块。
在生成实例对象的时候,首先给实例变量分配相应的内存,也会为其父类中定义的所有实例变量分配内存,对所有父类(从上到下)执行非静态初始化块,构造器。依次调用完成以后,才执行本类的非静态初始化块和构造函数。
2.final变量
当定义final变量为就为该变量指定了初始值,而且该初始值可以在编译时就确定下来,那么这个final变量本质上就是一个“宏变量”,编译器会把程序中所有用到该变量的地方都直接替换成该变量的值。
3.字符串字面值
Java会缓存使用过的字符串,把字符串的字面常量都放在了字符串驻留池中。
String a="java"; String b="java";上面的代码中,首先定义了一个字符串对象a,由于“java’是一个字符串的字面常量,因此会缓存到字符串缓存池中。当运行到第二句时,编译器不会创建两一个字符串对象,而是直接将引用变量b指向字符串缓冲池中的常量“java"。此时,a和b其实引用的是同一个字符串对象。执行以下语句将返回true。
System.out.println(a==b); //true
- 对象与内存控制
- 对象与内存控制
- 对象与内存控制
- 对象与内存控制
- 对象与内存控制
- 对象与内存控制
- (二)Java对象与内存控制
- 对象与内存控制(续)
- java的对象与内存控制
- java基础-----------对象与内存控制
- 对象与内存控制之实例变量与类变量
- Java进阶---对象与内存控制(一)
- java:浅谈数组与对象的内存控制
- 深化Java基础之——对象与内存控制
- 数组与内存内存控制
- 数组与内存控制
- 数组与内存控制
- 数组与内存控制
- Lance老师UI系列教程第四课->微信TAB界面的实现
- Linux网络编程必看书籍推荐
- 2012又是大四来临时
- 天语 W619 一键ROOT 教程
- 推荐学习hadoop入门几本书(中文版)
- 对象与内存控制
- 模仿网易整体框架
- iOS 5中的UIKit粒子系统教程
- 开启 java 征途
- Java程序程序程序程序员应该掌握的 项技能
- LINQ查询条件为字段值在数组中
- Java 转型 super的用法回顾
- 配置CentOS 6.2 第三方yum源(CentOS默认的标准源里没有nginx软件包)
- DropDownList控件绑定数据库