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. poj2387-Til the Cows Come Home dijkstra获得水的问题

    Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29539   Accepted ...

  2. IE下支持文本框和密码框placeholder效果的JQuery插件

    基于jQuery实现的,主要用于IE下实现placeholder效果,可同时支持文本和密码输入框.placeholder是HTML5新增的一个属性,当input设置了该属性后,该值的内容将作为灰色提示 ...

  3. RAID技术

    RAID:其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵.容量巨大的硬盘.所以称为廉价磁盘冗余数组 RAID级别: RAID 0亦称为带区集.它是将多个 ...

  4. android代码集锦

    调用root权限的应用: /** * 执行Command命令的函数 * * @param command 命令 * @return 执行结果 */ public static boolean runR ...

  5. 删除cookie固定格式

    Response.Cookies["person"].Expires = DateTime.MinValue;

  6. jquery精简选项卡

    <!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8&qu ...

  7. Github 常用命令

    小记一些Github常用命令 : 在一个项目中... 假如要修补问题追踪系统上的 #53 问题.顺带说明下,Git 并不同任何特定的问题追踪系统打交道.这里为了说明要解决的问题,把新建的分支取名为 i ...

  8. js统计字符串,并且判断出现次数最多的

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. html中的圆角边框

    border-radius:20px; radius:以某某为半径画圆. 如何制作一个圆形: div{height:150px;//像素的一半,再加上边框的像素 width:150px; border ...

  10. WCF 启用multipleSiteBindingsEnabled 情况下报终结点地址错误

    报错信息如下: Server Error in '/MyWcfService' Application. When 'system.serviceModel/serviceHostingEnviron ...