JavaSE 之旅02——数组内存图、代码块、this、super、final

局部变量 和 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 来修饰的)
  • 修饰方法:方法不能被重写
  • 修饰变量
    • 基本数据类型变量:变量变成了常量,不能被再次赋值(值不变)
    • 引用数据类型变量:地址值不能被改变,属性值可以改变
  • 初始化时机:
    • 定义时初始化(显式初始化)
    • 构造方法中初始化
发布了68 篇原创文章 · 获赞 210 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/wufeng55/article/details/80964275
今日推荐