「java静态初始化块」java静态初始化块和初始化的区别

博主:adminadmin 2022-11-22 06:39:09 66

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

本文目录一览:

关于Java静态初始化器的一个小问题。

static代码区里的内容是当你运行程序时,也就是代码刚刚被加载到内存里时就先执行的,不管有没有这个这个类的对象存在,只要代码被加载到内存里了,这两句话就先被执行,你一个对象都不创建也是这个结果。

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的静态块和初始化块分别何时执行?有什么区别?

静态初始化块:当类第一次加载时执行。

非静态初始化块:非静态初始化块会在构造函数执行时,且在构造函数主体代码执行之前被执行。

区别如下:

1、执行次数不同

静态块只执行一次,初始化块可以执行多次。

2、作用不同

静态初始化块仅能初始化类变量,即static修饰的数据成员。

非静态初始化块可以初始化类的实例变量。

扩展资料:

使用Java静态代码块注意事项:

1、它是随着类的加载而执行,只执行一次,并优先于主函数。具体说,静态代码块是由类调用的。类调用时,先执行静态代码块,然后才执行主函数的。

2、静态代码块其实就是给类初始化的,而构造代码块是给对象初始化的。

3、静态代码块中的变量是局部变量,与普通函数中的局部变量性质没有区别。

4、一个类中可以有多个静态代码块。

5、对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)(变量、初始化块)构造器。

java中对象的初始化位置是构造器,那static修饰的对象在哪初始化?

一个对象的初始化过程。建议百度一下具体信息。

static修饰的变量是静态变量,在其类被加载的时候进行初始化动作。

上图就是类进行加载初始化时机。类只加载一次直到被卸载。

你上面的代码,如果把main方法放到另一个class中,你会发现只打印hello。因为App这个类没有被用到,是不会进行加载的。

类加载的准备阶段会为类中的所有静态变量按顺序分配内存空间,并为其设置一个初始值。基本类型为0,引用类型是null。

类加载的初始化阶段会为类中的所有静态变量按顺序(从上到下,这个顺序还是比较重要的,顺序不一样结果可能就不一样了)进行赋值操作。

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

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

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

我觉得已经够通俗的了

java 静态初始化块中是否可以定义静态变量?

静态变量只能定义在类的内部,不可以定义在静态块或方法中

可以在类内部定义静态变量,在静态块中进行初始化操作,因为类的内部是不允许有操作语句存在的,比如JDBC操作,所以可以在静态块static{} 中进行初始化操作,如:JDBC

定义静态变量主要是为了供外部访问,定义在一个局部中外部没有权限访问,为什么要定义呢,而且不能定义

关于java静态初始化块和java静态初始化块和初始化的区别的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

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