局部变量 和 new 对象在内存中的存储位置
局部变量
存储在栈中
new 对象
存储在堆中
一维数组堆栈图解
以下面这段代码为例:
public static void main(String[] args){
int[] arr = {5,15,55,50,5};
}
内存简图:
二维数组堆栈图解
以下面这段代码为例
public static void main(String[] args){
int[][] arr = {{5,55},{10,20,30},{100}};
}
简单图解:
static 关键词使用注意事项
- 静态变量存在于内存的方法区中的静态区
- 静态变量随着类的加载而加载,随着类的消失而消失
- 优先于类的对象存在
- 静态方法中不能使用 this 关键词(因为 this 指的是当前对象,而 static 方法优先于对象创建而存在)
- 静态方法中只能调用静态变量
- 静态成员变量可直接通过类名调用(推荐使用类名直接调用)
代码块
分类
- 局部代码块
- 静态代码块
- 构造代码块
- 同步代码块
局部代码块
存在于方法中,其作用是用来提前销毁变量。
构造代码块
存在于类中方法外,每次创建对象都会执行一次,优先于构造方法执行。
静态代码块
存在于类中方法外,优先于构造代码块执行,优先于 main() 方法执行,且多次创建对象,静态代码块只执行一次。静态代码块随着类的加载而加载。其作用是用来给类初始化。比如:加载驱动等。
this 和 super
- this:既可以调用父类非私有成员变量(当子父类都有共同的属性时,this采用就近原则调用),也可以调用子类自己的成员变量。this 调用本类的构造方法
- super:调用父类成员方法、成员变量、构造方法
final 关键字
- 修饰类:类不能被继承(系统的 String 类就是用 final 来修饰的)
- 修饰方法:方法不能被重写
- 修饰变量
- 基本数据类型变量:变量变成了常量,不能被再次赋值(值不变)
- 引用数据类型变量:地址值不能被改变,属性值可以改变
- 初始化时机:
- 定义时初始化(显式初始化)
- 构造方法中初始化