【Java】三种代码块语句
程序员文章站
2022-03-26 20:22:54
什么是代码块在类或方法中,直接使用"{}"括起来的一段代码,表示一块代码区域。代码块里变量属于局部变量,只在自己所在的区域前后的{}内有效。代码块的三种形式根据代码块定义的位置不同,我们有分为三种形式:(1) 局部代码块:直接定义在方法内部的代码块;一般的,我们是不会直接使用代码块的,只不过我们会结合if,while,for,try等关键字联合,表示一块代码区域。(2)初始化代码块(构造代码块):直接定义在类中每次创建对象的时候都会执行初始化代码块。class CodeBlockDemo...
什么是代码块
在类或方法中,直接使用"{}"括起来的一段代码,表示一块代码区域。
代码块里变量属于局部变量,只在自己所在的区域前后的{}内有效。
代码块的三种形式
根据代码块定义的位置不同,我们有分为三种形式:
(1) 局部代码块:直接定义在方法内部的代码块;
一般的,我们是不会直接使用代码块的,只不过我们会结合if,while,for,try等关键字联合,表示一块代码区域。
(2)初始化代码块(构造代码块):直接定义在类中
每次创建对象的时候都会执行初始化代码块。
class CodeBlockDemo
{
{
System.out.println("初始化代码块");
}
CodeBlockDemo(){
System.out.println("构造器");
}
public static void main(String[] args)
{
System.out.println("主方法");
new CodeBlockDemo();
new CodeBlockDemo();
new CodeBlockDemo();
}
}
---------- 运行java ----------
主方法
初始化代码块
构造器
初始化代码块
构造器
初始化代码块
构造器
输出完成 (耗时 0 秒) - 正常终止
每次创建对象都会调用构造器,在调用构造器之前,会执行本类中的初始化代码块。
class CodeBlockDemo
{
CodeBlockDemo(){
System.out.println("构造器");
}
{
System.out.println("初始化代码块");
}
public static void main(String[] args)
{
new CodeBlockDemo();
new CodeBlockDemo();
new CodeBlockDemo();
}
}
---------- 运行java ----------
初始化代码块
构造器
初始化代码块
构造器
初始化代码块
构造器
输出完成 (耗时 0 秒) - 正常终止
通过反编译之后,我们发现,初始化代码也作为构造器的最初语句。
反编译代码:
一般情况下,我们是不使用初始代码块的:难看!即使要做初始化操作,我们一般在构造器中做即可。
如果做初始化操作的代码较多,此时构造器的结构可能就比较混乱,此时专门定义一个方法做初始化操作,再在构造器中调用即可。
执行顺序:主方法 → 初始化代码块 → 构造器
(3)静态代码块,使用static修饰的初始化代码块
在主方法执行之前执行静态代码块,而且只执行一次。
main方法是程序的入口,为什么静态代码块优先于main方法执行?
这是因为静态成员随着字节码的加载,也加载进JVM,此时main方法还没有被执,因为方法需要被JVM调用。
先把字节码加载进JVM,而后调用main方法。
一般我们用来做初始化操作,用来加载资源,加载配置文件等。
执行顺序:静态初始化代码块(仅执行一次)→ 主方法 → 初始化代码块 → 构造器
class CodeBlockDemo
{
{
System.out.println("初始化代码块");
}
CodeBlockDemo(){
System.out.println("构造器");
}
static {
System.out.println("静态初始化代码块");
}
public static void main(String[] args)
{
System.out.println("主方法");
new CodeBlockDemo();
new CodeBlockDemo();
new CodeBlockDemo();
}
}
---------- 运行java ----------
静态初始化代码块
主方法
初始化代码块
构造器
初始化代码块
构造器
初始化代码块
构造器
输出完成 (耗时 0 秒) - 正常终止
不使用main方法打印Hello World
class CodeBlockDemo
{
static{
System.out.println("Hello World!");
}
public static void main(String[] args) {}
}
本文地址:https://blog.csdn.net/weixin_43519707/article/details/107596224