`
panshaobinSB
  • 浏览: 203847 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一个例子理清java中的继承

    博客分类:
  • java
 
阅读更多
public class TestExtends {
	public static void main(String[] args) {
		Son son1 = new Son();
	}
}

class Parent {
	private static int a = 1;
	static{//静态代码块
		System.out.println("a = "+a);
	}
	
	private int b = 2;
	{//动态代码块
		System.out.println("b = "+b);
	}
	
	public Parent(){
		System.out.println("---------parent----------");
	}
}

class Son extends Parent{
	private static int c = 1;
	static{
		System.out.println("c = "+c);
	}
	
	private int d = 2;
	{
		System.out.println("d = "+d);
	}
	
	public Son(){
                //super();默认调用,当父类只有有参的构造器时就要显示调用有参构造器才行,如super(c);
		System.out.println("---------------son-------------");
	}
}

 

输出结果:

a = 1

c = 1

b = 2

---------parent----------

d = 2

---------------son-------------

 

对于java继承中的价载顺序其实一直不是很了解,最近看了<thinking in java>里面的解释,发现大体是理顺了,所以记录一下,方便以后查看:

1,加载的时候先是类加载:就是说一个类要new对象,是要先把类加载进jvm的,一旦他发现了extends关键字的话,就会先去加载父类的类文件,一层一层的父类加载完了之后,最后才是子类本身;

加载类文件的同时,类变量(static)先加载,所以上面的例子输出结果如下:(为了输出结果用到了静态跟动态代码块,其实就把这两块东西当做静态变量跟成员变量理解就可以了,他们的最大作用是起到

变量的初始化而已)

a = 1

c = 1

 

2,经过了类加载一步后,开始要来新建对象了,在子类的构造器中是会默认先调用父类的构造器的,所以父类先建对象,也就是先加载父类的成员变量,然后再执行父类的构造器里面的内容,得到结果如下:

b = 2

---------parent----------

 

3,父类的对象新建完成,轮到子类的了,子类开始初始化成员变量,然后执行本身的构造器里面的内容,得到结果如下:

d = 2

---------------son-------------

 

PS:对于<thinking in java>中有一句话,很是疑惑,中文版P94页里面写到“无法阻止自动初始化的进行,它将在构造器被调用之前发生。。。”,当初因为这个还以为是先加载成员变量,再执行构造器里面的super(),结果是super先执行了。。。是我理解有问题?

分享到:
评论

相关推荐

    javajava调试java调试java调试java调试

    1. **断点设置**:断点是在源代码中特定行上标记的一个点,当程序执行到该行时,会暂停运行,允许开发者检查当前的变量状态、调用栈等信息。在IDE中,只需点击行号即可设置或移除断点。 2. **单步执行**:在暂停后...

    Java2认证考试指南

    Java2认证考试指南 通过此认证指南,对于java初学者是一个很好的理清java结构,认清java2的一些需掌握的重点材料,指明了一条系统学习的道路,避免学习的盲目。 当然,最主要的还是“考试指南”的作用,如有志...

    用java实现的经典递归算法

    在递归过程中,选择一个元素作为当前排列的第一个元素,然后对剩余元素继续递归,直到达到递归出口。每次递归调用前,通过交换元素来改变排列顺序,确保生成所有可能的排列。 最后,我们有一个组合问题,它需要输出...

    java编写的游戏(源码、注释)

    本项目提供了一个塔防游戏的源代码,附带了详细的注释,这对于初学者来说是一份宝贵的资源,可以帮助他们学习如何在Java中构建一个完整的游戏。 首先,我们要了解Java作为游戏开发的语言基础。Java是一种跨平台的、...

    【Java】Java集合框架思维导图。

    xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...

    java植物大战僵尸游戏

    在标签中,我们可以看到“java小游戏”、“java植物大战僵尸游戏”、“java小项目”等关键词,这些表明这款游戏是一个小型的Java项目,适合初学者用来学习基础的Java编程技能,如类的设计、对象的创建、继承、多态...

    Java知识结构Xmind思维导图

    Java知识结构 Xmind思维导图 帮助各位理清Java知识点。

    JAVA 实现《捕鱼达人》游戏-全部源码

    ——判断一个点是否在矩形范围之内即可。同理:打飞机的游戏也可以依照这种算法实现。 3、由于每条鱼的行为不一样,所以要继承线程类,实现并发——屏幕上有多条鱼各自移动。鱼池继承JPannel,并引入自己的新的属性...

    java-OA源码

    【Java-OA源码】是一个基于Java编程语言的开源办公自动化系统源代码,它为学习和开发提供了便利。这个源码使用了经典的SSH(Struts1、Hibernate、Spring)技术栈,这是一套在Java Web开发中广泛使用的框架集合。 **...

    专题二理清记叙文的线索及其作用.pdf

    记叙文的线索是文章结构的核心,它如同一条丝线,将文章的各个部分紧密相连,形成一个完整的故事框架。通过对线索的把握,读者可以更好地理解文章的内容,梳理文章的层次,以及领悟文章的主题思想。 **一、线索的...

    Java2认证考试指南2

    Java2认证考试指南 通过此认证指南,对于java初学者是一个很好的理清java结构,认清java2的一些需掌握的重点材料,指明了一条系统学习的道路,避免学习的盲目。 当然,最主要的还是“考试指南”的作用,如有志...

    Java2认证考试指南3

    Java2认证考试指南 通过此认证指南,对于java初学者是一个很好的理清java结构,认清java2的一些需掌握的重点材料,指明了一条系统学习的道路,避免学习的盲目。 当然,最主要的还是“考试指南”的作用,如有志...

    自己整理的JAVA学习脑图,帮助理清思路

    从JAVA的jdk开始,到JAVA的Servlet部分的学习脑图,还包含了一部分前端的知识,脑图软件用的是xmind

    2017JAVA算法编程题全集(中级)

    首先,我们来探讨一个经典且基础的数学问题——菲波拉契数列。该数列的每一项都是前两项之和,通常用来模拟自然界的某些规律,例如兔子繁殖问题。在Java中,我们可以通过递归或循环来实现这个序列的计算。循环方法...

    java tools

    总的来说,Java代码混淆工具是Java开发中的一个重要组成部分,它为代码提供了一层额外的保护,尤其是在商业应用中。了解并合理使用这些工具,可以帮助开发者在保障代码安全的同时,降低因代码泄露带来的潜在风险。

    一文理清 JavaScript 中对象的创建模式与继承模式

    文章目录一文理清 JavaScript 中对象的创建模式与继承模式一、前言 :1. 写作目的2. 需要具备的知识点3. 阅前声明二、JavaScript 中对象的创建模式1. ( 单例模式 ) – 日月星辰我独尊a. 什么是单例 ?b. 具体的实现...

    Java语言,小白入门超值干货免费学习资料,免费百元包!

    对于初学者,尤其是“小白”来说,掌握Java语言能够开启一个充满机遇的IT职业生涯。本资源包为Java入门者提供了丰富的学习材料,帮助你们从零开始,逐步成为Java开发的高手。 首先,学习Java的第一步是理解其基本...

    java小项目

    本知识点将详细介绍使用Java Swing技术与SQLServer2005数据库实现一个进销存管理系统的过程。 首先,项目可行性分析是开发前的重要步骤。可行性分析包括对项目存在的风险、所需投资及潜在效益的评估。在这个例子中...

    用Java写的的猜数游戏,零基础学习Java必看,教你理清业务逻辑

    Java制作的猜数游戏

Global site tag (gtag.js) - Google Analytics