java类的初始化块/执行顺序,实例化对象数据赋值

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

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

静态初始化块

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


非静态初始化块

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


构造方法

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


重点:执行顺序->

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

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

package com.mgh;

public class Main {

    String name; // 声明变量name
    String sex; // 声明变量sex
    static int age;// 声明静态变量age

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

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

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

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

    public static void main(String[] args) {

        // 创建对象
        Main obj1 = new Main();
        Main obj2 = new Main();
        // 调用对象的show方法
        obj1.show();
        obj2.show();
    }
}

output:
通过静态初始化块初始化age
通过初始化块初始化sex
通过构造方法初始化name
通过初始化块初始化sex
通过构造方法初始化name
姓名:tom,性别:男,年龄:20
姓名:tom,性别:男,年龄:20
时间: 2024-10-20 02:10:30

java类的初始化块/执行顺序,实例化对象数据赋值的相关文章

java类与继承的执行顺序

1.子类 public class TestClassLife extends TestClassLifeSuper { public TestClassLife() { System.out.println("3.构造行数被访问"); } { System.out.println("2.初始化块被访问"); } static { System.out.println("1.静态初始化块被访问"); } public void Go() { Sy

JVM 类加载过程、初始化、主动引用、被动引用、静态初始化块执行顺序

java初始化的执行顺序

Java初始化(initialization)其实包含两部分: 1.类的初始化(initialization class & interface)2.对象的创建(creation of new class instances).因为类的初始化其实是类加载(loading of classes)的最后一步,所以很多书中把它归结为“对象的创建”的第一步.其实只是看问题的角度不同而已.为了更清楚的理解,这里还是分开来. 顺序:应为类的加载肯定是第一步的,所以类的初始化在前.大体的初始化顺序是:类初始化

域初始化、静态块及构造方法等在创建类实例时的执行顺序(转载)

在<Core java 2: volumn 1, Edition 5>一书的第四章“对象与类”中讲到域赋值语句.实例块.静态块及构造方法等在创建类实例时的执行顺序,中文译本有些处翻译的不贴切,而英文原书中也有一处错误.本文通过一个小程序来说明类实例构造过程中的语句执行顺序. 程序如下: public class Teststaticblock { public Teststaticblock() { this("second"); System.out.println(&q

java类的初始化顺序

java类的初始化顺序 (2008-10-21 13:30:15) 转载▼ 标签: java 初始化 继承初始化 it 分类: Java 对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: public class InitialOrderTest { // 静态变量 public static String staticField = "静态变量";

《Java编程思想》学习01:普通类的初始化加载顺序分析

<Java编程思想>学习01:普通类的初始化加载顺序分析 本文根据控制变量法,分析普通类(没有extends,implement)初始化的加载顺序: 参考<Java编程思想>第五章 源码 StaticClass1类 package com.tyj.study.thinkinjava; /* * *@Description: *@Author:TYJ *@Date: create in 2019/7/9 17:22 */ public class StaticClass1 { { S

java类内容初始化顺序

在java类中一般有:成员变量.静态变量.成员方法.静态方法.构造方法.那么这几个的初始化顺序是什么呢? 初始化的先后顺序是:静态变量(类load进内存就初始化)------静态代码块(类load进内存就初始化)--------成员变量(对象初始化时)------------初始化块------------构造函数 测试程序如下: package com.evan; /* * 初始化顺序测试 */ public class InitialOrderTest { public static Str

java基础复习一、代码块执行顺序

1 /** 2 * 代码块执行顺序的测试 3 * 执行顺序 静态代码块>main代码块>构造代码块>构造函数>普通代码块 4 * @author Administrator 5 * 6 */ 7 public class ClassDemo01 { 8 static { 9 System.out.println("这是一个静态代码块"); 10 } 11 { 12 System.out.println("这是一个构造代码块"); 13 } 1

Java中普通代码块,构造代码块,静态代码块执行顺序

执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. static块,普通代码块,构造代码块执行顺序 class A{ public A(){ System.out.println("Hello A"); } { System.out.println("block A"); } static{ System.out.println("static A