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的构造器


目录
相关文章
|
1月前
|
Arthas Java 中间件
如何优雅的在java中统计代码块耗时
如何优雅的在java中统计代码块耗时
54 1
|
12天前
|
Java
在 Java 中,类是一种定义对象的模板,它包含数据成员(字段)和方法。
在 Java 中,类是一种定义对象的模板,它包含数据成员(字段)和方法。
|
2天前
|
Java
Java中代码块区别及代码示例
Java中代码块区别及代码示例
|
5天前
|
Java C++
Java 基础内容(代码块)
Java 基础内容(代码块)
|
5天前
|
Java 编译器
Java中4种代码块:普通代码块,静态代码块,同步代码块,构造代码块
Java中4种代码块:普通代码块,静态代码块,同步代码块,构造代码块
|
5天前
|
Java
java代码块和具体的代码应用
java代码块和具体的代码应用
|
16天前
|
安全 Java
比较java枚举成员使用equal还是==
比较java枚举成员使用equal还是==
9 0
|
1月前
|
Java
【JAVA学习之路 | 基础篇】类的成员--代码块
【JAVA学习之路 | 基础篇】类的成员--代码块
|
17天前
|
Java
Java基础8-一文读懂Java 代码块和执行顺序(二)
Java基础8-一文读懂Java 代码块和执行顺序(二)
15 0
|
17天前
|
Java
Java基础8-一文读懂Java 代码块和执行顺序(一)
Java基础8-一文读懂Java 代码块和执行顺序(一)
14 0