编译
JDK JVM JRE
javac . . .
java . . .
基本数据类型
整型 byte short int long
字节型 char
浮点型 float double
布尔型 boolean
引用数据类型
数组 [ ]
类(抽象类) class
接口 interface
枚举 enum
注解 @interface
常量与变量
常量
1 32bit(int)
1.0 64bit(double)
float x = 1.0;
- 会报错:不兼容的类
- 型:从double转换到
- float可能会有损失
1.0f 或 1.0F
- float x = 1.0F;
- 正确! ! !
思考:为什么 byte x = 1; 可以编译?
答:‘=’ 有一个决策功
- 能。当前面多出来的
- 数据全是0时,可以
- 忽略。所以可以编译
- byte x = 1;
- float由于存储方式前
- 半部分不是0就报错
- byte x = 200;
- 由于前半部分不是0
- 就会报错:不兼容的
- 类型:从int转换到
- byte可能会有损失
思考:为什么 long x = 1; 可以编译?
答:'='可以决策补0
- long x= 2147483649;
- 就不能编译了,报错
- 错误:过大的整数:
- 2147483649;
- 因为超过int的范围。
- long x = 2147483649L
- 就不会报错了。
JVM开辟内存
- 栈内存 (先进后出)
- 堆内存
- 方法区
- 常量缓冲区 (常量池)
- 方法区(类模板)
- 静态元素区 static
默认的执行过程 java . . .
将类的信息映射到方法区
- 类加载器 (classLodar)
- 将硬盘中的(javac生成的 )字节码文件中的信息搬运至内存中
- 先把主方法压在栈中(第一个进去,最后 一个出来,最下面)
- 主方法的变量再压在栈里
- 将常量池里的常量复制到变量空间里(不一定是常量,不一定赋值)