构造代码块

javap进行反编译


  • jdk提供了一个开发工具(jdk/bin/javap.exe)供我们进行反编译。

javap使用格式:

javap -c -l -private 类名

各参数功能如下:


构造代码块_第1张图片
javap.png

构造函数


  • 当类中没有显示构造函数时,编译程序,Java编译器会自动生成一个隐式无参数构造函数,而此构造函数的权限修饰符与该类的权限修饰符相同。

构造代码块


  • 当带参数的构造函数和不带参数的构造函数有相同的实现需求时,为了避免代码重复,可以引用构造代码块,并将构造函数要实现功能的代码写进构造代码块。

构造代码块:

  • 构造代码块作用:给对象进行统一初始化。
  • 构造函数作用:给对应的对象进行初始化。

构造代码块的格式:

...数据成员;
{
    构造代码块
}
构造函数或方法...

代码块的类别:

  1. 构造代码块
  2. 局部代码块--大括号位于方法之内。作用:缩短局部变量的生命周期,节省一点内存。
  3. 静态代码块

构造代码块要注意的事项:

  1. Java编译器编译一个Java源文件时,会把成员变量的声明语句提前至一个类的最前端。
  2. 成员变量的初始化工作都在构造函数中执行。
  3. 一旦经过Java编译器编译狗,那么构造代码块的代码就会被移动到构造函数中执行,并放于构造函数代码之前,即是在构造函数之前执行的。

例如:在一个类Demo中有如下①②③号三段代码

     1号 int i = 100;  //数据成员初始化
     2号 { i = 200; }  //构造代码块内赋值
     3号 public Demo() { i = 300;}  //构造函数对数据成员赋值

无论三段代码先后顺序如何,当new出一个实例并输出该实例的i值时都为300。

4.成员变量的显示初始化与构造代码块的是按照当前代码顺序执行的。

当只有1号和2号代码时,按代码的前后顺序执行。后执行的值覆盖先执行的值。

你可能感兴趣的:(构造代码块)