Java—代码块详解

云惠网小编 2021年9月20日05:17:52
评论
2120字阅读7分4秒
摘要

代码块概念代码块分类普通代码块构造代码块静态代码块同步代码块代码块概念在java中,{ } 括起来的代码被称为代码块代码块分类普通代码块类中方法的方法体public class Main{ public static void main(String[] args) { { …普通代码块 } }}普通代码块使用不多,这里不过多讲解构造代码块也叫:实例代码块定义在类中的代码块(不加修饰符)构造代码块一般用于初始化实例成员变量public class P.

广告也精彩

打断点调试代码,你会发现:person对象均被初始化

    • 代码块概念
    • 代码块分类
      • 普通代码块
      • 构造代码块
      • 静态代码块
      • 同步代码块

在这里插入图片描述

public class Person {
String name;
String sex;
int age;
{  //构造代码块
name = "花花";
sex = "女";
age = 3;
}
}

类中方法的方法体

public class Person {
String name;
String sex;
int age;
{
this.name = "花花";
this.sex = "女";
this.age = 3;
}
public static void main(String[] args) {
Person person1 = new Person();
Person person2 = new Person();
Person person3 = new Person();
}
}

代码块概念

普通代码块

Java—代码块详解
提供构造方法:

  • 静态代码块不管生成多少个对象,其只会执行一次
  • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
  • Java代码在经过编译器编译之后,如果要运行必须先要经过类加载子系统加载到JVM中才能运行
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并,最终放在生成的<>方法中,该方法在类加载时调用,并且只调用一次

就地初始化

输出结果:

静态代码块

Java—代码块详解
在这里插入图片描述

在类加载阶段执行,在编译阶段时,编译器会将多个静态代码块按照定义的先后次序依次合并,最终放在生成的方法中

多个实例代码块最终会按照定义的先后顺序合并成一份,并将其拷贝到每个构造方法中
验证:

普通代码块使用不多,这里不过多讲解

代码块分类

Java—代码块详解
打断点,看调试过程:

(后面再来进行补充~~)

javac:
用纯 Java 语言编写的一个编译器
.
按照 Java 语言的语法对源文件进行检测,是否违反语法规范
若不符合Java语法规范,则编译失败—报错;
若符合,则按照字节码文件规范生成相对应的字节码文件

//就地初始化
public class Person {
String name = "嗯哼";
String sex = "Unknown";
int age = 0;
//
{ //实例代码块
this.name = "花花";
this.sex = "女";
this.age = 3;
System.out.println("我是实例代码块!!");
}
//构造方法
public Person(){
System.out.println("我是构造方法!!!");
}
public static void main(String[] args) {
Person person1 = new Person();
Person person2 = new Person();
Person person3 = new Person();
}
}
//静态代码块
static {
System.out.println(money);
money = 100;
System.out.println(money);
System.out.println("我是静态代码块!!!");
}

编译过程:简单了解Java编译原理

也叫:实例代码块
定义在类中的代码块(不加修饰符)
构造代码块一般用于初始化实例成员变量

Java—代码块详解
使用打印再次验证:

验证:

验证:

补充:
在这里插入图片描述

以上验证了 构造代码块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行

用 static{ } 包裹起来的代码片段
只会执行一次,静态代码块优先于构造代码块执行,一般用于初始化静态成员变量

public class Main{
public static void main(String[] args) {
{
...普通代码块
}
}
}
public class Demo {
int a;
{
a = 10;
System.out.println("实例代码块1");
}
{
System.out.println("实例代码块2");
}
public static void main(String[] args) {
Demo demo = new Demo();
}
}

构造代码块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行

编译期间,编译器会将就地初始化的内容拷贝到构造方法中,且拷贝在实例代码块之前

JVM层面理解:

同步代码块

JVM层面理解:

静态代码块在类加载时只执行一次

总结:

输出结果:

在这里插入图片描述

Java—代码块详解
编译器在编译代码时,会将实例代码块中的内容拷贝到构造方法第一条语句前

在这里插入图片描述

在这里插入图片描述

在java中,{ } 括起来的代码被称为代码块

在这里插入图片描述

public class Demo {
static int b;
static {
b = 20;
System.out.println("静态代码块1");
}
static {
System.out.println("静态代码块2");
}
public static void main(String[] args) {
Demo demo = new Demo();
}
}

构造代码块

    {
this.name = "花花";
this.sex = "女";
this.age = 3;
System.out.println("我是实例代码块!!");
}
 public Person() {
System.out.println("我是构造方法!!!");
}

本文转自 https://blog.csdn.net/m0_47988201/article/details/120337053

腾讯云618
云惠网小编
自己开发的音乐视频网站 java

自己开发的音乐视频网站

1.需求开发基于B/S模式的web音乐网站,要包含音乐和mv。为用户提供一个友好的视频和音乐播放环境,包含了大量最新一代的视频和音乐,同时它还具有评论收藏功能,方便以后注册的用户观...
腾讯云618

发表评论