my java note -------类的初始化和加载

java 的初始化和类加载

  1. java 对象初始化时,会先加载对应的类,随后加载其基类(如果存在基类);

  2. 先从基类执行static 初始化,在执行子类static 初始化;

  3. 此时,类加载完毕,开始对象的初始化。

  4. 对象的属性得到初值:

    1> 基本值类型 默认值

    2> 对象句柄为null

  5.先执行基类初始化{

    1>先:属性定义时的初始化

    2>后:执行构造器方法

   }在执行衍生类初始化。

测试代码:

package mytest;

public class TestLoad extends Parent{

    int k = prt("TestLoad.k initialized");
    TestLoad() {
        System.out.println("k = " + k);
        k = k+1;
        System.out.println("k = " + k);
        System.out.println("j = " + j);
      }
     static int x2 =  prt("static TestLoad.x2 initialized");
     static int prt(String s) {
        System.out.println(s);
        return 63;
      } 

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Beetle constructor");
        TestLoad b = new TestLoad();
    }

}

class Parent {
    int i =prt("Parent.i initialized");
    int j;
    Parent() {
        System.out.println("i = " + i + ", j = " + j);
        j = 39;
    }
    static int x1 =  prt("static Parent.x1 initialized");
    static int prt(String s) {
        System.out.println(s);
        return 47;
    }
} 

输出结果:

static Parent.x1 initialized
static TestLoad.x2 initialized
Beetle constructor
Parent.i initialized
i = 47, j = 0
TestLoad.k initialized
k = 63
k = 64
j = 39

显然从结果中可以看出执行顺序。

时间: 2024-11-03 21:54:30

my java note -------类的初始化和加载的相关文章

《Java编程思想》学习01:普通类的初始化加载顺序分析

<Java编程思想>学习01:普通类的初始化加载顺序分析 本文根据控制变量法,分析普通类(没有extends,implement)初始化的加载顺序: 参考<Java编程思想>第五章 源码 StaticClass1类 package com.tyj.study.thinkinjava; /* * *@Description: *@Author:TYJ *@Date: create in 2019/7/9 17:22 */ public class StaticClass1 { { S

Java继承类的初始化顺序

class Parent { // 静态变量 public static String p_StaticField = "父类--静态变量"; // 变量 public String p_Field = "父类--变量"; protected int i = 9; protected int j = 0; // 静态初始化块 static { System.out.println(p_StaticField); System.out.println("父类

picker VIew初始化和加载plist数据

实现PickerView的数据初始化 1 //确定pickerVIew轮子的个数 2 -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 3 { 4 return 2; 5 } 6 //确定pickerView的每个轮子的item数 7 -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)co

【Java】 关于类的初始化

在Java中,所有文件都是一个类,类的初始化无处不在.那么,Java在类初始化时到底做了什么呢?在此记录一个小练习,通过输出,我们可以比较清晰地看出Java在类的初始化时,工作顺序是怎样的. 1 public class Insect { 2 3 private int i = 9; 4 protected int j ; 5 public Insect() { 6 // TODO Auto-generated constructor stub 7 print("i =" + i +

JAVA类的生命周期,以及类的初始化时机

类的生命周期从类被加载.连接和初始化开始,到类被卸载结束. 只有当类处于生命周期时,java程序才能使用它,比如 调用类的静态属性和方法.或者创建类的实列 简要介绍 1:加载  类的加载时指把类的.class文件中的二进制读入到内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个java.long.Class对象用来封装类在方法区内的数据结构.并且向java程序提供了访问类在方法区内的数据结构接口. 类的加载器并不需要某个类"首次主动使用"时在加载它,java虚拟机规范允许类加

【Java高级】JVM内存区域模型和加载过程

JVM内存区域模型 1.方法区 也称"永久代" ."非堆",  它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存区域.默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小. 运行时常量池:是方法区的一部分,Class文件中除了有类的版本.字段.方法.接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中.

Java类的初始化

Java提供了两种不同的初始化类型,分别是类的初始化和对象的初始化.类成员都是静态的,默认会设置一个值.对象的初始化会在构造函数里面进行.但如果想要赋给静态变量非默认值,或者是初始化一类共有的对象属性(不论调用哪个构造函数),那么就需要一些特殊的方法.提供了静态初始化块和非静态初始化块来处理这两种情况. 静态初始化块 静态初始化块是通过static{}来定义的.一个简单的代码示例如下: public class CorderStatic { staticint idx; static{ Syst

《深入理解java虚拟机》:类的初始化

深入理解java虚拟机>:类的初始化 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段.其中验证.准备.解析3个部分统称为连接.类加载的过程包括了加载.验证.准备.解析.初始化五个阶段. 加载.验证.准备.初始化和卸载这5个阶段的顺序时确定的,类的加载过程必须按照这种顺序按部就班的开始,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定).另外注意这里的

深入理解Java对象的创建过程:类的初始化与实例化

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深入理解Java对象的创建过程:类的初始化与实例化 - Rico's Blogs - 博客频道 - CSDN.NET Rico's Blogs 潜心修炼,成为一个更好的人. 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