基础知识
1.从java7开始,可以给数字添加下划线 增强可读性
1 | int v1 = 1_0000_0000; |
以下方法是错误的:
1 | // 不能在小数点前后使用 |
2.>> 与 >>>
1 | >>:有符号右移(最左用符号位补齐) |
3.数据类型
1 | byte: 8bit [-128, 127] 默认:0 |
1 | // Math类的常用方法 |
4.可变参数
1 | public int sum(int... numbers){ |
5.方法参数与返回值
- 引用类型作为参数 传递的是地址
- 引用类型作为返回值 返回的是地址
1
2
3
4
5
6
7public int[] test(){
int[] t = {11, 22};
return t;
}
int[] n = test();
test() 方法执行完,{11, 22}在堆内存中的内容不会被GC,因为被n引用了。
6.方法的签名:方法名 + 参数类型
7.方法重载:方法名相同,方法签名不同
8.栈帧(Frame):
- 栈帧随着方法的调用而创建,随着方法结束而销毁,存储了方法的局部变量信息。
- 栈溢出:Stack Overflow
问:方法存储在哪里?
内存划分:
- PC寄存器(Program Counter Register):存储java虚拟机正在执行的字节码指令地址
- java虚拟机栈(java Virtual Machine Stack):存储栈帧
- 堆(Heap):存储GC所管理的各种对象
- 方法区(Method Area):存储每个类的结构信息(比如字段名称和类型,方法的返回值与签名,构造方法和普通方法的字节码等)
- 本地方法栈(Native Method Stack):用来支持native方法的调用(比如C语言编写的方法)
- 简单对象内存
- 复杂对象内存
- 对象数组内存