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先执行了。。。是我理解有问题?
相关推荐
1. **断点设置**:断点是在源代码中特定行上标记的一个点,当程序执行到该行时,会暂停运行,允许开发者检查当前的变量状态、调用栈等信息。在IDE中,只需点击行号即可设置或移除断点。 2. **单步执行**:在暂停后...
Java2认证考试指南 通过此认证指南,对于java初学者是一个很好的理清java结构,认清java2的一些需掌握的重点材料,指明了一条系统学习的道路,避免学习的盲目。 当然,最主要的还是“考试指南”的作用,如有志...
在递归过程中,选择一个元素作为当前排列的第一个元素,然后对剩余元素继续递归,直到达到递归出口。每次递归调用前,通过交换元素来改变排列顺序,确保生成所有可能的排列。 最后,我们有一个组合问题,它需要输出...
本项目提供了一个塔防游戏的源代码,附带了详细的注释,这对于初学者来说是一份宝贵的资源,可以帮助他们学习如何在Java中构建一个完整的游戏。 首先,我们要了解Java作为游戏开发的语言基础。Java是一种跨平台的、...
xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...
在标签中,我们可以看到“java小游戏”、“java植物大战僵尸游戏”、“java小项目”等关键词,这些表明这款游戏是一个小型的Java项目,适合初学者用来学习基础的Java编程技能,如类的设计、对象的创建、继承、多态...
Java知识结构 Xmind思维导图 帮助各位理清Java知识点。
——判断一个点是否在矩形范围之内即可。同理:打飞机的游戏也可以依照这种算法实现。 3、由于每条鱼的行为不一样,所以要继承线程类,实现并发——屏幕上有多条鱼各自移动。鱼池继承JPannel,并引入自己的新的属性...
【Java-OA源码】是一个基于Java编程语言的开源办公自动化系统源代码,它为学习和开发提供了便利。这个源码使用了经典的SSH(Struts1、Hibernate、Spring)技术栈,这是一套在Java Web开发中广泛使用的框架集合。 **...
记叙文的线索是文章结构的核心,它如同一条丝线,将文章的各个部分紧密相连,形成一个完整的故事框架。通过对线索的把握,读者可以更好地理解文章的内容,梳理文章的层次,以及领悟文章的主题思想。 **一、线索的...
Java2认证考试指南 通过此认证指南,对于java初学者是一个很好的理清java结构,认清java2的一些需掌握的重点材料,指明了一条系统学习的道路,避免学习的盲目。 当然,最主要的还是“考试指南”的作用,如有志...
Java2认证考试指南 通过此认证指南,对于java初学者是一个很好的理清java结构,认清java2的一些需掌握的重点材料,指明了一条系统学习的道路,避免学习的盲目。 当然,最主要的还是“考试指南”的作用,如有志...
从JAVA的jdk开始,到JAVA的Servlet部分的学习脑图,还包含了一部分前端的知识,脑图软件用的是xmind
首先,我们来探讨一个经典且基础的数学问题——菲波拉契数列。该数列的每一项都是前两项之和,通常用来模拟自然界的某些规律,例如兔子繁殖问题。在Java中,我们可以通过递归或循环来实现这个序列的计算。循环方法...
总的来说,Java代码混淆工具是Java开发中的一个重要组成部分,它为代码提供了一层额外的保护,尤其是在商业应用中。了解并合理使用这些工具,可以帮助开发者在保障代码安全的同时,降低因代码泄露带来的潜在风险。
文章目录一文理清 JavaScript 中对象的创建模式与继承模式一、前言 :1. 写作目的2. 需要具备的知识点3. 阅前声明二、JavaScript 中对象的创建模式1. ( 单例模式 ) – 日月星辰我独尊a. 什么是单例 ?b. 具体的实现...
对于初学者,尤其是“小白”来说,掌握Java语言能够开启一个充满机遇的IT职业生涯。本资源包为Java入门者提供了丰富的学习材料,帮助你们从零开始,逐步成为Java开发的高手。 首先,学习Java的第一步是理解其基本...
本知识点将详细介绍使用Java Swing技术与SQLServer2005数据库实现一个进销存管理系统的过程。 首先,项目可行性分析是开发前的重要步骤。可行性分析包括对项目存在的风险、所需投资及潜在效益的评估。在这个例子中...
Java制作的猜数游戏