一直都常听同学们和老师们讲过一些关于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("父类静态代码块");}
}

执行结果:

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

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

转载于:https://www.cnblogs.com/yanxioayu/p/6593370.html

java程序执行顺序相关推荐

  1. Java实例化后自动执行_Java的实例化顺序(程序执行顺序)

    加载/执行顺序: 牢记一点: 静态和非静态分开处理 使用到静态加载时,静态又分为: 静态变量, 静态代码块, 其中加载顺序是按照类中书写的先后顺序加载的 非静态加载顺序: 按照非静态书写顺序加载/执行 ...

  2. java中程序执行顺序

    ①在java中执行顺序 一 静态初始化块 二 非静态初始化块 三 构造器 四 父类构造器 ② java中的赋值顺序 一 静态初始化块直接赋值 二 非静态初始化块直接赋值 三 父类继承的属性已赋值 四 ...

  3. Java代码执行顺序

    Java代码执行顺序 1. Java初步认知 2. Javayun.java例子 3. 反编译Javayun.class文件 4. 分析Javayun_dxdump文件 5. 再来一个网上的例子Jav ...

  4. 学习MFC首先要知道的--程序执行顺序

    MFC的程序执行顺序 很多刚学MFC的人都会被MFC给弄的晕头转向.以前传统的C语言中的main()不见了,window sdk api 中的WinMain()函数也不见了,到底用MFC编写的程序是如 ...

  5. Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)...

    1. Future接口简介 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API ...

  6. GO函数内部程序执行顺序

    目录 GO 包 标准库 程序执行顺序 GO 包 包是结构化代码的一种方式:每个程序都由包(通常简称为pkg)的概念组成,可以使用自身的包或者从其它包中 导入内容. 如同其它一些编程语 言中的类库或命名 ...

  7. 如何让java程序执行一段时间后停止

    如何让java程序执行一段时间后停止 1.概述 在本文中,我们将学习如何在一段时间后结束长时间运行的任务.我们将探讨这个问题的各种解决方案.此外,还将介绍各种方案缺点. 2.使用循环 假设我们在一个循 ...

  8. Java语言是编译型语言还是解释型语言?(Java程序执行过程)

    Java语言是编译型语言还是解释型语言? 我们都知道,编程语言从程序执行过程分,分为编译型语言和解释性语言 什么是编译型语言和解释型语言? Java语言看似是编译型的,因为Java程序代码的确是需要经 ...

  9. java中子类继承父类程序执行顺序问题

    为什么80%的码农都做不了架构师?>>>    Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分,它们的执行顺序相对来说 ...

最新文章

  1. ATAC-seq学习记录
  2. C ++中的POD类型是什么?
  3. OVS DPDK--网桥配置(四)
  4. Windows下启动停止SQL Server 2005服务
  5. 后端:Java 中 10 大坑爹功能!
  6. 单向循环链表的增、删、查、改、python实现,超详细讲解
  7. 联想Z6 Pro测评:斗战圣佛?很能打!
  8. WeUI 专为微信Web服务量身定制
  9. paip.python错误解决8
  10. matlab m语言建模,MATLAB M语言高级编程
  11. MVPArms官方快速组件化方案开源,来自5K star的信赖
  12. 你画我猜游戏html源代码,微信小程序你画我猜demo完整源码
  13. latex中标题的使用
  14. web网页设计期末课程大作业~超高仿英雄联盟LOL游戏官网设计与实现(HTML+CSS+JavaScript)
  15. vue3.0+ts+element-plus多页签应用模板:侧边导航菜单(下)
  16. PHP微信app接口退款,PHP接入微信退款接口
  17. 计算机操作系统是什么?
  18. 激光电视和投影仪有什么区别
  19. 微信开发之——接口调用频率xianzh
  20. C++ 多线程学习总结

热门文章

  1. 数据挖掘实践(金融风控)——task02:数据分析
  2. 只显示小方格_excel中最有效率的插件——方方格子
  3. zip在python中的用法_Python中zip()函数用法实例教程
  4. php mvc vue 调用js函数_js 匿名函数自调用
  5. linux里用户权限:~$,/$,~#,/#的区别与含义
  6. mysql 大文件导入工具_BigDump:导入超大mysql数据库文件工具
  7. Linux内核移植漫谈——你不是第一个想移植Linux内核的人
  8. 仿path首页滑动效果
  9. 火线精英显示服务器一断,火线精英bug大全解析
  10. python的常量_如何给python中设定常量