`

对象初始化全过程

    博客分类:
  • java
阅读更多
/*  
 *初始化全过程:  
 *  
 *1,    第一次创建MyClass类的对象,或者第一次访问MyClass的static方法或字段时,Java解释器会搜寻classpath,找到MyClass.class。  
 *2,    装载MyClass.class后,会对所有的static数据进行初始化。这样第一个装载Class对象的时候,会先进行static成员的初始化。  
 *3,    使用new MyClass()创建新对象的时候,MyClass对象的构建进程会先在堆里为对象分配足够的内存。 *  
 *4,    清零这块新内存,把MyClass对象的primitive类型的成员赋上缺省值。  
 *5,    执行定义成员数据时所作的初始化。   
 *6,    执行构造函数。  
 */  
import static net.mindview.util.Print.*;   
  
public class Beetle extends Insect   
{   
    private int k = printInit("Beetle.k initialized");   
  
    public Beetle()   
    {   
        print("k = " + k);   
        print("j = " + j);   
    }   
    private static int x2 = printInit("static Beetle.x2 initialized");   
  
    public static void main(String[] args)   
    {   
        print("Beetle constructor");   
        Beetle b = new Beetle();   
    }   
}   
  
class Insect   
{   
    private int i = 9;   
    protected int j;   
  
    Insect()   
    {   
        print("i = " + i + ", j = " + j);   
        j = 39;   
    }   
  
    private static int x1 = printInit("static Insect.x1 initialized");   
  
    static int printInit(String s)   
    {   
        print(s);   
        return 47;   
    }   
}   
  
  
/* Output:  
static Insect.x1 initialized  
static Beetle.x2 initialized  
Beetle constructor  
i = 9, j = 0  
Beetle.k initialized  
k = 47  
j = 39  
*///:~   
  
/****************************************************/  
  
// 变量初始化先后顺序的示例   
import static net.mindview.util.Print.*;   
  
//当创建Window的实例对象时会有消息提示   
class Window   
{   
    Window(int marker)   
    {   
        print("Window(" + marker + ")");   
    }   
}   
  
class House   
{   
    Window w1 = new Window(1); // 构造函数前的变量   
  
    House()   
    {   
        //构造函数里面的变量   
        print("House()");   
        w3 = new Window(33); // 重新赋值w3   
    }   
  
    Window w2 = new Window(2); // 构造函数后的变量   
  
    void f()   
    {   
        print("f()");   
    }   
  
    Window w3 = new Window(3); // 结束类体时的对象   
}   
  
public class OrderOfInitialization   
{   
    public static void main(String[] args)   
    {   
        House h = new House();   
        h.f();    
    }   
}    
/*  
* 输出结果: Window(1) Window(2) Window(3) House() Window(33) f()  
*  
* 从结果看出,虽然域变量w2,w3排在构造函数后面,但它的输出却在构造函数前面  
*/  
  
/****************************************************/  
  
// 数组的初始化   
import java.util.*;   
  
public class ArrayInit   
{   
    public static void main(String[] args)   
    {   
        //直接赋值方式,局限在于数组在大小编译确定   
        Integer[] a = {    
                new Integer(1),    
                new Integer(2),    
                3, // 自动包装   
                };   
        //new方式,适于参数数量未知的场合,或者参数类型未知的场合   
        Integer[] b = new Integer[] {    
                new Integer(1),    
                new Integer(2),    
                3, // 自动包装   
                };   
        System.out.println(Arrays.toString(a));   
        System.out.println(Arrays.toString(b));   
    }   
}   
/* 输出结果:  
 [1, 2, 3]  
 [1, 2, 3]  
 *///:~  
分享到:
评论

相关推荐

    解析Java类和对象的初始化过程

    本文主要对类和对象初始化全过程进行分析,通过一个实际问题引入,将源代码转换成JVM字节码后,对JVM执行过程的关键点进行全面解析,并在文中穿插入了相关JVM规范和JVM的部分内部理论知识,以理论与实际结合的方式...

    关于JVM的总结

    加载:通过类的全限定名,将类加载如方法区,在内存中生成一个java.lang.Class对象, 作为方法区这个类的各种数据访问入口. 验证:确保Class文件的字节流包含的信息符合当前虚拟机的要求. 准备:正式为类变量分配内存,并...

    基于Java面向对象程序设计课程报告.doc.doc

    游戏主要实现了游戏场景的构造,坦克及子弹类的初始化,敌我坦克对战,游戏存盘及 读档等功能。关键词: Java; 面向对象; 敌我坦克对战; 引言坦克大战是一个经典的单机对战游戏,其在青少年中非常流行,目前游戏...

    JVM内一个对象的生死存亡

    当虚拟机接收到new 字节码指令时,如果此时类还未被初始化,则虚拟机会先进行类的初始化过程。 1. 虚拟机会通过 Tested.class 文件内的全限定名来获取该类的字节码二进制流。全限定名位于class文件数据存储结构内的...

    五子棋andriod版

    3,所有的申请空间在初始化的过程中一次分配完成,全用数组形式的数据,运算过程中不动态申请对象。 4,自己构造大部分的基本数据结构,list stack等等,不做边界判断(省去if else判断),一旦边界异常,正好可以...

    Linux2.6内核标准教程(共计8-- 第1个)

    3.2 内核页表的初始化过程 65 3.2.1 启用分页机制 65 3.2.2 构建内核页表 68 3.3 物理内存的描述方法 76 3.3.1 内存节点 77 3.3.2 内存区域 81 3.3.3 物理页框 85 3.4 物理内存的初始化过程 86 ...

    Linux2.6内核标准教程(共计8--第6个)

    3.2 内核页表的初始化过程 65 3.2.1 启用分页机制 65 3.2.2 构建内核页表 68 3.3 物理内存的描述方法 76 3.3.1 内存节点 77 3.3.2 内存区域 81 3.3.3 物理页框 85 3.4 物理内存的初始化过程 86 ...

    Linux2.6内核标准教程(共计8--第3个)

    3.2 内核页表的初始化过程 65 3.2.1 启用分页机制 65 3.2.2 构建内核页表 68 3.3 物理内存的描述方法 76 3.3.1 内存节点 77 3.3.2 内存区域 81 3.3.3 物理页框 85 3.4 物理内存的初始化过程 86 ...

    Linux2.6内核标准教程(共计8--第4个)

    3.2 内核页表的初始化过程 65 3.2.1 启用分页机制 65 3.2.2 构建内核页表 68 3.3 物理内存的描述方法 76 3.3.1 内存节点 77 3.3.2 内存区域 81 3.3.3 物理页框 85 3.4 物理内存的初始化过程 86 ...

    Linux2.6内核标准教程(共计8--第2个)

    3.2 内核页表的初始化过程 65 3.2.1 启用分页机制 65 3.2.2 构建内核页表 68 3.3 物理内存的描述方法 76 3.3.1 内存节点 77 3.3.2 内存区域 81 3.3.3 物理页框 85 3.4 物理内存的初始化过程 86 ...

    Linux2.6内核标准教程(共计8--第8个)

    3.2 内核页表的初始化过程 65 3.2.1 启用分页机制 65 3.2.2 构建内核页表 68 3.3 物理内存的描述方法 76 3.3.1 内存节点 77 3.3.2 内存区域 81 3.3.3 物理页框 85 3.4 物理内存的初始化过程 86 ...

    Linux2.6内核标准教程(共计8--第7个)

    3.2 内核页表的初始化过程 65 3.2.1 启用分页机制 65 3.2.2 构建内核页表 68 3.3 物理内存的描述方法 76 3.3.1 内存节点 77 3.3.2 内存区域 81 3.3.3 物理页框 85 3.4 物理内存的初始化过程 86 ...

    Linux2.6内核标准教程(共计8--第5个)

    3.2 内核页表的初始化过程 65 3.2.1 启用分页机制 65 3.2.2 构建内核页表 68 3.3 物理内存的描述方法 76 3.3.1 内存节点 77 3.3.2 内存区域 81 3.3.3 物理页框 85 3.4 物理内存的初始化过程 86 ...

    Vue.js源码全方位深入解析最新下载地址

    第1章 准备工作 介绍了 Flow、Vue.js 的源码目录设计、Vue.js 的源码构建方式,以及从入口开始分析了 Vue.js 的初始化过程。 第2章 数据驱动 详细讲解了模板数据到 DOM 渲染的过程,从 new Vue 开始,分析了 mount、...

    C++智能指针的原理和实现.pdf

    2.1 auto_ptr auto_ptr是通过由 new 表达式获得的对象,并在auto_ptr⾃⾝被销毁时删除该对象的智能指针,它可⽤于为动态分配的对象提供异常安 全、传递动态分配对象的所有权给函数和从函数返回动态分配的对象,是⼀...

    软件工程文档模板大全(包含14份文档)

    4.1安装和初始化 3 4.2输入 3 4.3输出 3 4.4出错和恢复 3 4.5求助查询 3 5.运行说明 3 5.1运行表 3 5.2运行步骤 3 6.非常规过程 3 7.操作命令一览表 3 8.程序文件(或命令文件)和数据文件一览表 3 9.用户操作举例 3...

    sql explorer 2000

    该数据库管理工具是由西安中望软件公司... 4、对数据表已有记录生成脚本,以便于数据库初始化和系统移植操作 5、输出数据库报告,便于数据库的维护管理 6、全库检索和替换功能 7、其它强大的数据库维护管理功能

    Spring面试题

    在 XML 文件中定义的 Bean 是被消极加载的,这意味在需要 bean 之前,bean 本身不会被初始化。要从 BeanFactory 检索 bean,只需调用 getBean() 方法,传入将要检索的 bean 的名称即可,如清单 2 所示。 清单 2. ...

    涨姿势:SpringBoot2.x启动全过程源码分析

    上面分析了SpringApplication实例对象构造方法初始化过程,下面继续来看下这个SpringApplication 对象的run方法的源码和运行流程。 所以,我们可以按以下几步来分解run方法的启动过程。1、创建并启动计时监控类 来看...

Global site tag (gtag.js) - Google Analytics