栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

类加载及初始化问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

类加载及初始化问题

首先看一下简单的代码

class A {

          public static String a = "a";

}

class B extends A {

       static{

             System.out.println("b");

      }

}

class Text{

        public static void main(String[] args){

               System.out.println(B.a);

        }

}

这段代码你们觉得运行出什么呢

应该有一部分人或者大部分认为输出b和a

但是ba错啦  可以试试将这段代码在IDEA运行我相信结果应该只有a

觉得 输出b和a应该认为加载B类的时候会执行静态块,但是这个为什么不执行呢

这就是我接下来想说的类加载及初始化的静态块的问题了

首先我们先明白一下俩个概念

//类加载   //初始化

都知道代码执行是在内存中,而代码是在硬盘文件中,执行的时候需要在硬盘读取出来加载到内存里这个叫做类加载 这个过程是由类加载器classLoader去完成的,这个类加载器加载过来后,这个类下有静态代码块,而我们认为这个代码块需要调用这个过程,而这个调用过程叫做初始化,就是它会自动调用当前类下的静态代码块,然后初始化让它执行一遍

但是这里有一个误区,什么误区呢,很多人觉得内加载后会马上就初始化

其实内加载后不一定要初始化,初始化也要触发条件

首先我们在主动访问静态成员或者调用静态方法的时候才会触发初始化就是静态块会先执行

第二个

我们在创建对象的时候,通过创建对象类加载开辟空间然后就会先初始化调静态块

第三个

就是我们通过反射访问当下这个类,然后这个可能也会触发这个初始化

没触发这三个条件不会去调用静态块只会加载类

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1016622.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号