首页 > 其他分享 >初始化

初始化

时间:2023-11-29 11:27:09浏览次数:27  
标签:初始化 System static println public out

初始化顺序

在类中变量定义的顺序决定了它们初始化的顺序。在创建任何java对象时,都是依次调用父类非静态初始化块、父类构造器执行初始化、本类的非静态初始化块、本类构造器执行初始化

public class House {
    // 构造器之前
    Window w1 = new Window(1);

    House(){
        System.out.println("House()");
        Window window = new Window(11);
    }

    // 构造器之后
    Window w2 = new Window(2);

    void f(){
        System.out.println("f()");
    }

    Window w3 = new Window(3);

    public static void main(String[] args) {
        House house = new House();
        house.f();
    }
}

public class Window {
    public Window(int mark){
        System.out.println("Window("+mark+")");
    }
}

执行结果

Window(1)
Window(2)
Window(3)
House()
Window(11)
f()

由执行结果可知,在进行对象实例化时先执行初始化块,再执行构造器主体部分

验证类加载

public class Initable {
    // 非编译期常量
    public static final int COUNT =new Random().nextInt(1000);
    static {
        System.out.println("Initable初始化");
    }
}


public class Initable1 {
    // 编译期常量
    public static final int COUNT = 47;

    static {
        System.out.println("Initable1初始化");
    }
}

public class Initable2 {
    public static int COUNT = 56;

    static {
        System.out.println("Initable2初始化");
    }
}

public class Initable3 {
    public static int COUNT = 33;

    static {
        System.out.println("Initable3初始化");
    }
}

public class Initable4 {
    public static int COUNT = 44;

    static {
        System.out.println("Initable4初始化");
    }
}

public class Test {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        System.out.println("Initable---------------");
        System.out.println(Initable.COUNT);
        System.out.println("Initable1---------------");
        System.out.println(Initable1.COUNT);
        System.out.println("Initable2---------------");
        System.out.println(Initable2.COUNT);
        System.out.println("Initable3---------------");
        Class<Initable3> clazz = Initable3.class;
        System.out.println("Initable4---------------");
        Class.forName("com.zhanghe.study.init.Initable4");
    }
}


结果:
Initable---------------
Initable初始化
457
Initable1---------------
47
Initable2---------------
Initable2初始化
56
Initable3---------------
Initable4---------------
Initable4初始化

Initable和Initable1结果分析

对于static final的值是一个编译期常量的话(如Initable1.COUNT),获取这个值时不需要对Initable1进行初始化就可以读取,如果用static final的值不是一个编译期常量(如Initable.COUNT),访问这个变量会强制对该类进行初始化

Initable2结果分析

对于一个仅仅是static修饰的字段而不是final的,在读取这个字段之前,需要为该字段分配存储空间以及初始化该存储空间

Initable3和Initable4结果分析

使用.class语法不会对类进行初始化,而使用Class.forName()来产生Class引用会直接引发类的初始化

注意:如果没有显式的编写构造器的话,java编译器会默认提供一个无参构造器,但是如果提供了自己的构造器,编译器将不会再生成默认构造器。

标签:初始化,System,static,println,public,out
From: https://www.cnblogs.com/life-time/p/17864156.html

相关文章

  • linux安装MySQL数据库初始化报错
    在使用如下初始化命令进行数据库初始化时报错,./bin/mysqld--user=mysql--basedir=/usr/local/mysql/mysql/--datadir=/usr/local/mysql/mysql/data/--initialize--lower-case-table-names=1; 权限不足导致,修改命令为:./bin/mysqld--user=root--basedir=/usr/local/mysql/m......
  • 字段初始化无法引用非静态字段,原因
    原文链接:https://blog.csdn.net/lishimin1012/article/details/828010941》C#语法规则:在 C# 中不允许使用未初始化的变量。2》属性内存和变量内存的分配的时间不一样。 属性是用的时候分配,而变量是在类初始化时候分配。3》在实例一个类时,因为静态字段赋值动作已经在静态构造......
  • 神经网络入门篇:详解随机初始化(Random+Initialization)
    当训练神经网络时,权重随机初始化是很重要的。对于逻辑回归,把权重初始化为0当然也是可以的。但是对于一个神经网络,如果把权重或者参数都初始化为0,那么梯度下降将不会起作用。来看看这是为什么。有两个输入特征,\(n^{[0]}=2\),2个隐藏层单元\(n^{[1]}\)就等于2。因此与一个隐藏层......
  • Docker容器初始化
    dockerexec-it容器ID/bin/bash进入容器内部,容器内部基本上很多命令都被删除,例如ping、curl、vim、vi、ip。如果有在容器内部调试的需求,没有这些基础命令是非常难受的。在制作镜像时,都会使用一个基本的系统镜像来构建,基础镜像一般分为redhat系列和debian系列。1:Debian系列......
  • python 对象 初始化并设置默认值
    Python对象初始化并设置默认值的实现步骤在Python中,我们经常需要为对象设置默认值。这些默认值可以在对象初始化时被设置,并在对象的方法中使用。本文将介绍如何使用Python的类和对象来实现对象初始化并设置默认值的功能。我们将根据以下步骤来完成这个任务:创建一个类定义初始......
  • 一维数组与二维数组的创建、初始化和储存
     一、一维数组1.数组的创建 数组是一组相同类型的集合。数组的创建方式:type_t  arr_name  [contest_n];//type_t是指数组的元素类型//const_n是一个常量表达式,用来指数组的大小介绍一下strlen和sizeof的区别strlen和sizeof没什么关联strlen是求字符串长度的,只能根据字符串......
  • 实现 利用SPI 接口 发送 显示屏 初始化代码
    1`timescale1ns/1ns2modulelcd_spi_top_tb();34regclk_x2_i;5regrst_i;6wirespi_cs;7wirespi_scl;8wirespi_mosi;9wirespi_miso;10wirespi_init_done;111213initialbegin14clk_x2_i=0;15rst_i=0;16......
  • 节点重启后初始化dpvs
    #加载大页内存echo2048>/sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepagesmount-thugetlbfsnodev/mnt/huge#加载vfio驱动modprobevfio-pci/usr/bin/chmoda+x/dev/vfio/usr/bin/chmod0666/dev/vfio/*echo1>/sys/module/vfio/param......
  • Winfrom窗体初始化和窗体Load方法前后
    运行结果为【窗体初始化之前!】》【窗体初始化!】》【窗体Load!】 ......
  • 三种初始化以及内存分析
    packagearray;publicclassArrayDemo02{publicstaticvoidmain(String[]args){//静态初始化:声明+创建+赋值一起做好了int[]a={1,2,3,4};System.out.println(a[0]);//动态初始化:包含默认初始化没有被赋值的如果想输......