文档章节

java 继承类加载顺序

仗剑天涯Z
 仗剑天涯Z
发布于 2015/11/25 15:57
字数 441
阅读 29
收藏 0

                                                        

加载顺序为

父类静态定义初始化
子类静态定义初始化

父类定义初始化
父类构造方法
子类定义初始化
子类构造方法
package xu.jin;
 
class Insect{
    private int i=print("hello i");
    Insect(){System.out.println("Insect"+i);}
    {
        System.out.println("1");
        System.out.println("2");
    }
    static{
        System.out.println("3");
        System.out.println("4");
    }
    static int print(String str){
        System.out.println(str);
        return 2;
    }
    static int x1=print("static Insect");
}
 
 class hello extends Insect{
  private int j=print(" hello j");
  static int x2=print("static hello");
  hello(){
      System.out.println("hello"+j);
      }
    {
        System.out.println("11");
        System.out.println("22");
    }
static{
        System.out.println("33");
        System.out.println("44");
    }
 
    public static void main(String[] args) {
            // TODO Auto-generated method stub
            hello sCat=new hello();
            //Insect ins=new Insect();
     System.out.println("hello world");
    }
}

输出为:

3
4
static Insect
static hello
33
44
hello i
1
2
Insect2
 hello j
11
22
hello2
hello world

首先加载类,再初始化。想想也知道肯定先加载基类,再子类,初始化也是,子类是在基类基础上进行添加,肯定先要初始化基类再子类。 先初始化static的变量,在执行main()方法之前就需要进行加载。再执行main方法,如果new一个对象,则先对这个对象类的基本成员变量进行初始化(非方法),包括构造代码块,这两种是按照编写顺序按序执行的,再调用构造函数。 关于继承的初始化机制,首先执行含有main方法的类,观察到hello类含有基类Insect,即先加载Insect类的static变量,再加载hello类的static变量。加载完static变量之后,调用main()方法,new hello则先初始化基类的基本变量和构造代码块,再调用基类的构造方法。然后再初始化子类hello的基本变量和构造代码块,再执行子类的构造函数。


© 著作权归作者所有

仗剑天涯Z
粉丝 1
博文 14
码字总数 6260
作品 0
昌平
程序员
私信 提问
浅谈java classloader

本文由作者张远道授权网易云社区发布。 类加载器三杰 jvm有三类classloader,分别是bootstrap classloader,extended classloader以及system classloader。 bootstrap classloader是系统在启动...

网易云
2018/12/14
0
0
ClassNotFoundException: org.hibernate.hql.ast.HqlToken

项目从TOMCAT7移到WEBLOGIC12C后,出现异常org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken; 网上查了一下,是因为hibernate3.0是基于antlr的HQL/S......

jizhan
2018/07/03
0
0
深入理解Java类的初始化顺序

Java类加载机制中最重要的就是程序初始化过程,其中包含了静态资源,非静态资源,父类子类,构造方法之间的执行顺序。这类知识经常会出现在面试题中,如果没有搞清楚其原理,在复杂的开源设计...

郑加威
06/03
70
0
Java代码编译和执行的整个过程

Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码编译...

xiejunbo
2016/02/11
1K
1
Java和Android ClassLoder对比以及Class加载过程

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

JasmineBen
2018/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

家庭作业——苗钰婷

2 编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound, Sally shouted, "By the Great Pumpkin, what was that! #include<stdio.h>int main(){......

OSC_Okruuv
19分钟前
4
0
经典系统设计面试题解析:如何设计TinyURL(一)

原文链接: https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
20分钟前
2
0
2.面向对象设计原则(7条)

开闭原则 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 实现方法 可以通过“抽象约束、封装变化”来实...

Eappo_Geng
22分钟前
4
0
8086汇编基础 debug P命令 一步完成loop循环

    IDE : Masm for Windows 集成实验环境 2015     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   ......

志成就
26分钟前
3
0
使用nodeJS实现前端项目自动化之项目构建和文件合并

本文转载于:专业的前端网站➜使用nodeJS实现前端项目自动化之项目构建和文件合并 前面的话   一般地,我们使用构建工具来完成项目的自动化操作。本文主要介绍如何使用nodeJS来实现简单的项...

前端老手
40分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部