zoukankan      html  css  js  c++  java
  • 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
    from https://www.cnblogs.com/Berryxiong/p/6245100.html
  • 相关阅读:
    关于MFC消息的总结
    关于VS中包含库、附加包含库、
    关于MFC中重载函数是否调用基类相对应函数的问题
    关于子窗口处理自身消息而不扩散给父窗口的问题
    进程与线程理解-1
    程序设计思想-2
    线程与进程
    网路编程之socket与 socketserver、黏包
    网络编程之TCP协议与UDP协议
    网络编程基础
  • 原文地址:https://www.cnblogs.com/shizhijie/p/8819029.html
Copyright © 2011-2022 走看看