输出下面程序运行结果

public class Test {

    static {
        System.out.println("blockAAA");
    }

    public static Test t1 = new Test();
    public static Test t2 = new Test();

    {
        System.out.println("blockBBB");
    }

    static {
        System.out.println("blockCCC");
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Test t3 = new Test();

    }

}

运行结果:

blockAAA
blockBBB
blockBBB
blockCCC
blockBBB

分析:

java代码执行顺序是:静态块、静态变量(按出现顺序)——>成员变量、构造代码块——>构造方法——>静态方法,本例中先初始化静态代码块( System.out.println("blockAAA"); ),接着初始化静态变量(  public static Test t1 = new Test(); public static Test t2 = new Test(); ),此处两个静态变量分别初始化类对象,此时只需执行构造代码块即可(其他静态代码块和静态变量均已由 Test t3 = new Test(); 初始化了),再接着还是静态代码块( System.out.println("blockCCC"); );最后是构造代码块( System.out.println("blockBBB"); )。

时间: 2024-07-31 12:10:43

输出下面程序运行结果的相关文章

【转】使程序在Linux下后台运行 (关掉终端继续让程序运行的方法)

一.为什么要使程序在后台执行 我们计算的程序都是周期很长的,通常要几个小时甚至一个星期.我们用的环境是用putty远程连接到日本Linux服务器.所以使程序在后台跑有以下三个好处: 1:我们这边是否关机不影响日本那边的程序运行.(不会像以前那样,我们这网络一断开,或一关机,程序就断掉或找不到数据,跑了几天的程序只能重头再来,很是烦恼) 2:不影响计算效率 2:让程序在后台跑后,不会占据终端,我们可以用终端做别的事情. 二.怎么样使程序在后台执行 方法有很多,这里主要列举两种.假如我们有程序pso

逆向第三课(深入.NET程序运行原理)

注:本文适用读者范围,对Windows下的PE文件有一定认识的朋友 一. 名词解释 a)        CLR: 公共语言运行时(Common LanguageRuntime),CLR时.NET框架的核心内容之一,可以把它看为一套标准资源,可以被任何.NET程序使用.它包括:面向对象的编程模型.安全模型.类型系统(CTS).所有.NET基类.程序执行以及代码管理等. b)        JIT: 即时编译(Just In-Time compile),这是.NET运行可执行程序的基本方式,也就是在

在程序运行过程中,对象所占的空间是不能随时释放的

使用类名定义的对象(请查看:C++类的声明和对象的定义)都是静态的,在程序运行过程中,对象所占的空间是不能随时释放的.但有时人们希望在需要用到对象时才建立对象,在不需要用该对象时就撤销它,释放它所占的内存空间以供别的数据使用.这样可提高内存空间的利用率. 在C++中,可以使用new运算符动态地分配内存,用delete运算符释放这些内存空间(请查看:C++动态分配内存(new)和撤销内存(delete)).这也适用于对象,可以用new运算符动态建立对象,用delete运算符撤销对象. 如果已经定义

MapReduce 编程 系列四 MapReduce例子程序运行

MapReduce程序编译是可以在普通的Java环境下进行,现在来到真实的环境上运行. 首先,将日志文件放到HDFS目录下 $ hdfs dfs -put *.csv /user/chenshu/share/logs/ 14/09/27 17:03:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where app

杂谈——Android从启动到程序运行发生的事情

转载请注明出处 博客地址:http://blog.csdn.net/JonsTank2013/article/details/51118563 作者:李中权 前言 好久没有写博客了,瞬间感觉好多学了的东西不进行一个自我的总结与消化总归变不成自己的.通过博客可能还可以找到一些当初在学习的时候没有想到的问题.想了半天,从大二上学期自学Android以来还没有对Android从启动到程序运行期间进行一个完整的归纳,刚好最近又学到了一些新东西,那就以这篇博客为媒介,总结一下从Android启动到程序运行

Windows程序运行原理

Windows程序运行原理 1.应用程序,操作系统,硬件之间的关系 这里涉及到消息及消息队列, 操作系统是通过消息机制(Message)来将感知到的事件传递给应用程序的. 操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序. 操作系统对事件做出反应的过程就叫做消息响应 typedef struct tagMSG { // msg HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt

程序运行相关结构

进程在运行时的数据结构 a.out及其传说 gcc编译后的程序为什么叫a.out? 原因:linux是在UNIX基础上开发来的,UNIX上最开始可执行程序都是汇编得来(assembleroutput)汇编程序输出.正是这个英文的缩写,所以叫a.out并且沿用至今. 可执行文件的内容 Linux下的可执行文件大体分为5个段,BSS段,文本段,数据段,堆,栈. 使用nm命令可以查看可执行文件的具体段的划分. 3.系统栈和用户栈 Linux中共有四种堆栈(堆栈其实就是指栈)一种是内核栈,一种是位于固定

Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检测程序运行和函数调用次数计数

总结一下最近做的东西中遇到的问题 1. Java 中的 int 与 Integer 用于 List<Integer>  时 两者之间的关系都是很清楚的,int 是基本数据类型,存储的是值,而 Integer 是引用数据类型,存储的是指向数值的地址. Integer 是在类层面上对 int 的封装.然后 Java 提供了自动装包拆包机制,使得两者之间可以转换.这里主要是测试了下它们用于 List 时候的疑惑. /* * To change this template, choose Tools

linux下实现在程序运行时的函数替换(热补丁)【转】

转自:http://www.cnblogs.com/leo0000/p/5632642.html 声明:以下的代码成果,是参考了网上的injso技术,在本文的最后会给出地址,同时非常感谢injso技术原作者的分享. 但是injso文章中的代码存在一些问题,所以后面出现的代码是经过作者修改和检测的.也正因为这些错误,加深了我的学习深度. 最近因为在学习一些调试的技术,但是很少有提到如何在函数运行时实现函数替换的. 为什么会想到这一点?因为在学习调试时,难免会看到一些内核方面的调试技术,内核中的调试