Java 初始化字段方式和顺序:

  1. 类加载时直接初始化静态字段;

  2. 类加载时调用静态方法初始化静态字段;

  3. 实例化对象时,在调用构造函数之前代码块中初始化字段;

  4. 实例化对象时,在调用构造函数之时初始化字段;

  初始化字段顺序1->2->3->4

代码如下:

public class Employee {

//实例化对象时,在调用构造函数之前前初始化字段;

    private int id; // 实例化对象时初始化为0

    private String name; // 实例化对象时初始化为null

    private boolean flag; // 实例化对象时初始化为false

    private static int age = 22; // 加载类时初始化为22

    // 在构造函数之前初始化

    {

        int num = 1111; // 实例化对象时初始化为1111

        String name = "QA";// 实例化对象时初始化为QA

        setId(num); // 实例化对象时调用

        SetName(name); // 实例化对象时调用

        System.out.println("call instance method");

    }

//类加载时调用静态方法初始化静态字段;

    static {

        System.out.println("age is: " + age);

        age = 30; // 加载类时初始化为33

        print(); // 加载类时时调用

    }

    public void SetName(String name) {

        this.name = name;

    }

    public int getId() {

        return id;

    }

    public String getName() {

        return name;

    }

    public static int getAge() {

        return age;

    }

    public void setId(int num) {

        id = num;

    }

    public static void print() {

        System.out.println("call static method");

    }

    public Employee() {

        // TODO Auto-generated constructor stub

    }

    public Employee(int id, String name) {

        // TODO Auto-generated constructor stub

        this.id = id;

        this.name = name;

        System.out.println("call constructor method");

    }

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        System.out.println("---------------------------");

        System.out.println("age is: " + Employee.getAge());

        System.out.println("---------------------------");

        Employee e = new Employee();

        System.out.println("id is: " + e.getId());

        System.out.println("name is: " + e.getName());

        System.out.println("---------------------------");

        Employee e2 = new Employee(2222, "Dev");

        System.out.println("id is: " + e2.getId());

        System.out.println("name is: " + e2.getName());

    }

}

运行结果:

age is: 22

call static method

---------------------------

age is: 30

---------------------------

call instance method

id is: 1111

name is: QA

---------------------------

call instance method

call constructor method

id is: 2222

name is: Dev

Java 初始化字段方式和顺序的更多相关文章

  1. Java初始化块及执行顺序

    理解 初始化块又称为代码块.属于类中的第四大成员.本质上是一个方法,它也有方法体,但没有方法名,没有参数,没有返回,而且也不是通过对象或类名显式调用,而是通过隐式调用 是构造器的补充 语法 [修饰符] ...

  2. Java初始化顺序

    package com.helei.init; class Log { public static String fatherStaticString(){System.out.println(&qu ...

  3. java初始化构造函数调用顺序

    类初始化时构造函数调用顺序: (1)初始化对象的存储空间为零或null值:  (2)调用父类构造函数:  (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式:  (4)调用本身构造函数. 例子 ...

  4. [转]Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数

    Java初始化顺序1在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入)2,在装载类时,先装载父类A,再装载子类B3,装载父类A后,完成静态动作(包 ...

  5. Java构造方法、成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的?

    [Java笔试真题]:构造方法.成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的? [解答]:当类第一次被加载的时候,静态变量会首先初始化,接着编译器会把实例变量初始化为默认值,然后执行构 ...

  6. java初始化块执行顺序

    java中初始化块的执行顺序在构造器之前,多个初始化块之间定义在前的先执行.如下: public class InitialBlockTest { // The first one { System. ...

  7. C++使用初始化列表的方式来初始化字段

    几个月之前,接触Android recovery源代码的时候,看ScreenRecoveryUI类的时候,那时候C++基础还不是特别好,一直不明白以下的初始化方式: 下面这个是Recovery的一个构 ...

  8. C# 与Java初始化顺序及异同(转)

    C#初始化顺序 类成员变量初始化先于类的构造函数 静态成员变量先于实例变量 子类成员变量先于父类成员变量(java相反) 父类构造函数先于子类构造函数 参考实例: using System; //us ...

  9. 关于java中三种初始化块的执行顺序

    许多小伙伴对于java中的三种初始化块的执行顺序一直感到头疼,接下来我们就来分析一下这三种初始化块到底是怎么运行的.有些公司也会将这个问题作为笔试题目. 下面通过一段代码来看看创建对象时这么初始化块是 ...

随机推荐

  1. UIButton 设置字体大小

    btn.frame = CGRectMake(x, y, width, height); [btn setTitle: @"search" forState: UIControlS ...

  2. Lucene打分规则与Similarity模块详解

    搜索排序结果的控制 Lucnen作为搜索引擎中,应用最为广泛和成功的开源框架,它对搜索结果的排序,有一套十分完整的机制来控制:但我们控制搜索结果排序的目的永远只有一个,那就是信息过滤,让用户快速,准确 ...

  3. C++<algorithm>中sort的比较函数写法(转)

    转自:http://www.wl566.com/biancheng/98907.html C++<algorithm>中sort的比较函数写法,有需要的朋友可以参考下. 定义排序函数: 方 ...

  4. VirtualBox安装linux增强工具报错

    错误提示: Building the OpenGL support module                         [FAILED] 解决办法 cd /media/VBOXADDITIO ...

  5. PHP简易计算器方法1

    <?phpheader("content-type:text/html;charset=utf-8");session_start();?><!DOCTYPE h ...

  6. digital root问题

    问题阐述会是这样的: Given a non-negative integer num, repeatedly add all its digits until the result has only ...

  7. linux c语言连接mysql

    ubuntu下使用apt-get安装mysql: sudo apt-get install mysql-server sudo apt-get install mysql-client sudo ap ...

  8. 识别Json字符串并分隔成Map集合

    识别Json字符串并分隔成Map集合 前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新 ...

  9. Go语言AST尝试

    Go语言有很多工具, goimports用于package的自动导入或者删除, golint用于检查源码中不符合Go coding style的地方, 比如全名,注释等. 还有其它工具如gorenam ...

  10. ApiDemos示例学习(1)——ApiDemos示例的导入

    ---恢复内容开始--- 今天准备开始写这个ApiDemos示例的学习日记了,放在网上以监督自己! 首先是导入该示例.如果我们在配置Android开发环境是,利用Android SDK 安装包中的SD ...