static关键字

1.java类加载机制

详细的可以看https://blog.csdn.net/qq_44543508/article/details/102983363

类加载是jvm的一个重要领域。关于jvm的知识可以看这个博主的https://blog.csdn.net/qq_33909701/article/details/105333627?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162843107816780366525968%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162843107816780366525968&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~top_click~default-2-105333627.pc_v2_rank_blog_default&utm_term=jvm%E6%98%AF%E4%BB%80%E4%B9%88&spm=1018.2226.3001.4450

阶段:加载---准备

加载阶段简单来说就是:.class文件(二进制数据)----读取到内存中----数据放进方法区-----堆中创建对应class对象----并提供访问方法区的接口

准备阶段:jvm会为被static修饰的变量分配内存并且取该数据类型的默认值如int的默认值是0(注意如果是final static修饰则不用初始化 ),不会为类成员变量分配。

解析阶段:解析阶段就是虚拟机将常量池内的符号引用替换为直接引用(不用掌握)

初始化阶段:对类的使用方式分为主动使用和被动使用。

此题解析:调用静态方法时,初始化这个静态方法所在的那个类,而且类继承原则是初始化一个子类,会先去初始化其父类!但是由final static修饰的常量此时不会初始化任何类。但final static int a=Math.random,这个a并不会在编译之前知道结果,此时不会放到调用类的常量池中,所以这个类会被初始化。

static属于类初始化启动,其他的是对象初始化时启动。 

 

JVM的类加载机制:全盘负责、父类委托、缓存机制

所有的类加载器都继承自classloader(不包括启动类加载器)

 2.static关键字

static只会在类加载的时候执行一次,因此很多时候将一些只需要进行一次的初始化操作都放在static代码块中进行。

被static修饰的变量或者方法是独立于改类的任何对象,这些变量与方法不属于任何实例对象,而是被类的实例对象所共享。静态变量是属于这个类,不是属于这个对象。所以在内存中只会有一份

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值