Java中类的成员之四: 代码块

简介: Java中类的成员之四: 代码块

类的成员之四: 代码块



@[toc]

初步理解代码块
  1. 代码块的作用:用来初始化类、对象(初始化块)
  2. 代码块如果有修饰的话只能用static
  3. 分类:静态代码块和非静态代码块
    3.1、静态代码块:

        a.内部可以有输出语句
        b.随着类的加载而执行,而且只会执行一次
        c.作用:初始化类的信息
        d.如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行(没必要)
        e.静态代码块的执行优先于非静态代码块
        

    3.2、非静态代码块

        a.内部可以有输出语句
        b.随着对象的创建而执行
        c.每创建一个对象,就执行一次非静态代码块
        d.作用:可以在创建对象时,对对象的属性进行初始化
        e.如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行(没必要)
  4. 静态的属性和方法随着类的加载而加载,而静态的代码块不但加载,而且执行
  5. 因为有static的使用,所以静态代码块不能调用非静态结构,但是非静态代码块可以调用静态结构也可以调用非静态的结构
  6. 代码块在开发中使用的频率不是太高,可以选择不用代码块,因为很多地方可以替代它的作用
对属性可以赋值的位置

1.默认初始化
2.显式初始化
3.构造器中初始化
4.有了对象以后,可以通过"对象.属性"或者"对象.方法"的方式进行赋值
5.在代码块中进行赋值

执行顺序:1—2/5—3—4

在这里插入图片描述


对应代码举例说明
package day2.DayBlock;
//类的成员之四:代码块(初始化块)
public class BlockTest {
    public static void main(String[] args) {
        String desc=Person.desc;
        Person p1 = new Person();
        Person p2 = new Person();
        System.out.println(p1.age);//创建对象时,对对象的属性进行初始化

    }
}
class Person {
    String name;
    int age;
    static String desc="我是一个人";//描述

    //构造器
    public Person() {
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //代码块
    static {//静态代码块
        System.out.println("静态代码块");
        desc="哈哈哈";
    }
    {//非静态代码块
        System.out.println("非静态代码块");
        age=1;
    }
    //方法
    public void eat(){
        System.out.println("吃饭");
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

代码块的执行过程练习
  • 通过以下代码和执行结果,去思考代码块是啥时候运行的,运行的前后顺序
package day2.LXT;
class Root{
   static{
      System.out.println("Root的静态初始化块");
   }
   {
      System.out.println("Root的普通初始化块");
   }
   public Root(){
      System.out.println("Root的无参数的构造器");
   }
}
class Mid extends Root{
   static{
      System.out.println("Mid的静态初始化块");
   }
   {
      System.out.println("Mid的普通初始化块");
   }
   public Mid(){
      System.out.println("Mid的无参数的构造器");
   }
   public Mid(String msg){
      //通过this调用同一类中重载的构造器
      this();
      System.out.println("Mid的带参数构造器,其参数值:"
         + msg);
   }
}
class Leaf extends Mid{
   static{
      System.out.println("Leaf的静态初始化块");
   }
   {
      System.out.println("Leaf的普通初始化块");
   }  
   public Leaf(){
      //通过super调用父类中有一个字符串参数的构造器
      super("金士曼");
      System.out.println("Leaf的构造器");
   }
}
public class LeafTest{
   public static void main(String[] args){
      new Leaf(); 
      //new Leaf();
   }
}

运行结果:

Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:金士曼
Leaf的普通初始化块
Leaf的构造器


目录
相关文章
|
26天前
|
JSON Java 程序员
Java|如何用一个统一结构接收成员名称不固定的数据
本文介绍了一种 Java 中如何用一个统一结构接收成员名称不固定的数据的方法。
26 3
|
2月前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
143 3
|
4月前
|
Java 调度 开发者
Java 神秘新成员 —— 虚拟线程究竟是什么?它又能解开哪些编程痛点之谜?
【8月更文挑战第23天】Java虚拟线程是一种轻量级执行线程,由Java运行时管理,相较于传统操作系统线程,其创建和管理成本更低。基于用户模式线程概念,Java应用程序无需依赖OS即可实现高度并发。虚拟线程数量可远超传统线程,有效提升多核处理器利用率和并发性能。它解决了传统Java线程模型中创建成本高、调度开销大及I/O阻塞等问题,极大提高了程序的并发性和响应速度。
44 1
|
4月前
|
Java 程序员 API
从代码中寻找平衡:’java代码块和具体的代码应用
Java 8 引入的 Lambda 表达式是一项革命性特性,使编写简洁、灵活且易维护的代码成为可能。Lambda 表达式作为一种匿名函数,支持任意数量参数和返回值,其基本语法为 `(parameters) -> expression` 或 `(parameters) -> { statements; }`。
40 0
|
5月前
|
Java 程序员
【Java探索之旅】继承概念_语法_父类的成员访问
【Java探索之旅】继承概念_语法_父类的成员访问
63 10
|
4月前
|
Java
【Java】代码块
【Java】代码块
|
6月前
|
Java
在 Java 中,类是一种定义对象的模板,它包含数据成员(字段)和方法。
在 Java 中,类是一种定义对象的模板,它包含数据成员(字段)和方法。
|
6月前
|
Java
Java中代码块区别及代码示例
Java中代码块区别及代码示例
36 0
|
6月前
|
Java C++
Java 基础内容(代码块)
Java 基础内容(代码块)
26 0
|
6月前
|
Java 编译器
Java中4种代码块:普通代码块,静态代码块,同步代码块,构造代码块
Java中4种代码块:普通代码块,静态代码块,同步代码块,构造代码块
260 0