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. pytest文档4-测试用例setup和teardown

    前言 学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次. 当然还有更高级一点的setupClass和teardownClass,需 ...

  2. UIBezierPath的使用(持续更新)

    UIBezierPath的使用 1. 使用UIBezierPath绘制多边形 // 获取path UIBezierPath *aPath = [UIBezierPath bezierPath]; // ...

  3. iOS:转载sqlite3

     SQLITE3 使用总结 2012-08-21 13:48:28 分类: SQLite/嵌入式数据库 SQLITE3 使用总结 2009-09-16 07:36 2624人阅读 评论(10) 收藏  ...

  4. go语言基础之不同作用域同名变量

    1.不同作用域同名变量 示例: package main import "fmt" var a byte //全局变量 func main() { var a int //局部变量 ...

  5. js 小数点 取整数

    取整数 Math.round() 小数点 (10/3).toFixed(2)

  6. 高性能WEB开发:重排与重绘

    DOM编程可能最耗时的地方,重排和重绘. 1.什么是重排和重绘 浏览器下载完页面中的所有组件——HTML标记.JavaScript.CSS.图片之后会解析生成两个内部数据结构——DOM树和渲染树. D ...

  7. SQLServer2008备份时发生无法打开备份设备

    如下图所示,在执行SQL一个简单的备份命令时发生下面的情况 问题分析: 1:可能是文件夹目录权限问题 2:可能是登录SQLServer服务器用户策略问题 于是就查看了E:\dw_backup的文件夹权 ...

  8. 六个前端开发工程师必备的Web设计模式/模块资源

    Yahoo的设计模式库 Yahoo的设计模式库包含了很多可以帮助开发设计人员解决遇到的问题的资源,包括开发中常常需要处理的导航,互动效果及其布局网格等大家常用的组件和模块 响应式设计模式库 这个响应式 ...

  9. python获取系统时间代码解析

    import time     print time.time()    输出的结果是:    1279578704.6725271 但是这样是一连串的数字不是我们想要的结果,我们可以利用time模块 ...

  10. UNIX网络编程读书笔记:基本UDP套接口编程

    概述 使用UDP编写的一些流行的应用程序有:DNS(域名系统).NFS(网络文件系统)和SNMP(简单网络管理协议). 如下图所示,给出了典型的UDP客户/服务器程序的函数调用: 客户不与服务器建立连 ...