`
yanxiaoyu
  • 浏览: 1070 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java程序执行顺序

阅读更多
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程序执行顺序,你了解了吗.doc

    JAVA程序执行顺序,你了解了吗

    Java类执行顺序详解+实例(阿里面试题)+详细讲解+流程图

    Java类执行顺序详解+实例(阿里面试题)+详细讲解+流程图

    西南科技大学Java程序设计与实践 实验四 GUI实验实验报告及源码

    西南科技大学Java程序设计与实践 实验一、实验目的: 练习面向对象的图形用户界面设计、界面布局、事件设计方 法。 二、实验内容: 设计一个类似Windows计算器的Application应用程序。 三、实验要求: 1、采用Java ...

    深入理解java类加载机制

    而类加载是Java程序执行过程中的一个重要的组成部分,它实现了程序的动态加载和运行。 在字节码方面,我们将从Java语言的语法和编译原理等重要内容出发,全面解读字节码在Java程序的开发和运行中的应用。我们将详细...

    java程序中的内存分配问题

    本例通过一个简单的java程序来阐述了程序在执行过程中内存的动态分配,但分析过程非常详细,适合java初学者

    java打包成可执行程序

    java打包方法详述主要讲怎么导出包,利用JSmooth将jar包打包成可执行程序的过程

    java中带super关键字的程序内存分析

    想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件

    换器也兼容其他多版本的JAVA程序,比如S40手机的JAVA程序

    【批处理文件 ★自动打包★.bat】是为了简化制作JAVA程序复杂过程的特殊文件,对DOS命令不熟悉的人有很大的帮助。 下面是三个主程序和一个需要转换的JAVA游戏。 由于这个模拟器主要是真对MIDP1.1开发的,所以有些...

    自考04747《Java语言程序设计》课后习题答案全集.doc

    1.1 指出JAVA语言的主要特点和JAVA程序的执行过程。 5 1.2 说出开发与运行JAVA程序的重要步骤。 5 1.3 如何区分应用程序和小应用程序? 5 1.4 说出JAVA源文件的命名规则。 5 1.6 JAVA语言使用什么字符集?共有多少个...

    java中带static关键字的程序内存分析

    想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件

    java中与继承有关的程序内存分析

    想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件

    java中带有不同构造方法的程序内存分析

    想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件

    java中带有this关键字的程序内存分析

    想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件

    Java程序设计基础:设计解决问题的策略.pptx

    设计解决问题 的策略 基本程序设计--设计解决问题的策略 本讲主题 1 理解什么是程序 2 了解程序设计的基本步骤 3 掌握设计解决问题的策略 程序一词来自生活,通常指完成某些事物的一...//Java程序 public class Comput

    java中多态的内存分析

    想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件

    Java 应用程序中定时执行任务的定时器框架

    所有类型的 Java 应用程序一般都需要计划重复执行的任务。企业应用程序需要计划每日的日志或者晚间批处理过程。一个 J2SE或者 J2ME 日历应用程序需要根据用户的约定计划闹铃时间。不过,标准的调度类 Timer 和 ...

    Java基础教案\JAVA精讲入门

     编译执行第一个Java程序 教学方法:  比较与比喻教学方式,提高学生的学习兴趣  程序调适,让学生对Java程序获取感性认识,激发兴趣;  适度提问,养成学生勤于思考的学习习惯 教学过程设计: 1.讨论,...

    浅谈Java文件执行顺序、main程序入口的理解

    主要介绍了Java文件执行顺序、main程序入口的理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    计算机程序设计(Java)-教案--单元二--Java语言开发基础.docx.docx

    课程名称 Java程序设计 教师姓名 专业班级 授课时间 授课地点 学时数 8 授课题目 §2Java语言开发基础 教学目标及要求 知识目标 掌握Java语言的基本组成; :・掌握数据类型、变量、运算符及表达式; :・掌握三种...

    程序执行过程内存简单分析

    我的第一篇博客:Java程序执行过程内存简单分析 Java虚拟机的内存模型图 (图片来源于:https://www.cnblogs.com/cjsblog/p/9850300.html) 特点 虚拟机栈: Java虚拟机栈为线程私有,它的生命周期与线程相同(随...

Global site tag (gtag.js) - Google Analytics