文档章节

java 触发类的初始化的方法

Object_小风
 Object_小风
发布于 2015/10/21 17:58
字数 609
阅读 248
收藏 5
点赞 0
评论 0

什么是类的初始化,什么是类的实例化,什么情况下会触发初始化,可能很多人都有这样的疑问?

那么首先我们需要了解一下jvm的类加载过程。

从JVM上来看,类的加载机制从加载到虚拟机内存到卸载出内存,分为5个阶段:装载,链接(校验,准备,解析),初始化,使用,卸载。


这里我们只分析与我们相关的几个过程。

1,准备过程

例子

public class A{
(断点)  public static int a=1;
  public final static int b=2;
  public int c=3;
}
public class B{
public static void main(String args[]){
 A.a=2;
}
}

赋值静态域是我们知道的四种触发初始化的方法。

那么我们在a变量前打断点。

当执行main方法时,代码第一次运行到断点的位置时,你会发现

a=0,b=2.没有c。这就是类加载机制的准备阶段。

准备阶段:内存分配静态的类变量和常量.同时会为静态变量分配初始值。(分配初始值这个过程很多同学都会忽略掉)


2.初始化阶段

很多笔试或者面试都会问什么情况下会触发初始化。

1,实例化的时候肯定是要触发的new 和Class.forName()

2,类的静态方法被调用的时候

3,类的静态域被访问,被赋值的时候(如果访问的是静态常量,则不会触发初始化)

4,java反射 reflect

大体就是这几种方式。

初始化 会给静态变量赋值,执行静态代码块.

如果一个类有static{} 普通{} 构造器函数 A{}都有,还继承了父类

则执行顺序上来看,

例子

class A{
public static int a=1;
static{System.out.println("1")}
      {System.out.println("3")}
public A{System.out.println("4")}
public static getA(){
     System.out.println("7")}
}
class B extends A{
public static int a=1;
static{System.out.println("2)}
      {System.out.println("5")}
public A{System.out.println("6")}
public static getA(){
     System.out.println("8")}
}
public static void main(String args[]){
 //new B;实例化子类 执行顺序123456
 //A.a=2 赋值父类静态变量 ,执行12,a=2
 //A.getA() 执行父类静态方法 执行127
 //B.getA() 执行子类静态方法,和重写没毛关系,执行128
}
总结:
初始化只会执行静态代码块,实例化会继续执行普通代码块和构造函数。
}




© 著作权归作者所有

共有 人打赏支持
Object_小风
粉丝 3
博文 38
码字总数 19063
作品 0
朝阳
程序员
两道面试题,带你解析Java类加载机制

文章首发于【博客园-陈树义】,点击跳转到原文《两道面试题,带你解析Java类加载机制》 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: 请写出最后的输出字符...

陈树义 ⋅ 06/12 ⋅ 0

两道面试题带你解析 Java 类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ } class Father extends Grandpa{ }class Son extends Father{ }public class Initialization...

⋅ 06/13 ⋅ 0

Java和Android ClassLoder对比以及Class加载过程

Java的ClassLoder的父子关系如下:Bootstrap--ExtClassClassLoader---AppClassLoader。 JVM启动时先运行启动类加载器Bottstrap,主要加载Java核心API;然后加载扩展类加载器ExtClassLoder,该...

JasmineBen ⋅ 05/23 ⋅ 0

JVM系列[1]-Java类的生命周期

原本是想写一篇关于Java类加载机制的博文,后来发现这个主题有点大,其中涉及的细节点太多,一篇博文,三言两语恐怕无法讲明白,于是乎决定从整体到局部,先来谈谈类的生命周期,从整体把握一...

sherlockyb ⋅ 04/16 ⋅ 0

【Canal源码分析】Canal Instance启动和停止

一、序列图 1.1 启动 1.2 停止 二、源码分析 2.1 启动 这部分代码其实在ServerRunningMonitor的start()方法中。针对不同的destination,启动不同的CanalInstance。主要的方法在于initRunning...

端木轩 ⋅ 05/24 ⋅ 0

Java 面试知识点解析(三)——JVM篇

前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大部...

我没有三颗心脏 ⋅ 05/16 ⋅ 0

14、Java并发性和多线程-Java ThreadLocal

以下内容转自http://ifeve.com/java-theadlocal/: Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作。因此,尽管有两个线程同时执行一段相同的代码,而且这段代码又有...

easonjim ⋅ 2017/06/16 ⋅ 0

ThreadLocal源码分析

阅读原文请访问我的博客 BrightLoong's Blog 一. 简介 提醒篇幅较大需耐心。 简介来自ThreadLocal类注释 ThreadLocal类提供了线程局部 (thread-local) 变量。这些变量与普通变量不同,每个线...

BrightLoong ⋅ 05/28 ⋅ 0

java程序员基础进阶篇,万丈高楼平地起

一.final,finally,finalize 三者区别 Final是一个修饰符: 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这...

启示录是真的 ⋅ 05/26 ⋅ 0

Java反序列化漏洞的原理分析

  *本文原创作者:Moonlightos,本文属FreeBuf原创奖励计划,未经许可禁止转载   世界上有三件事最难:      把别人的钱装进自己的口袋里   把自己的想法装进别人的脑袋里   让自...

FreeBuf ⋅ 05/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部