zoukankan      html  css  js  c++  java
  • 剑指offer-Java类加载过程

    Java 类加载过程:(以A.class为例)

    1. 定位A.class类,并调用findLoaderClass(string)判断这个类是否已经存在

    2. 先执行父类中static成员变量与static方法块

    3. 再执行子类中static成员变量与static方法块

    4. 接着执行父类中非static成员变量、非static方法块和构造函数

    5. 最后执行子类中非static成员变量、非static方法块和构造函数

    注意:构造函数是最后执行的。

    下面用测试过的代码输入来说明:

    (1)类中没有成员变量时

     1 public class Test1 {    
     2     static{
     3         System.out.println(5);
     4     }
     5     
     6     public Test1() {
     7         System.out.println(6);
     8     }
     9     {
    10         System.out.println(7);
    11     }
    12 }
    13 
    14 public class Test extends Test1 {    
    15     static{
    16         System.out.println(1);
    17     }
    18     {
    19         System.out.println(2);
    20     }    
    21     public Test() {
    22         System.out.println(3);
    23     }
    24     {
    25         System.out.println(4);
    26     }    
    27     public static void main(String[] args) {
    28         Test test=new Test();
    29     }
    30 }

    输出:5 1 7 6 2 4 3

    (2)有其他实例化对象时

     1 public class Test1 {    
     2     static Test2 test22=new Test2("static_father_test2");
     3     Test2 test2=new Test2("father_test2");    
     4     static{
     5         System.out.println(5);
     6     }
     7     
     8     public Test1() {
     9         System.out.println(6);
    10     }
    11     {
    12         System.out.println(7);
    13     }
    14 }
    15 
    16 public class Test2 {
    17     public Test2(String str) {
    18         System.out.println("test2:"+str);
    19     }
    20 }
    21 public class Test extends Test1 {    
    22     static Test2 test22=new Test2("static_test22");    
    23     Test2 test2=new Test2("test2");    
    24     static{
    25         System.out.println(1);
    26     }
    27     {
    28         System.out.println(2);
    29     }
    30     
    31     public Test() {
    32         System.out.println(3);
    33     }
    34     {
    35         System.out.println(4);
    36     }    
    37     public static void main(String[] args) {
    38         Test test=new Test();
    39     }
    40 }

    输出打印:
    test2:static_father_test2
    5
    test2:static_test22
    1
    test2:father_test2
    7
    6
    test2:test2
    2
    4
    3

  • 相关阅读:
    MVC @Url.Action 小示例
    Eclipse快捷键
    MVC视频下载/文件上传
    MySQL数据库备份/导出
    C#文件下载
    C#正则表达式匹配字符串中的数字
    常用的LINQ to SQL 用法
    C# 实现抓取网页内容(一)
    C# 繁体字和简体字之间的相互转换
    我到底会什么??
  • 原文地址:https://www.cnblogs.com/GranceWang2014/p/4631179.html
Copyright © 2011-2022 走看看