1、java虚拟机执行程序,首先须要装载类,安装现装载父类,初始化父类的静态代码块和静态成员变量

再load子类。

初始化子类静态代码块和成员变量

2、load完成父类与子类后,从main函数入口运行程序。先输出,接着new实例化Beetle类,则先实例化父类Insect,实例化父类时。先初始化非静态成员变量和非静态代码块,接着运行父类构造方法

再实例化子类,实例化子类时,先初始化非静态成员变量和非静态代码块,接着运行子类构造方法。

package it.xiangnan.test;



public class Beetle extends Insect {

    private int k = printInit("Beetle.k initialized");



    public Beetle() {

        System.out.println("k=" + k);

        System.out.println("j=" + j);

    }



    private static int x2 = printInit("static Beetle.x2 initialized");



    public static void main(String[] args) {

        System.out.println("Beetle constructor");

        Beetle b = new Beetle();

    }



}



class Insect {

    private int i = 9;

    protected int j;



    Insect() {

        System.out.println("i=" + i + ",j=" + j);

        j = 39;

    }

    

    private static int x1 = printInit("static Insect.x1 intialized");



    static int printInit(String s) {

        System.out.println(s);

        return 47;

    }

}





函数从main处运行

Beetle有父类Insect。先初始化父类的静态成员变量x1,再初始化Beelte类静态成员变量x2

转而从main处运行。输出Beetle constructor,因为紧接着实例化Bettle类。该类有父类Insect,则先运行父类构造函数。在运行子类构造函数

static Insect.x1 initialized     1、父类Insect静态成员变量初始化值为47

static Beetle.x2 initialized     2、Beetle类的静态成员变量x2初始化值为47

Beetle constructor               3、输出

i=9,j=0                          4、运行Beetle的父类Insect的默认构造函数

Beetle.k initialized             5、运行Beetle类的默认构造函数,输出k值之前,调用printInit方法输出该句话。并初始化k值为47

k=47                             6、分别输出k、j的值

j=39




java中成员变量、代码块、构造函数运行顺序的更多相关文章

  1. java中的静态代码块等执行顺序

    http://www.cnblogs.com/naruto469/p/3608459.html public class Print { 2 3 public Print(String s){ 4 S ...

  2. 2.java中c#中statc 静态调用不同之处、c#的静态构造函数和java中的构造代码块、静态代码块

    1.java和c#静态成员调用的不同之处 static 表示静态的,也就是共享资源,它是在类加载的时候就创建了 java中   可以通过实例来调用,也可以通过类名.成员名来调用,但是一般最好使用类名. ...

  3. java中成员变量,局部变量,静态变量的辨析

    转自百度:https://baijiahao.baidu.com/s?id=1625360816541592483&wfr=spider&for=pc 1.java中成员变量,局部变量 ...

  4. 谈谈java中成员变量与成员方法继承的问题

    谈谈java中成员变量与成员方法继承的问题 关于成员变量和成员方法的的继承问题,我也可以做一个小测试,来看看结果. 首先我们先创建一个父类:

  5. java中静态的代码块,静态变量,静态方法

    简单了解一下java虚拟机--jvm几个内存区域: 方法区:在java的虚拟机中有一块专门用来存放已经加载的类信息.常量.静态变量以及方法代码的内存区域, 常量池:常量池是方法区的一部分,主要用来存放 ...

  6. 5.1JAVA基础复习——JAVA中的静态代码块、构造代码块、构造函数、局部代码块区别

    构造代码块: 在类中定义可以给所有对象进行初始化.局部代码块: 在方法中定义属性的生命周期.静态代码块: 在类中定义用于给类调用时属性的初始化 构造函数与构造代码块的区别: 构造函数是给对应的对象进行 ...

  7. Java中的构造代码块

    代码块 ----a静态代码块 ----b构造代码块 ----c普通代码块 执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. a.静态代码块: 静态代码块 ...

  8. java中的静态代码块、构造代码块、构造方法

    运行下面这段代码,观察其结果: package com.test; public class HelloB extends HelloA { public HelloB() { } { System. ...

  9. Java中四大代码块的运行顺序(附code)

    验证证的方法是写code.例如以下: public class test { static class A { public static String name = "hello" ...

随机推荐

  1. node.js&pm2搭建node生产环境

    node.js下载地址https://nodejs.org/en/download/stable/ 下载截图 建议采用稳定编译过的版本,source code稍麻烦,编译过的直接可用,安装超级简单,红 ...

  2. Java中23种经典设计模式详解

    Java中23种设计模式目录1. 设计模式 31.1 创建型模式 41.1.1 工厂方法 41.1.2 抽象工厂 61.1.3 建造者模式 101.1.4 单态模式 131.1.5 原型模式 151. ...

  3. combogrid获取多个字段的方法

    var g = $('#cc').combogrid('grid'); // 获取表格控件对象var r = g.datagrid('getSelected'); //获取表格当前选中行alert(r ...

  4. nrf51822, How to use a vendor specific UUID?

    Using a vendor specific UUID is basically a two-step process: 1. Add your custom base UUID to the st ...

  5. Tui-x 基础使用

    本章以Tui-x3.x仓库里的HelloTuiCpp项目来做具体解说.[ 由于HelloTuiCpp里面演示的全部控件,本文篇幅有限,不能一一说明,所以仅仅能列举两个控件,后面的文章会有针对性地解说其 ...

  6. (转)找回vss超级管理员密码

    原文:http://www.cnblogs.com/446557021/archive/2011/01/05/1926213.html 如果忘记了VSS管理员密码,打开vss数据库所在的文件夹,打开d ...

  7. 在线分享Oracle尖峰时刻--2014年中秋节尖峰在线福利!

    **********************************************************            2014年中秋节尖峰在线福利!*************** ...

  8. 后缀树(Suffix Trie)子串匹配结构

    Suffix Trie 又称后缀Trie或后缀树.它与Trie树的最大不同在于,后缀Trie的字符串集合是由指定字符串的后缀子串构成的.比如.完整字符串"minimize"的后缀子 ...

  9. win10 当前操作环境不支持支付宝控件 完美解决办法

    第一步,修改系统配置 在运行中输入“gpedit.msc”打开本地组策略编辑器: 打运行窗口的方法是:按win键+R (按下win键再按R键之后 同时松开)  win键 即windows 的微标键 如 ...

  10. [Compose] 15. Applicative Functors for multiple arguments

    Working our way backwards from solution to problem, we define an applicative functor, then use it to ...