「java对象初始化过程」java对象初始化过程是什么

博主:adminadmin 2022-12-19 09:27:09 61

今天给各位分享java对象初始化过程的知识,其中也会对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中关于对象初始化的问题

Java程序的初始化对于新手来说是比较复杂,看似繁琐,对于我们已经有些经验的程序员来说也未必很清楚,搞清楚了对象初始化的过程不至于在程序中犯些莫名的错误。创建对象时,初始化的顺序是由变量在类的定义里的顺序所决定。变量的定义可以分散在类定义中的各个地方,并且与方法定义相互交错,但是变量的初始化会优先于任何方法,甚至是构造函数的调用。在变量中又可以分为静态变量和非静态变量,在创建对象或调用类的静态方法时,首先会对类的所有静态成员进行初始化,然后初始化非静态成员,代码如下:

Cup 代码

package test;

public class Cup{

public Cup(int marker) {

System.out.println("Cup(" + marker + ")");

}

void f(int marker){

System.out.println("f(" + marker + ")");

}

}

Cups 代码

package test;

public class Cups{

static Cup c1 = new Cup(1);

Cup c3 = new Cup(3);

public Cups() {

System.out.println("Cups()");

}

static Cup c2 = new Cup(2);

}

ExplicitStatic 代码

package test;

public class ExplicitStatic {

public static void main(String[] args) {

System.out.println("Inside main()");

Cups cups = new Cups();

}

}

运行结果如下:

Inside main()

Cup(1)

Cup(2)

Cup(3)

Cups()

从运行结果可以看出,创建Cups对象时先初始化它的两个静态成员c1和c2,又由于这两个静态成员在Cups类中定义的顺序是c1、c2所以输出结果为Cup(1),Cup(2),接着才初始化非静态的成员c3,最后才是Cups的构造函数的调用。

如果对象存在父类,则在初始化时首先会初始化父类对象。我们可以这样考虑,子类是继承父类的,它必然会使用父类的protected和public的成员变量和方法,如果父类不先初始化子类又如何去使用呢。

Java中对象如何初始化

初始化数组有三种方式,以下都是去初始化一个String类型长度2的数组:

方式一:

123String[] strs = new String[2];strs[0] = "0";strs[1] = "1";

方式二:

1String[] strs = new String[]{"0", "1"};

方式三:

1String[] strs = {"0", "1"};

三种方式,都有自己的使用场景,在合适场景使用即可。

java对象的初始化方法有哪些

一、构造器;

二、静态工厂方法;

基本细想:通过类中的静态方法返回对象。(如果构造方法私有,称做单例模式)

三、通过Class类;

基本细想:实例化无参构造的类,先通过forName()方法实例化Class对象(即反射操作),然后用Class类中的

newInstance()方法;实例化带参数构造的类,需要使用Class类中的getConstructors()方法获取所有的构造,然后同上操

作。

求采纳

JAVA里初始化是什么意思?

初始化就是给变量一个初始值。

例如:

声明一个变量:String aa = "abc";int cc =0;其中abc和0就是初始化的值,最后值不一定是abc或者 0加入你覆盖了aa的值如下:

aa = "def" ; cc=1;那最后aa变量的值就是def,cc变量就是1了,初始化的目的是为了让变量有值,防止使用时出现异常。

扩展资料:

作用

1、遇到new,getstatic,putstatic,或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这四条指令单最常见的Java代码场景是:

使用new关键字实例化对象的时候,读取或设置一个类的静态字段(被final修饰,已在变异期把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。

2、使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先出法其初始化。

3、当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先出法其父类的初始化。

4、当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。

java 对象的初始化方式有几种

1、构造器

创建对象时初始化,比较常见。

classA{

publicA()

{}

}

public

2、初始化块

较少见,用于有特殊要求的类。

static {

}

3、方法

即Setter方法,虽然方便(不必在创建对象时一次性初始化),但是可能引发空指针异常。

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

The End

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