文档章节

JVM 类的加载(四)- 父类子类加载关系

保安队长
 保安队长
发布于 2016/10/28 21:31
字数 442
阅读 37
收藏 1

子类与父类的在类的启动时,遵循父类先加载,子类后加载的规则,常会用作于坑爹笔试题。下面看代码解释。 有两个类 Parent 和 Child,Child extend Parent。

public class Parent
{
	public static int parent;
	static
	{
		System.out.println("This is Parent");
	}
}
public class Child extends Parent
{
	public static int child;
	static
	{
		System.out.println("This is Child");
	}
}

接下来,我们写一个Test测试类来测试这父子类的加载顺序

public class Test {
    public static void main(String[] args) {
        System.out.println(Child.child);
    }
}

我们来输出Child里的child变量,结果为

This is Parent

This is Child

0

由此可看出,在访问Child里的静态成员变量child的时候,会引起类的加载,同时,子类加载之前,父类会先于子类加载。所以先输出父类结果,其次子类,最后自己的成员变量

紧接着,我们再写一个Test类来访问父类

public class Test {
    public static void main(String[] args) {
        System.out.println(Parent.parent);
    }
}

结果为

This is Parent

0

由此可见,在加载父类的时候,子类不会被加载。这个比较容易理解,因为所有的对象的父类都是object,如果你加载object时,子类也加载了,那程序岂不是要崩溃。。。

最后,再用下面的写法再做一个测试,用子类去访问父类的静态成员变量

public class Test {
    public static void main(String[] args) {
        System.out.println(Child.parent);
    }
}

结果为

This is Parent

0

子类还是没有被调用,这是为什么呢,这里需要注意,虽然使用了Child的类,但并没有访问Child的静态成员变量,所以不会引起Child类的加载,而父类Parent的静态成员变量被访问了,所以父类会加载。 结果就为上。

© 著作权归作者所有

保安队长
粉丝 1
博文 25
码字总数 8881
作品 0
大连
程序员
私信 提问
加载中

评论(0)

【JVM】浅谈双亲委派和破坏双亲委派

一、前言 笔者曾经阅读过周志明的《深入理解Java虚拟机》这本书,阅读完后自以为对jvm有了一定的了解,然而当真正碰到问题的时候,才发现自己读的有多粗糙,也体会到只有实践才能加深理解,正...

joemsu
2018/07/14
0
0
Java继承与初始化全过程解析

Java初始化简介 一般来说,在Java中,每个类产生的编译代码都存在于它自己的独立文件中,该文件只有在使用程序代码时才会被加载,也就是说,类的代码只有在初次使用时才加载。但是,如果存在...

断桥残雪断桥残雪
2015/08/12
2.1K
1
【java基础☞初始化顺序】java继承中的初始化顺序

1、初始化顺序:父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父类的非静态变量(父类的非静态代码块)-->父类的构造函数-->子类的非静态变量(子类的非静态代码...

卯金刀GG
2019/06/25
44
0
Java和Android ClassLoder对比以及Class加载过程

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

JasmineBen
2018/05/23
0
0
深入浅出 ClassLoader

内容概述 “类加载”介绍 “类加载器”介绍 深入“类加载器” 深入“父亲委托机制” 一,“类加载”介绍 “加载”是类加载的时机的第一阶段。 类从被加载到虚拟机内存中开始,到卸载出内存为...

tomas家的小拨浪鼓
2019/08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kuiper 0.2.0 正式发布 - 超轻量IoT边缘流处理

日期:2020/1/3 Kuiper 团队宣布发布 Kuiper 0.2.0 Kuiper 0.2.0 [可以从这里下载](https://github.com/emqx/kuiper/releases/tag/0.2.0)。 EMQ X Kuiper 是 Golang 实现的轻量级物联网边缘分......

EMQX
9分钟前
13
0
奇亿音乐带您了解环境音效制作思路

无论是MMORPG,还是SLG游戏,都是在游戏中创造一个虚拟世界,在这个虚拟世界中,通过音效让游戏声音拥有带入感,让玩家轻松的身临其境,融入到游戏世界中,其中环境音效功不可没。 环境音效主...

奇亿音乐
12分钟前
31
0
Joomla 4可访问性支持——人性化技术

Joomla 4是Joomla世界中期待已久的产品。此旗舰版本将获得更长的支持时间。这就是Joomla 4在Joomla CMS各个方面都表现出色的原因。Joomla 4的开发考虑了所有最新技术和可用性。 由于Joomla ...

六艺网络专注于Joomla
14分钟前
45
0
Android中的常见通信机制

Android中的常见通信机制 1.Handler同进程的线程间通信 Handler通过sendMessage()发送Message到MessageQueue队列,Looper通过loop()不断提取出Message,并将Message交给target通过displatch...

Coding缘
17分钟前
22
0
一个基本的面试问题:可以解释一下什么是闭包吗?

面对面试问题,我们总是如临大敌。 令人憎恶的面试问题 之前,我参加了一个面试,其中工程团队要求我解释闭包的含义。当然,这不是我第一次被问到这个术语,但老实说,我还是有些慌张。 众所...

Java进阶程序员xx
19分钟前
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部