zoukankan      html  css  js  c++  java
  • Java类 初始化块

    java里初始化一个类的对象,通过初始化快或者构造方法进行数据赋值。与其相关的执行代码有这么几种:

    • 静态初始化块
    • 初始化块
    • 构造方法

    静态初始化块

    静态初始化块只在类加载时执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。


    非静态初始化块

    非静态初始化块在每次初始化实例对象的时候都执行一次,可以给任意变量赋值。


    构造方法

    在每次初始化实例对象时调用。


    重点:执行顺序->

    1. 在加载类时执行一次静态初始化块(之后不再调用)。
    2. 在每次初始化实例对象时:先执行非静态初始化块,再执行构造方法。

    若是概念不好懂,请看如下实例:

    public class InitializationClass {
    String name; // 声明变量name
    String sex; // 声明变量sex
    static int age;// 声明静态变量age

    // 构造方法
    public InitializationClass() {
    System.out.println("通过构造方法初始化name");
    name = "tom";
    }

    // 构造方法
    public InitializationClass(String name) {
    System.out.println("通过参数构造方法初始化name");
    this.name = name;
    }

    // 构造方法
    public InitializationClass(int age) {
    System.out.println("通过构造方法改变static InitializationClass.age");
    InitializationClass.age = age;
    }

    // 构造方法
    public InitializationClass(String name, String sex) {
    System.out.println("通过构造方法初始化name age");
    this.name = name;
    this.sex = sex;
    }

    // 初始化块
    {
    System.out.println("通过初始化块初始化sex");
    sex = "男";
    }

    // 静态初始化块
    static {
    System.out.println("通过静态初始化块初始化age");
    age = 20;
    }

    public void show() {
    System.out.println("姓名:" + name + ",性别:" + sex + ",年龄:" + age);
    System.out.println("------------------------------");
    }

    public static void main(String[] args) {

    // 创建对象
    InitializationClass obj1 = new InitializationClass("qiuhua");
    obj1.show();

    InitializationClass obj2 = new InitializationClass(10);
    obj2.show();

    InitializationClass obj3 = new InitializationClass("jing", "女");
    obj3.show();
    }
    }

      

    通过静态初始化块初始化age
    通过初始化块初始化sex
    通过参数构造方法初始化name
    姓名:qiuhua,性别:男,年龄:20
    ------------------------------
    通过初始化块初始化sex
    通过构造方法改变static InitializationClass.age
    姓名:null,性别:男,年龄:10
    ------------------------------
    通过初始化块初始化sex
    通过构造方法初始化name age
    姓名:jing,性别:女,年龄:10
    ------------------------------

    转:https://www.cnblogs.com/Berryxiong/p/6245100.html

  • 相关阅读:
    无线桥接(WDS)如何设置?
    Linux内核的整体架构简介
    Efuse--芯片存储
    Linux下编写和加载 .ko 文件(驱动模块文件)
    统计难题
    最少拦截系统
    (比赛)B
    (比赛)A
    F
    K
  • 原文地址:https://www.cnblogs.com/seamanone/p/9568813.html
Copyright © 2011-2022 走看看