Java--类的加载顺序
来源:https://www.cnblogs.com/sxkgeek/p/9647992.html
1、有继承关系的加载顺序
关于关键字static,大家 都知道它是静态的,相当于一个全局变量,也就是这个属性或者方法是可以通过类来访问,当class文件被加载进内存,开始初始化的时候,被static修饰的变量或者方法即被分配了内存,而其他变量是在对象被创建后,才被分配了内存的。
所以在类中,加载顺序为:
1.首先加载父类的静态字段或者静态语句块
2.子类的静态字段或静态语句块
3.父类普通变量以及语句块
4.父类构造方法被加载
5.子类变量或者语句块被加载
6.子类构造方法被加载
父类代码:
public class FuLei {
static int num = 5;//1.首先被加载
static{System.out.println("静态语句块已经被加载"+num); //2.被加载
}
int count = 0; //5.被加载
{System.out.println("普通语句块"+count++);//6.被加载
}
public FuLei(){System.out.println("父类的构造方法在这时候加载count="+count);//7.被加载
}
}
子类代码:
public class ZiLei extends FuLei {
static{System.out.println("静态语句块和静态变量被初始化的顺序与代码先后顺序有关"); //3.被加载
}
static int num = 45;//4.被加载
int numre = 0; //8.被加载
{numre++;System.out.println("numre"+numre);//9.被加载}
public ZiLei(){System.out.println("子类构造方法");//10.被加载
}
public static void main(String[] args){ZiLei ht = new ZiLei();
}
}
console打印:
静态语句块已经被加载5
静态语句块和静态变量被初始化的顺序与代码先后顺序有关
普通语句块0
父类的构造方法在这时候加载count=1
numre1
子类构造方法
注意
当class文件被加载进内存,开始初始化的时候,被static修饰的变量或者方法即被分配了内存,而其他变量是在对象被创建后,才被分配了内存的。
将子类代码中的创建对象注释掉
// ZiLei ht = new ZiLei();
console打印:
静态语句块已经被加载5
静态语句块和静态变量被初始化的顺序与代码先后顺序有关
2、没有继承关系的加载顺序
代码示例
public class Test {
public static void main(String[] args) {new Test(); //4.第四步,new一个类,但在new之前要处理匿名代码块
}static int num = 4; //2.第二步,静态变量和静态代码块的加载顺序由编写先后决定{num += 3;System.out.println("b"); //5.第五步,按照顺序加载匿名代码块,代码块中有打印
}int a = 5; //6.第六步,按照顺序加载变量{ // 成员变量第三个System.out.println("c"); //7.第七步,按照顺序打印c
}Test() { // 类的构造函数,第四个加载System.out.println("d"); //8.第八步,最后加载构造函数,完成对象的建立
}static { // 3.第三步,静态块,然后执行静态代码块,因为有输出,故打印aSystem.out.println("a");
}static void run() // 静态方法,调用的时候才加载// 注意看,e没有加载
{System.out.println("e");
}
}
console打印:
a
b
c
d
3、注意
- 静态代码块(只加载一次)
- 构造方法(创建一个实例就加载一次)
- 静态方法,调用的时候才会加载,不调用的时候不会加载
- 静态语句块和静态变量被初始化的顺序与代码先后顺序有关
public class ExtendsTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
C c = new D();
}
}
class C {
static
{
System.out.println("C 基类静态域 ");
}
{
System.out.println("C 基类对象成员构造函数");
}
public C(){
System.out.println("C 基类本身的构造函数");
}
}
class D extends C{
static
{
System.out.println("D 派生类静态域");
}
{
System.out.println("D 派生类对象成员构造函数");
}
public D(){
System.out.println("D 派生类本身的构造函数");
}
}
运行结果:
C 基类静态域
D 派生类静态域
C 基类对象成员构造函数
C 基类本身的构造函数
D 派生类对象成员构造函数
D 派生类本身的构造函数
Java--类的加载顺序相关推荐
- java 类的加载顺序
类的加载顺序 public class ClassA {public static ClassA classa = new ClassA();static{System.out.println(&qu ...
- java类的加载顺序题目_Java 类的加载顺序(题)
引例 public class A extends B { public int a = 100; public A() { super(); System.out.println(a); a = 2 ...
- java 类的加载顺序
Java类加载机制中最重要的就是程序初始化过程,其中包含了静态资源,非静态资源,父类子类,构造方法之间的执行顺序.今天就来理一理这之间的关系 先上代码: public class test_no {p ...
- Java类的加载顺序
一.知识 静态: (1) 父类静态成员和静态代码块 (2) 子类静态成员和静态代码块 非静态: (3) 父类非静态成员和非静态代码块 (4) 父类构造函数 (5) 子类 非静态成员和非静态代码块 (6 ...
- java中类的加载顺序
java中类加载顺序: 1)静态代码块只执行一次:静态代码块首先被初始化 2)构造代码块在每次创建对象都会执行:构造函数都是最后执行的. 3)按照父子类继承关系进行初始化,先执行父类的初始化: 4)程 ...
- Java内部类以及类的加载顺序(一)
java内部类以及类的加载顺序(一) Java 类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类就被称为内部类.根据定义的方式不同,内部类分为四大类静态内部类,成员内部类,局部内部类,匿 ...
- Java深度历险(二)——Java类的加载、链接和初始化
在上一篇文章中介绍了Java字节代码的操纵,其中提到了利用Java类加载器来加载修改过后的字节代码并在JVM上执行.本文接着上一篇的话题,讨论Java类的加载.链接和初始化.Java字节代码的表现形式 ...
- 28 Java类的加载机制、什么是类的加载、类的生命周期、加载:查找并加载类的二进制数据、连接、初始化、类加载器、双亲委派模型、自定义类加载器
28Java类的加载机制 28.1.什么是类的加载 28.2.类的生命周期 28.2.1.加载:查找并加载类的二进制数据 28.2.2.连接 28.2.3.初始化 28.3.类加载器 28.4.类的加 ...
- 这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析
前言 package com.jvm.classloader;class Father2{public static String strFather="HelloJVM_Father&qu ...
- java类的加载,链接,初始化
Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是java.lang.Class类的对象.一个Java类从字节代码到能够在JVM中被使用,需要经过加载.链接和初始 ...
最新文章
- java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]
- C语言递归算法十进制数转换为八进制(附完整源码)
- java动态代理技术
- Mysql中explain命令查看语句执行概况
- python中int函数的用法浅析_Python中int()函数的用法浅析
- 包体 400 KB,首开 0.2 s,真有这样的播放器 SDK!
- 单目视觉里程计 mono vo
- .NET四种注释规范
- Android进阶笔记12:ListView篇之图片优化
- 最好用的五大服装进销存管理软件,强推第一个
- chrome插件开发引入图片静态资源
- jupyter代码字体大小_Jupyter Notebook 更改字体、字体大小、行高
- Chef入门详解 Chef安装 Chef使用
- mock gps android,Mock GPS with joystick
- 淘宝标题怎么写才能具有高权重
- javascript练习题三
- 同文输入法 android,同文输入法(com.osfans.trime) - 3.1.3 - 应用 - 酷安
- 大牛项目经理10年经验分享!
- 血性的青,尿性的春——《中国合伙人》影评
- nacos在国产银河麒麟系统飞腾CPU部署安装
热门文章
- 计算机网络(第7版)——谢希仁 课后习题3-26
- for、while、do while循环的流程图表示及相应continue、break的流程图表示
- Number与String之间的类型转换,进制转换
- R语言可以直接从数据库读取数据么?R语言读取数据库数据示例
- thinkphp 源码分析(四)—— 错误和异常处理 以及 log 日志
- form表单提交数据(包括文字和图片)实例
- java包装类为什么会有包装类
- im中的定位消息 ios_仿微信的IM聊天时间显示格式(含iOS/Android/Web实现)[图文+源码]...
- 微信开发过程中有关资金安全的一些想法
- 杨辉三角形(Java版)