Java中类的初始化和实例化区别

一、区别

类的初始化:

是完成程序执行前的准备工作。
在这个阶段,静态的(变量,方法,代码块)会被执行。同时在会开辟一块存储空间用来存放静态的数据。
初始化只在类加载的时候执行一次

类的实例化(实例化对象):

是指创建一个对象的过程。这个过程中会在堆中开辟内存,将一些非静态的方法,变量存放在里面。在程序执行的过程中,可以创建多个对象,既多次实例化。每次实例化都会开辟一块新的内存。(就是调用构造函数)
在每个类初始化使用前,都会先对该类进行加载(不是指类的实例化)
类加载有几个步骤,加载->验证->准备->解析->初始化
在编译过程会把常量的值放入类的常量池中,在准备过程会对类变量(static修饰的变量)赋初始值,也就是零值,同时会将常量的值赋予常量;在初始化过程会按照类文件中的声明顺序执行类变量的赋值和静态语句块(static{}块),如果父类还没有初始化会先进行父类的初始化,完成后才会进行子类的初始化。
可以看到在初始化阶段就会执行static{}块的语句,而每一个类在运行过程中一般只会被加载一次(不是指实例化,特殊情况是使用其他类加载器对类进行加载),所以只会完成一次初始化过程,因此也就只会执行static{}块一次。 类的实例化和类的加载是两个不同的概念。

在这里插入图片描述

https://www.jb51.net/program/295093098.htm

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值