码迷,mamicode.com
首页 > 编程语言 > 详细

Java代码块

时间:2018-03-26 22:26:30      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:string   this   初始化块   静态   new   ice   ext   out   创建   

一、静态代码块

  • 里面可以有输出语句
  • 随着类的加载而加载,而且只被加载一次
  • 多个静态代码块之间按照顺序结构执行
  • 静态代码块的执行要早于非静态代码块的执行。
  • 静态的代码块中只能执行静态的结构(类属性,类方法)

二、非静态代码块

  • 可以对类的属性(静态的 & 非静态的)进行初始化操作,同时也可以调用本类声明的方法(静态的 & 非静态的)
  • 里面可以有输出语句
  • 一个类中可以有多个非静态的代码块,多个代码块之间按照顺序结构执行
  • 每创建一个类的对象,非静态代码块就加载一次
  • 非静态代码块的执行要早于构造器

      注意:代码块如果有修饰的话,那么只能使用static

package com.yyx.pratice;

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 TestLeaf {
    public static void main(String[] args) {
        new Leaf();
        System.out.println();
        new Leaf();
    }
}

运行结果:

Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:尚硅谷
Leaf的普通初始化块
执行Leaf的构造器

Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:尚硅谷
Leaf的普通初始化块
执行Leaf的构造器

Java代码块

标签:string   this   初始化块   静态   new   ice   ext   out   创建   

原文地址:https://www.cnblogs.com/guhun/p/8570422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!