首页 > 代码库 > 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("父类静态代码块"); } }
执行结果:
父类静态代码块
子类静态代码块
父类代码块
我是父类构造
子类代码块
我是子类构造
如果 同样的对象继续实例化,父类和子类的静态代码块依然是只执行一次。
java程序执行顺序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。