博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java程序执行顺序
阅读量:5115 次
发布时间:2019-06-13

本文共 1717 字,大约阅读时间需要 5 分钟。

一直都常听同学们和老师们讲过一些关于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

你可能感兴趣的文章
Python入门-函数
查看>>
[HDU5727]Necklace(二分图最大匹配,枚举)
查看>>
距离公式汇总以及Python实现
查看>>
一道不知道哪里来的容斥题
查看>>
Blender Python UV 学习
查看>>
window添加右键菜单
查看>>
入手腾龙SP AF90mm MACRO
查看>>
Window7上搭建symfony开发环境(PEAR)
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
一些方便系统诊断的bash函数
查看>>
jquery中ajax返回值无法传递到上层函数
查看>>
css3之transform-origin
查看>>
Master选举原理
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
小别离
查看>>
微信小程序-发起 HTTPS 请求
查看>>
WPF动画设置1(转)
查看>>
基于node/mongo的App Docker化测试环境搭建
查看>>