public static void main(String[] args) { ChildClass cc = new ChildClass(); ChildClass cc2 = new ChildClass(); }
一直都常听同学们和老师们讲过一些关于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程序执行顺序,你了解了吗
Java类执行顺序详解+实例(阿里面试题)+详细讲解+流程图
西南科技大学Java程序设计与实践 实验一、实验目的: 练习面向对象的图形用户界面设计、界面布局、事件设计方 法。 二、实验内容: 设计一个类似Windows计算器的Application应用程序。 三、实验要求: 1、采用Java ...
而类加载是Java程序执行过程中的一个重要的组成部分,它实现了程序的动态加载和运行。 在字节码方面,我们将从Java语言的语法和编译原理等重要内容出发,全面解读字节码在Java程序的开发和运行中的应用。我们将详细...
本例通过一个简单的java程序来阐述了程序在执行过程中内存的动态分配,但分析过程非常详细,适合java初学者
java打包方法详述主要讲怎么导出包,利用JSmooth将jar包打包成可执行程序的过程
想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件
【批处理文件 ★自动打包★.bat】是为了简化制作JAVA程序复杂过程的特殊文件,对DOS命令不熟悉的人有很大的帮助。 下面是三个主程序和一个需要转换的JAVA游戏。 由于这个模拟器主要是真对MIDP1.1开发的,所以有些...
1.1 指出JAVA语言的主要特点和JAVA程序的执行过程。 5 1.2 说出开发与运行JAVA程序的重要步骤。 5 1.3 如何区分应用程序和小应用程序? 5 1.4 说出JAVA源文件的命名规则。 5 1.6 JAVA语言使用什么字符集?共有多少个...
想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件
想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件
想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件
想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件
设计解决问题 的策略 基本程序设计--设计解决问题的策略 本讲主题 1 理解什么是程序 2 了解程序设计的基本步骤 3 掌握设计解决问题的策略 程序一词来自生活,通常指完成某些事物的一...//Java程序 public class Comput
想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件
所有类型的 Java 应用程序一般都需要计划重复执行的任务。企业应用程序需要计划每日的日志或者晚间批处理过程。一个 J2SE或者 J2ME 日历应用程序需要根据用户的约定计划闹铃时间。不过,标准的调度类 Timer 和 ...
编译执行第一个Java程序 教学方法: 比较与比喻教学方式,提高学生的学习兴趣 程序调适,让学生对Java程序获取感性认识,激发兴趣; 适度提问,养成学生勤于思考的学习习惯 教学过程设计: 1.讨论,...
主要介绍了Java文件执行顺序、main程序入口的理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
课程名称 Java程序设计 教师姓名 专业班级 授课时间 授课地点 学时数 8 授课题目 §2Java语言开发基础 教学目标及要求 知识目标 掌握Java语言的基本组成; :・掌握数据类型、变量、运算符及表达式; :・掌握三种...
我的第一篇博客:Java程序执行过程内存简单分析 Java虚拟机的内存模型图 (图片来源于:https://www.cnblogs.com/cjsblog/p/9850300.html) 特点 虚拟机栈: Java虚拟机栈为线程私有,它的生命周期与线程相同(随...