静态代码块、构造代码块、构造函数

news/2024/5/19 1:30:11 标签: 静态代码块, 构造代码块, 构造函数

类实例化时,依次执行到(静态成员变量和)静态代码块、(非静态成员变量和)构造代码块构造函数。如果成员变量未赋值则断点捕捉不到执行成员变量声明的代码行。

(静态成员变量和)静态代码块只执行一次。(非静态成员变量和)构造代码块每次实例化都执行。

静态代码块中若使用类的变量,此变量必须是静态的。

(静态成员变量和)静态代码块可以有多个,按写入顺序执行。(非静态成员变量和)构造代码块可以有多个,按写入顺序执行。

先执行(静态成员变量和)静态代码块,再执行(非静态成员变量和)构造代码块

第一次加载类时(如第一次实例化类,或者第一次调用类,只是使用静态成员变量时。只声明而不实例化在class中并不会记录,不会加载类。)只执行(静态成员变量和)静态代码块。 

public class CodeBlock{
    public volatile int z1 = 1;

    public static int a
            = 1;

    public int a1;
    // 构造函数
    public CodeBlock(int a){
        this.a=a;
        System.out.println("构造函数 a:" + a);
    }

    public static int b;
    public int b1 = 1;
    //构造代码块
    {
        System.out.println("构造代码块1");
        int aaa = a1;
        int bbb = aaa;
        int aaa1 = a1;
    }
    {
        System.out.println("构造代码块2");
    }

    public static int c = 1;
    public int c1 = 1;

    // 静态代码块
    static{
        System.out.println("静态代码块1");
    }

    static{
        System.out.println("静态代码块2");
    }

    public static int d = 1;
    public int d1 = 1;

    void show(){
        System.out.println("方法代码块 a:"+a);
        // 局部代码块
        {
            a=30;
            System.out.println("局部代码块 a:"+a);
        }
        System.out.println("方法代码块 a:"+a);
    }

    public static void main(String[] args) {
        System.out.println(1);
    }
}

class StaticCodeDemo{
    public static void main(String[] args){
        CodeBlock codeBlock;
        int i = CodeBlock.a;
        CodeBlock codeBlock1 = new CodeBlock(10);
        codeBlock1.a1 = 2;
        System.out.println("---------------");
        CodeBlock p1;
        System.out.println("---------------");
        p1=new CodeBlock(20);
        System.out.println("---------------");
        p1.show();
        System.out.println("---------------");
        CodeBlock p2;
        System.out.println("---------------");
        p2=new CodeBlock(40);
        System.out.println("---------------");
        p2.show();
        System.out.println("---------------");
    }
}

对应的class:

public class CodeBlock {
    public volatile int z1 = 1;
    public static int a = 1;
    public int a1;
    public static int b;
    public int b1 = 1;
    public static int c = 1;
    public int c1;
    public static int d;
    public int d1;

    public CodeBlock(int a) {
        System.out.println("构造代码块1");
        int aaa = this.a1;
        int var4 = this.a1;
        System.out.println("构造代码块2");
        this.c1 = 1;
        this.d1 = 1;
        CodeBlock.a = a;
        System.out.println("构造函数 a:" + a);
    }

    void show() {
        System.out.println("方法代码块 a:" + a);
        a = 30;
        System.out.println("局部代码块 a:" + a);
        System.out.println("方法代码块 a:" + a);
    }

    public static void main(String[] args) {
        System.out.println(1);
    }

    static {
        System.out.println("静态代码块1");
        System.out.println("静态代码块2");
        d = 1;
    }
}

结果: 

静态代码块1
静态代码块2
构造代码块1
构造代码块2
构造函数 a:10
---------------
---------------
构造代码块1
构造代码块2
构造函数 a:20
---------------
方法代码块 a:20
局部代码块 a:30
方法代码块 a:30
---------------
---------------
构造代码块1
构造代码块2
构造函数 a:40
---------------
方法代码块 a:40
局部代码块 a:30
方法代码块 a:30
---------------

 


http://www.niftyadmin.cn/n/752980.html

相关文章

彷徨 | Hadoop之MapReduce个人浅谈

MapReduce是分布式运算编程框架,Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上 为什么要MAPREDUCE (1)海量数据在单机上处理因为硬件资源限制,无法胜任…

JavaFX全屏

import javafx.application.Application; import javafx.geometry.Rectangle2D; import javafx.stage.Screen; import javafx.stage.Stage;import java.awt.*;//舞台最大化 primaryStage.setMaximized(true); //获取窗口标题栏之外的最大尺寸 Screen screen Screen.getPrimary…

Map第一个key

Map<String, String> result new HashMap<String, String>(); //Map第一个key result.keySet().iterator().next();

彷徨 | Hadoop之Yarn个人浅谈

分布式资源调度平台 : Yarn YARN的服务进程角色 ResourceManager(只能在一台机器上 , 负责任务调度的) : 1 接收客户端请求 2 为整个Yarn集群分配资源 NodeManager(可以在很多台机器上运行,负责创建容器运行程序) : 1 能够根据客户端提交的任务的请求 , 会在NodeManager…

小程序 笔记

1、 表单处理 a、form标签&#xff1a; bindsubmit属性用于设置方法来监听表单的提交事件,对应的表单提交按钮的form-type属性设置为submit。 bindreset用于设置方法来监听表单的重置事件&#xff0c;对应的表单提交按钮的form-type属性设置为reset bindsubmit > form-type&…

读取Jar包文件夹里的所有jar包文件名;生成连续解压jar包的命令行;生成连续的本地非Maven仓库型依赖

package tool;import java.io.File;// 解析Jar包名称 public class DealJarFolder {public static void main(String[] args) {String filePath "F:\\Learning\\BookStare\\bookstore-master-java-eclipse\\WebRoot\\WEB-INF\\lib";searchJarName(filePath);}privat…

css修改整个项目的滚动条样式

在项目中&#xff0c;滚动条不可避免的药出现。设置统一规范的滚动条也是必然。用一个独立的css文件即可修改整个项目中的滚动条样式 。 scrollBar.css: /* 滚动条有滑块的轨道部分 */ ::-webkit-scrollbar-track-piece {background-color: #00000000;border-radius: 1px; }/* …

彷徨 | MapReduce实例七 | Join拼接

以用户订单数据为例 : JoinBean import java.io.DataInput; import java.io.DataOutput; import java.io.IOException;import org.apache.hadoop.io.Writable;public class JoinBean implements Writable{private String oid;private String uid;private String name;private…