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. 网络视频传输的服务质量(QoS)

    QoS(Qualityof Service)服务质量,是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术.在正常情况下,如果网络只用于特定的无时间限制的应用系统,并不需要QoS,比如We ...

  2. JavaScript检测之basevalidate.js

    上篇文章「JavaScript检测原始值.引用值.属性」中涉及了大量有用的代码范例,为了让大家更方便的使用这些代码,博主特意把这些代码重新整理并托管到 GitHub,项目地址是:https://git ...

  3. C# Socket服务端和客户端互相send和receive

    服务端           {          ];          ;                                       {                       ...

  4. 字符串聚合技术(String Aggregation Techniques)

    from: http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php String Aggregation ...

  5. TextField的所有属性和方法(转)

    转自:http://tsyouaschen.iteye.com/blog/600255 表一 TextField 对象的方法 方法 说明TextField.addListener 加入接收触发事件如文 ...

  6. jquery easyUI DataGrid 初始化的时候就显示可排序的字段

    在使用easy ui的列表中,想要标记可以排序的字段,使用户一看页面就知道哪些是可以点击排序的. 给可排序的字段添加 图标在列名后面.不可排序的字段还和原来一样. 步骤: 你需要一个图标 , 你需要给 ...

  7. Spring2.0集成Quartz1.5.2调度框架

    Quartz是个开放源码项目,提供了丰富的作业调度集.希望您在阅读完本文并看过代码演示后,可以把Quartz的基本特性应用到任何Java™应用程序中.现代的Web应用程序框架在范围和复杂性方面都有所发 ...

  8. input submit button iOS webview browser diffrence

    最近做项目用到了webview, 在浏览器中显示正常的input[type="submit"]按钮, 加载到webview中后css里的设置都失效了, webview里渲染的是最原 ...

  9. codeforces 702E Analysis of Pathes in Functional Graph 倍增

    题目链接 给一个图, 然后给出每条边的权值和一个k值. 让你求出从每个点出发, 走k次能获得的边权的和以及边权的最小值. 用倍增的思想, 求出每个点走一次能到达的点, 权值和以及最小值, 走两次..四 ...

  10. Web模板

    http://www.iteye.com/news/26229 http://designmodo.com/admin-html-website-templates/#ixzz1mj36E4kN ht ...