以前面试总会碰到涉及到类的执行过程的笔试题。下面记录我自己的测试结果:

public class ClassA {

    public static  ClassA classa = new ClassA();

    static{
System.out.println("ClassA的静态代码块");
} public ClassA(){
System.out.println("ClassA的构造方法");
} {
System.out.println("ClassA的构造代码块");
} }
public class ClassB extends ClassA{

    static{
System.out.println("ClassB的静态代码块");
} public ClassB(){
System.out.println("ClassB的构造方法");
} {
System.out.println("ClassB的构造代码块");
} public static ClassC classc = new ClassC(); public void excute(){
System.out.println("执行方法");
} }
public class ClassC {

    public ClassC(){
System.out.println("ClassC的构造方法");
} }
public class Test {

    static {
System.out.println("Test的静态代码块");
} public static void main(String[] args) {
System.out.println("执行main方法");
ClassB b = new ClassB();
b.excute();
} }
执行结果:

Test的静态代码块
执行main方法
ClassA的构造代码块
ClassA的构造方法
ClassA的静态代码块
ClassB的静态代码块
ClassC的构造方法
ClassA的构造代码块
ClassA的构造方法
ClassB的构造代码块
ClassB的构造方法
执行方法

通过执行结果可以看出:

1.先执行Test类的静态代码块后执行Test类的main方法,说明要执行类的方法需要先加载这个类。

2.在创建ClassB的对象时,先去加载了父类ClassA。说明加载子类时如果没有加载父类,会先加载父类。

3.静态变量赋值和静态代码块都会在类加载的时候执行,执行顺序与静态变量和静态代码块出现的先后顺序一致。

4.如果在类的静态代码块执行之前创建该类的对象,则会先执行该类的构造代码块和构造方法。

5.构造代码块总是在构造函数之前执行。

6.创建子类对象,需要先初始化父类的对象。所以先执行父类的构造代码块和构造方法,再执行子类的构造代码块和构造方法。

java类的加载和执行顺序的更多相关文章

  1. 【转】 java类的加载和执行顺序

    1.先执行Test类的静态代码块后执行Test类的main方法,说明要执行类的方法需要先加载这个类. 2.在创建ClassB的对象时,先去加载了父类ClassA.说明加载子类时如果没有加载父类,会先加 ...

  2. java类的加载以及初始化顺序

    类的加载和初始化的了解对于我们对编程的理解有很大帮助,最近在看类的记载方面的问题.从网上查阅了若干文章,现总结如下: 我们通过一段代码来了解类加载和初始化的顺序: package com.classl ...

  3. jvm系列(一):java类的加载机制

    java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装 ...

  4. Java类的加载、链接和初始化

    一.Java的类加载机制回顾与总结: 我们知道一个Java类要想运行,必须由jvm将其装载到内存中才能运行,装载的目的就是把Java字节代码转换成JVM中的java.lang.Class类的对象.这样 ...

  5. java 类的加载,链接,初始化

    本篇的话题,讨论Java类的加载.链接和初始化.Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是java.lang.Class类的对象.一个Java类从字节代码 ...

  6. 【Java基础】Java类的加载和对象创建流程的详细分析

    相信我们在面试Java的时候总会有一些公司要做笔试题目的,而Java类的加载和对象创建流程的知识点也是常见的题目之一.接下来通过实例详细的分析一下. 实例问题 实例代码 Parent类 package ...

  7. Java类的加载的一个小问题

    前言 之前写了一篇文章专门介绍了一下类的加载和对象的创建流程,然后收到了一个博友的疑问,觉得蛮好的,在这里和大家分享下. 博文地址:[Java基础]Java类的加载和对象创建流程的分析 疑问 类在加载 ...

  8. JAVA类的加载、连接与初始化

    JAVA类的加载.连接与初始化 类的声明周期总共分为5个步骤1.加载2.连接3.初始化4.使用5.卸载 当java程序需要某个类的时候,java虚拟机会确保这个类已经被加载.连接和初始化,而连接这个类 ...

  9. Java类的加载 链接 初始化

    原文地址 Java类的加载.链接和初始化.Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是java.lang.Class类的对象.一个Java类从字节代码到能够 ...

随机推荐

  1. Elasticsearch 5.x 字段折叠的使用

    在Elasticsearch 5.x  之前,如果实现一个数据折叠的功能是非常复杂的,随着5.X的更新,这一问题变得简单,找到了一遍技术文章,对这个问题描述的非常清楚,收藏下. 参考:https:// ...

  2. Python中xlrd模块解析

    xlrd 导入模块 import xlrd 2.打开指定的excel文件,返回一个data对象 data = xlrd.open_workbook(file)                     ...

  3. hdu 5877 Weak Pair (Treap)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5877 题面; Weak Pair Time Limit: 4000/2000 MS (Java/Other ...

  4. bzoj 4542: [Hnoi2016]大数 (莫队)

    Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个 ...

  5. 【CodeForces 730H】Delete Them

    BUPT 2017 summer training (for 16) #1E 题意 找到匹配要删除的文件名们但不匹配其它文件名们的表达式.其中?匹配所有字符,其它字符匹配本身. 题解 如果某个位置出现 ...

  6. Linux 遍历目录下面所有文件,将目录名、文件名转为小写

    当你从 Windows 服务器换到 Linux 服务器的时候,以前的上传目录的目录名.文件名会遇到大小写的问题.在 Windows 环境下面没有文件区分大小写的概念,而 Linux 却有严格的文件名大 ...

  7. Hdoj 2046.骨牌铺方格 题解

    Problem Description 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数. 例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图: Inpu ...

  8. 【BZOJ2829】[SHOI2012]信用卡凸包(凸包)

    [BZOJ2829][SHOI2012]信用卡凸包(凸包) 题面 BZOJ 洛谷 题解 既然圆角的半径都是一样的,而凸包的内角和恰好为\(360°\),所以只需要把圆角的圆心弄下来跑一个凸包,再额外加 ...

  9. [hexo]如何更换主题、删除文章

    如何修改主题 hexo有很多主题,每个人可以选择自己喜欢的主题来应用,也可以自己设计主题并且上传形成公共主题供大家下载. 如果是自己设计主题的话,会稍微麻烦一些,需要自己配置很多文件,并且编写css以 ...

  10. JS日期选择器

    浏览器自带 浏览器自带日期控件,使用<input type="date">时,点击后会弹出. 1:EDGE 2:火狐 3:谷歌  三种都不一样.略胜于无 练习 模仿火狐 ...