java复习基础篇——代码执行顺序

代码块:在Java中,使用{}括起来的代码成为代码块

根据其位置和声明的不同,可以分为局部代码块:局部位置,用于限定变量的生命周期

构造代码块:在类中的成员位置,用{}括起来的代码。每次调用构造方法执行前,都会先执行构造代码块。

作用:可以把多个构造方法的共同代码放在一起。

静态代码块:在类中的成员位置,用{}括起来的代码,只不过它用static修饰

作用:一般是对类进行初始化

public class BlockTest {
    {
    System.out.println("444 BlockTest构造代码块(上)!");
    }

      public static void main(String[] args) {
      {
      System.out.println("222 局部代码块运行!");
      }
    System.out.println("333 BlockTest主方法执行了");
    BlockTest blockTest = new BlockTest();
    Coder cd = new Coder();
    Coder cd2 = new Coder();
                      }

    static {
    System.out.println("111 BlockTest静态代码块被执行");
       }

    {
    System.out.println("555 BlockTest构造代码块被执行(下)");
    }

      public BlockTest() {
      System.out.println("666 BlockTest无参构造执行");
              }
        }    class Coder {

    static {
    System.out.println("777 Coder静态代码块被执行");
      }

    {
    System.out.println("888 Coder构造代码块被执行");
    }

      public Coder() {
      System.out.println("999 Coder无参构造执行");
             }
          }

执行顺序结果:

【1】静态代码块

作用:是对类进行初始化,若一个类包含多个静态代码块,那则是按照代码执行顺序执行。

1.随着类的加载而执行,而且只一次。

2.优先于主函数执行。

3. 当类进入内存时,首先进行静态代码加载,例如静态代码块,用static 修饰的变量,函数等。静态代码块用于初始化类。构造函数是对对象进行初始化,而静态代码块可以对类进行初始化,就如在静态代码块中把静态变量 num 修改他的值。而且在一些不需要对类实例化的场合,静态代码块也可以非常有用。

【2】构造代码块

在类中:

格式:{构造代码块执行语句}

作用:就是给所有对象进行初始化。

注意几点:1.每次创建对象他都会执行。

2.构造代码快是优于构造函数执行。

3.构造代码块与构造函数的区别是:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象,都会先执行相同的构造代码块。也就是说,构造代码块中定义的是不同对象共性的初始化内容。

【3】局部代码块

局部代码块,又叫普通代码块。它是作用在方法中的代码块。

作用:是控制变量的生命周期。

在程序中当我们定义完成一个局部变量x之后,并且在接下来的代码中,不想再用到它时,那么就没必要让x在内存中继续占用空间。因此就有了局部代码块。

面试题?

静态代码块、构造代码块、构造方法的执行顺序?

静态代码块>构造代码块>构造方法

静态代码块:只执行一次

构造方法:每次调用构造方法都执行

原文地址:https://www.cnblogs.com/unrulywind/p/9395300.html

时间: 2024-11-05 03:44:41

java复习基础篇——代码执行顺序的相关文章

java复习基础篇—-JVM内存结构(转)

主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程: JVM启动时,是由java命令/javaw命令来启动的. 二.JVM基本结构: JVM基本结构图: <深入理解Java虚拟机(第二版)>中的描述是下面这个样子的: Java中的内存分配: Java程序在运行时,需要在内存中的分配空间.为了提高运算效率,就对数据进行了不同空间的划分,因为每一片区域都有特定的处理数据方式和内存管理方式. 具体划分为如下5个内存空间:(非常重要) 栈:存放局部变量

java复习基础篇——Mysql数据库

数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. mysql的dos窗口启动关闭命令:net start mysql和net stop mysql 登录命令:(1)mysql -u用户名 -p密码      (2)mysql --host=ip地址 --user=用户名 --password=密码 DOS操作数据乱码解决: 我们在dos命令行操作中文时,会报错ERROR 1366 (HY000): Inco

