最近在阅读孙卫琴的java面向对象一书中,看到对java中类的初始化和加载中的论述比较系统,故笔记之

1)类的初始化,JAVA在初始化一个类时,以下步骤

A 假如类存在直接的父类,并且这个父类还没有初始化,则先初始化直接的父类

B  假如类存在初始化的语句,那么直接执行这些初始化语句

比如

package init;

class Base{

static int a=1;

static{

System.out.println("init Base");

}

}

class Sub extends Base{

static int b=1;

static{

System.out.println("init Sub");

}

}

public class InitTester{

static{System.out.println("init InitTester");}

/*

public static void main(String args[]){

System.out.println("b="+Sub.b);  //执行这行代码时,先依次初始化Base类和Sub类

}

*/

输出:

init InitTester

init Base

init Sub

b=1

假如换成下面这样

public static void main(String args[]){

Base base;  //不会初始化Base类

System.out.println("After defining base");

base=new Base();  //执行这行代码时,初始化Base类

System.out.println("After creating an object of Base");

System.out.println("a="+base.a);

System.out.println("b="+Sub.b);  //执行这行代码时,仅仅初始化Sub类

}

}

输出

init InitTester

After defining base

init  Base

After creating an object of Base

a=1

init Sub

b=1

2) 类的初始化时机

A 对于final类型的,如果在编译时就能计算出变量的值,则不会导致类的初始化,如下

class Tester {

public static final int a=2*3;

static  {

System.out.println("hello");   ..............

}

}

public class Sample

{

public static void main(String args[])

{  System.out.println("a="+Tester.a);

}

}

2)  package initbase;

class Base{  static int a=1;  static{    System.out.println("init Base");  }  static void method(){    System.out.println("method of Base");  }}class Sub extends Base{  static{    System.out.println("init Sub");  }}public class Sample{  public static void main(String args[]){    System.out.println("a="+Sub.a);  //仅仅初始化Base类    Sub.method();    }}由于静态变量a和静态方法method()在 base父类中定义,所以仅初始化Base类,没初始化SUB类打印结果为init Basea=1method of Base这样的话,如果在调用Tester.a时,不会输出hello,

java 类 加载 初始化_java中类的初始化和加载相关推荐

  1. java类验证和装载顺序_java中类的加载顺序介绍(ClassLoader)

    转自:http://blog.csdn.net/eff666/article/details/52203406 1.ClassNotFoundExcetpion 我们在开发中,经常可以遇见java.l ...

  2. java 类的执行顺序_Java中类的执行顺序

    讲解在代码中: package 类执行顺序; /** * java类执行顺序 * * 1.如果父类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块 * 2.如果类有静态成员赋值或者静态初 ...

  3. java枚举加载顺序_java 中类的加载顺序(转)

    1.虚拟机在首次加载Java类时,会对静态初始化块.静态成员变量.静态方法进行一次初始化 2.只有在调用new方法时才会创建类的实例 3.类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始 ...

  4. java类验证和装载顺序_Java类的加载机制和双亲委派模型

    Java类的加载机制和双亲委派模型 1类的加载机制 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading).验证(Verification).准备(Prepar ...

  5. java类验证和装载顺序_Java类的加载顺序

    1.有继承关系的加载顺序 关于关键字static,大家 都知道它是静态的,相当于一个全局变量,也就是这个属性或者方法是可以通过类来访问,当class文件被加载进内存,开始初始化的时候,被static修 ...

  6. 文件加载顺序_Java中类的加载顺序介绍(ClassLoader)

    Java中类的加载顺序介绍(ClassLoader) 1.ClassNotFoundExcetpion 我们在开发中,经常可以遇见java.lang.ClassNotFoundExcetpion这个异 ...

  7. java类定义的顺序_Java类及对象的初始化顺序

    1.初始化规则: 下面规则优先级从前往后依次降低 0.加载一个类时先初始化基类后初始化扩展类: 1.类的初始化高于对象的初始化: 类的初始化依靠静态代码(被static标识的),静态代码块.静态变量这 ...

  8. java中类和实例化_Java中类的初始化与实例化

    一个Java对象的创建过程往往包括类初始化 和 类实例化 两个阶段. 一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建, ...

  9. java类的成员组成_Java类的组成:类的三个组成部分

    Java类的组成:类的三个组成部分 (2011-11-17 21:51:53) 标签: j2me 一.数据成员:数据成员是类的属性,声明该类的对象所具备的属性.声明数据成员往往需要声明以下几项:(1) ...

最新文章

  1. 经典算法题之Maximal Square
  2. 保定理工学院专科计算机专业分数线,保定理工学院历年分数线 2021保定理工学院录取分数线...
  3. 《数字短片创作(修订版)》——第一部分 剧本创作 第1章 数字短片创意技法 剧本创作的构思...
  4. ssh连接出现:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  5. 有什么看起来很难,但是其实很简单的题目
  6. mybatis-plus的 mapper.xml 路径配置的坑
  7. 强化学习 ---baseline项目之 TensorFlow的训练参数的存储和加载
  8. virt-install选项详解
  9. python cnn模型_CNN系列模型发展简述(附github代码——已全部跑通)
  10. Arturia系列合成器插件大合集:Arturia V Collection 8 for mac
  11. Java基础:接口多态的综合案例 —— 笔记本电脑
  12. 什么是P2P和它的应用
  13. vblog 的 前景展望
  14. FreeMarker源码分析(八)
  15. Leaflet地图 - 绘制台风风圈 - 2
  16. Ricochet —— 基于 Tor 的加密即时通信工具
  17. 初学STM32,使用HAL库点灯全过程
  18. 利用和讯博客赚钱步骤详解(推荐)!
  19. 马云:不能把孩子放在温室里 光给孩子知识是不够的
  20. Vue中this.$confirm确定和取消执行不同的逻辑

热门文章

  1. cuda编程_CUDA刷新器:CUDA编程模型
  2. dcom配置_spring cloud 二代架构依赖组件 全配置放送
  3. access 导入txt 找不到可安装的isam_由浅入深:Python 中如何实现自动导入缺失的库?...
  4. 2019 年总结 | 31岁,不过是另一个开始
  5. 从JDK中,我们能学到哪些设计模式?
  6. std::call_once写单列模式
  7. matlab平稳随机过程的功率谱密度,平稳随机过程的功率谱密度
  8. linux下tomcat脚本,Linux下重启多个 tomcat 服务的脚本(推荐)
  9. mysql call procedure into_mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量...
  10. java js websocket_js+java websocket记录