「java类静态初始化」java静态初始化块什么时候执行

博主:adminadmin 2022-11-26 17:07:07 47

本篇文章给大家谈谈java类静态初始化,以及java静态初始化块什么时候执行对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

关于JAVA中static初始化问题

java虚拟机在首次主动使用类型的时候才会初始化(lazy-load的形式),主动使用包括以下6种情况

1. 创建类的实例

2. 调用类的静态方法

3. 操作类的非常量静态字段(非final static)

4. 调用特定的反射方法

5. 初始化一个类的子类

6. 指定一个类为虚拟机启动时的初始化类

所以说,你必须主动使用到这个类,这个类才会被初始化,这就能解释第一次有输出,而第二次没有输出的情况了

另外,值得一提的是,加载和初始化不是一个概念,比如,在main函数中写

Table a = null;

一样不会有输出。。Table类被加载了但是没有被初始化,因为这不属于上述6种“主动使用”情况之一,不信试试。。。

Java静态初始化块的问题

1、首先打开电脑上的eclipse软件,配置好jdk的,如下图所示。

2、点击左上角的file,点击new,点击Javaproject,如下图所示。

3、新建一个class文件,自己取名字,勾引main选项,自动调用main方法。

4、然后输入代码arrint[] arr = new int[5]; //动态初始化,在内存中开辟连续的5块空间。

5、这时控制台会出现010[I@15db9742,如下图所示就完成了。

高级Java开发中什么是静态初始化器?

静态初始化器是由关键字static引导的一对大括号括起的语句组。它的作用与类的构造函数有些相似,都用来完成初始化的工作,但是静态初始化器与构造函数有三点根本的不同:

(1)构造函数是对每个新创建的对象初始化,而静态初始化器是对每个类进行初始化;

(2)构造函数是在用new运算符产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载入内存时由系统调用运行的;

(3)不同于构造函数,静态初始化器不是方法,没有方法名、返回值和参数列表。

package com.text.java;

/**

* p class="detail"

* 功能:静态初始化器

* static{ 和 }之间的代码被称为静态初始化器。它只有在第一次加载类时运行。

* 只有静态变量才可以在静态初始化器中进行访问。

* 虽然创建了多个实例,但静态初始化器只运行一次。

* /p

* @ClassName: StaticUtil

* @version V1.0

* @date 2016-8-10

* @author dmw

*/

public class StaticUtil {

static int count;

static{

System.out.println("类初始化静态加载++++");

System.out.println("加载次数"+count);

count++;

}

public static void main(String[] args) {

StaticUtil temp1=new StaticUtil();

StaticUtil temp2=new StaticUtil();

StaticUtil temp3=new StaticUtil();

// 输出: 类初始化静态加载++++

// 加载次数0

}

}

java类中的静态变量是什么时候初始化的

静态方法是你手动调用的时候执行。

静态变量与类一起加载,最优先的。

然后是,静态初始化器(只初始化静态成员变量)。

然后是,属性初始化(只初始化非静态成员变量)。

最后是,构造函数(常用的,你懂的)...

记住:先是静态,然后是非静态。

java类中的静态常量是什么时候初始化的

我们知道一个类(class)要被使用必须经过装载,连接,初始化这样的过程。下面先对这三阶段做一个简单的描述,之后会结合一个简单的例子来说明java中类的初始化过程。

在装载阶段,类装载器(Bootstrap ClassLoader 或者用户自定义的ClassLoader) 把编译形成的class文件载入内存,创建类相关的Class对象,这个Class对象封装了我们要使用的类的类型信息。

连接阶段又可以分为三个子步骤:验证、准备和解析。

验证就是要确保java类型数据格式 的正确性,并适于JVM使用。

准备阶段,JVM为静态变量分配内存空间,并设置默认值,注意,这里是设置默认值,比如说int型的变量会被赋予默认值0 。在这个阶段,JVM可能还会为一些数据结构分配内存,目的 是提高运行程序的性能,比如说方法表。

解析过程就是在类型的常量池中寻找类、接口、字段和方法的符号引用,把这些符号引用替换成直接引用。这个阶段可以被推迟到初始化之后,当程序运行的过程中真正使用某个符号引用的时候 再去解析它。

类会在首次被“主动使用”时执行初始化,为类(静态)变量赋予正确的初始值。在Java代码中,一个正确的初始值是通过类变量初始化语句或者静态初始化块给出的。而我们这里所说的主动使用 包括:

1. 创建类的实例

2. 调用类的静态方法

3. 使用类的非常量静态字段

4. 调用Java API中的某些反射方法

5. 初始化某个类的子类

6. 含有main()方法的类启动时

初始化一个类包括两个步骤:

1、 如果类存在直接父类的话,且直接父类还没有被初始化,则先初始化其直接父类

2、 如果类存在一个初始化方法,就执行此方法

java中静态初始化和动态初始化

静态初始化就是static,动态初始化就是new

所谓的静态和动态是相对于程序运行是而言的,静态是在程序编译时就初始化好了的,动态初始化是在程序运行是才动态分配内存空间,

我觉得已经够通俗的了

java类静态初始化的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java静态初始化块什么时候执行、java类静态初始化的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。