zoukankan      html  css  js  c++  java
  • java程序执行顺序

    一直都常听同学们和老师们讲过一些关于java程序中的一些执行流程和执行顺序,从来也没自己系统的总结过。今天突来兴趣,总结一下,也算给自己做了学校笔记。 

    一、首先在了解程序的一些加载顺序流程开始前,首先先来了解一下一个对象的常见组成部分。变量,常量,静态变量,构造函数体,静态代码块,代码块,方法体。当我们在代码中实例一个对象 new()的时候,在程序的内存中发生了怎样的变化?这些变化是按照怎样的顺序发生的呢?


    一、在实例一个对象之前,jvm就会开始为加载做一些准备工作,静态变量,常量会被优先加载到内存的方法区内,常量放入方法区里的常量池中。在真正new一个对像时,对象的执行顺序是:静态代码块——》代码块——》构造函数。

    代码1:

    public class ChildClass{
     
     static String sst = "静态变量";
     String str = "子类成员变量赋值";
    
     public ChildClass(){
      System.out.println("我是子类构造");
     }
     {
       System.out.println("子类代码块");
     }
     static {
        System.out.println("子类静态代码块");
     }
     public void getStr(){
        System.out.println("子类方法--->"+str);
     }
     public static void main(String[] args) {
        ChildClass cc = new ChildClass();
    }
    }

    执行结果:

    子类静态代码块
    子类代码块
    我是子类构造

    这里还要特别说明一下,关于静态代码块的问题,同一个类如果在进行多次实例的话,只有在第一次执行静态代码块。

     public static void main(String[] args) {
        ChildClass cc = new ChildClass();
        ChildClass cc2 = new ChildClass();
    }

    执行结果:

    子类静态代码块
    子类代码块
    我是子类构造
    子类代码块
    我是子类构造

    二、类与类之间存在extends的关系,如果存在这一次关系后,程序的执行顺序是什么呢。不多说,先看代码

    代码二:

    public class ChildClass extends FatherClass{
        
        static String sst = "静态变量";
        String str = "子类成员变量赋值";
    
       public ChildClass(){
        System.out.println("我是子类构造");
        }
        
        {
            System.out.println("子类代码块");
        }
        static {
            System.out.println("子类静态代码块");
        }
     public static void main(String[] args) {
         ChildClass cc = new ChildClass();
         }
    }

    代码三:

    public class FatherClass {
    
        String str = "父类成员变量赋值";
             
            public FatherClass() {
        System.out.println("我是父类构造");
        }
        {
            System.out.println("父类代码块");
         }  
        
         static {
            System.out.println("父类静态代码块");
         }      
    }

    执行结果:

    父类静态代码块
    子类静态代码块
    父类代码块
    我是父类构造
    子类代码块
    我是子类构造

    如果 同样的对象继续实例化,父类和子类的静态代码块依然是只执行一次。

  • 相关阅读:
    iOS开发笔记 — Text、UI交互细节、两个动画效果等
    iOS数据库存储数组或字典等数据
    NSMutableAttributedString使用
    进军OC之必备C语言知识点
    iOS开发之c语言基础 扩展知识点 及 企业面试题
    iOS开发之c语言基础Lesson-11 函数指针 上课笔记 与 试题练习
    iOS开发之c语言基础Lesson-10 动态内存管理 上课笔记 与 试题练习
    指针与数组的区别和联系
    iOS开发之c语言基础Lesson-09 高级指针 上课笔记 与 试题练习
    iOS开发之c语言基础Lesson-08 指针 上课笔记 与 试题练习
  • 原文地址:https://www.cnblogs.com/yanxioayu/p/6593370.html
Copyright © 2011-2022 走看看