javap进行反编译
- jdk提供了一个开发工具(jdk/bin/javap.exe)供我们进行反编译。
javap使用格式:
javap -c -l -private 类名
各参数功能如下:
构造函数
- 当类中没有显示构造函数时,编译程序,Java编译器会自动生成一个隐式无参数构造函数,而此构造函数的权限修饰符与该类的权限修饰符相同。
构造代码块
- 当带参数的构造函数和不带参数的构造函数有相同的实现需求时,为了避免代码重复,可以引用构造代码块,并将构造函数要实现功能的代码写进构造代码块。
构造代码块:
- 构造代码块作用:给对象进行统一初始化。
- 构造函数作用:给对应的对象进行初始化。
构造代码块的格式:
...数据成员;
{
构造代码块
}
构造函数或方法...
代码块的类别:
- 构造代码块
- 局部代码块--大括号位于方法之内。作用:缩短局部变量的生命周期,节省一点内存。
- 静态代码块
构造代码块要注意的事项:
- Java编译器编译一个Java源文件时,会把成员变量的声明语句提前至一个类的最前端。
- 成员变量的初始化工作都在构造函数中执行。
- 一旦经过Java编译器编译狗,那么构造代码块的代码就会被移动到构造函数中执行,并放于构造函数代码之前,即是在构造函数之前执行的。
例如:在一个类Demo中有如下①②③号三段代码
1号 int i = 100; //数据成员初始化
2号 { i = 200; } //构造代码块内赋值
3号 public Demo() { i = 300;} //构造函数对数据成员赋值
无论三段代码先后顺序如何,当new出一个实例并输出该实例的i值时都为300。
4.成员变量的显示初始化与构造代码块的是按照当前代码顺序执行的。
当只有1号和2号代码时,按代码的前后顺序执行。后执行的值覆盖先执行的值。