java中代码执行顺序

之前面试的时候有一道题,是考java的代码执行顺序的. 在大三的时候学习java语言的时候有说,但是在实际工作中用的比较少,所以在这里重新记录复习一下. 比如下面这段代码: class helloA{ public helloA(){ System.out.println("helloA"); } { System.out.println("I'm A"); } static { System.out.println("Static A"); }

final、static、代码块、静态代码块、内部类、代码执行顺序

final final域使得确保初始化安全性(initialization safety)成为可能,初始化安全性让不可变形对象不需要同步就能自由地被访问和共享 作用在类上               则为final类,final类不能被继承.一般用于工具类时,同时把工具类构造函数声明为私有,暴露静态共有方法 作用在成员变量上    则视为常量.此时赋值方式有三种:(1)声明时赋值(2)构造函数中赋值(3)代码块中赋值. 即不管哪种方式都要保证在使用该变量之前要确保已经有值.使用该特性,可以强制赋

当C#中带有return的TryCatch代码遇到Finally时代码执行顺序

编写的代码最怕出现的情况是运行中有错误出现,但是无法定位错误代码位置.综合<C#4.0图解教程>,总结如下: TryCatchFinally用到的最多的是TryCatch,Catch可以把Try代码块的错误捕捉到,并对错误进行后续处理.这一点比较常见. 现在要讨论的是如果Try和Catch代码块有return时代码的执行顺序.众所周知,return的作用是退出当前函数,不执行return后面的代码.那么问题来了:如果return出现在Try或catch代码块中,并且return后面还有代码,则

javascript--函数的声明及调用/JS中代码执行顺序

[函数的声明及调用] 1.函数声明格式: function 函数名(参数1,参数2,参数3--){ //函数体 return 结果: } 函数调用的格式: 函数名(参数1的值,参数2的值,--): 事件调用:事件名=函数名(): 2.函数声明的几点强调: ① 函数的声明,必须符合小驼峰法则(首字母小写,之后每个单词首字母大写): ② 参数的列表,可以有参数,可以无参数.分别称为有参函数,无参函数: ③ 声明函数时的参数列表,称为"形参列表"(变量的名): 调用函数时的参数列表,称为&q

浏览器环境下JavaScript脚本加载与执行探析之代码执行顺序

本文主要基于向HTML页面引入JavaScript的几种方式,分析HTML中JavaScript脚本的执行顺序问题 1. 关于JavaScript脚本执行的阻塞性 JavaScript在浏览器中被解析和执行时具有阻塞的特性,也就是说,当JavaScript代码执行时,页面的解析.渲染以及其他资源的下载都要停下来等待脚本执行完毕①.这一点是没有争议的,并且在所有浏览器中的行为都是一致的,原因也不难理解:浏览器需要一个稳定的DOM结构,而JavaScript可能会修改DOM(改变DOM结构或修改某个

Java基础-代码执行顺序(重要)

Java代码初始化顺序: 1.由 static 关键字修饰的(如:类变量[静态变量].静态代码块)将在类被初始化创建实例对象之前被初始化,而且是按顺序从上到下依次被执行.静态(类变量.静态代码块)属于类本身,不依赖于类的实例. 2.没有 static 关键字修饰的(如:实例变量[非静态变量].非静态代码块)初始化实际上是会被提取到类的构造器中被执行的,但是会比类构造器中的代码块优先执行到,非静态(实例变量.非静态代码块)的地位是相等的,它们将按顺序被执行. 形参: 比如你定义一个函数void a

java代码执行顺序

当父类与子类都有静态代码块和构造函数的时候,执行顺序如下:        父类静态代码块 > 子类静态代码块 java虚拟机加载类时,就会执行该块代码.        父类构造函数 > 子类构造函数 (先有父亲,后有孩子) 如果是多级继承关系的话,高层的父类首先执行,然后依次递减 总结:静态优先执行,父类优先于子类执行                静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次