关于类初始化的一个诡异问题

news/2024/7/8 5:18:28

圣思园张龙老师关于类加载器的一个例子。

这个打印的是1,1

这个打印的是1,0

 

造成以上的区别的原因就在于:类加载的时候先准备(静态变量赋默认值),然后初始化(赋值或者静态代码块),实例化。

 

类的初始化只有在以下六种情况(主动使用)才会发生:

  1. 创建类的实例,并且不影响子类的初始化
  2. 访问某个类或者接口的静态变量或者赋值
  3. 访问类的静态方法
  4. 反射,比如Class.forName("xxxxxxxxxxxxx")
  5. 初始化一个类的子类
  6. 启动类

类的主动使用:只有访问当前类或者接口的静态变量或者方法时,才认为是主动使用。


http://www.niftyadmin.cn/n/3568775.html

相关文章

记录定时任务迁移xxl-job的过程和理解

一般定时任务使用的是基于quartz或者spring-scheduler的,能够满足大部分的开发需求。但是像手动执行一次,执行情况监测,进程阻塞停止等维护需求就显得无能为力了。无意间在gitee.com上发现了一个很好满足以上需求的项目,来自许雪里…

vsftpd 安装过程记录

使用yum安装,执行安装命令:yum install -y vsftpd 安装FTP服务器 创建FTP用户和FTP的目录,并修改FTP目录的权限给FTP用户 创建用户: 重置密码: 创建FTP目录: 授权FTP目录权限给camera用户: 修改目录用户组执行权限: 进入/et…

NFS网络的搭建和迁移

以前的NFS服务器在192.168.0.50 ${oldserverip},在新机器192.168.0.100 ${newserverip}上安装NFS服务,迁移数据到新主机上,然后启动NFS服务,其他的客户端全部重新挂载到新的NFS网络。 保持挂载目录和以前完全一样: 以…

lduan Exchange 2013 部署(二)

转载于:https://blog.51cto.com/tblduan/1899182

从使用os.system)在python命令(重定向标准输入输出

从使用os.system)在python命令(重定向标准输入输出 python 标准输出stdout stdio os.system通常我可以通过改变sys.stdout的值在python更改标准输出。然而,这似乎只影响打印那么,有没有什么办法可以抑制方案是通过使用os.system在…

OutputStream与PrintWriter的使用与区别

1.OutputStream 使用步骤: 获取输出流设置中文将字符串转换成字节数组调用outputStream.write()这里只贴出doGet方法的内容: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/…

如果mysql的自增主键达到最大值会发生什么?

如果mysql的自增主键达到最大值会发生什么?比如主键类型设为int,其最大值为:2147483647,如果此时我们再往其中写入数据,就会发生异常: Duplicate entry 2147483647 for key PRIMARY 也即写不进去了。如果…

UWP应用程序使用Prism框架构建MVVM

在我们创建的UWP解决方案中选择引用->管理NuGet包程序包 NuGet管理包 2. 搜索Prism.Core,并安装 搜索Prism.Core 3. 搜索Prism.Unity,并安装 搜索Prism.Unity 4. 在项目解决方案中添加ViewModels文件夹 创建ViewModels文件夹 5. 在项目解决方案中添加…