Android代码块执行顺序分析总结

本文介绍了Android代码块执行顺序分析总结,分享给大家,具体如下:

子类、父类变量,代码块,以及构造方法的加载顺序,是我们在程序开发中时不时遇到的一个问题,也是比较容易混淆的。

基础准备:

  1. 变量: 成员变量(叫类变量、实例变量)和局部变量
  2. 方法: 成员方法和构造方法
  3. 代码块:普通代码块、构造代码块、静态代码块、同步代码块

测试的父类:

public class ParentClass {
  public static String name = "爸爸";
  public int age = 40;
  public ParentClass(){
    System.out.println("父类构造函数");
  }

  //非静态代码块
  {
    System.out.println("父类非静态代码块" + "---" + age);
  }

  //静态代码块
  static{
    System.out.println("父类静态代码块" + "---" + name);
  }
}

测试的子类:

public class ChildrenClass extends ParentClass{
  public static String name = "儿子";
  public int age = 15;
  public ChildrenClass(){
    System.out.println("子类构造函数");
  }
  {
    System.out.println("子类非静态代码块" + "---" + age);
  }

  static {
    System.out.println("子类静态代码块" + "---" + name);
  }

}

执行new ChildrenClass()结果:

结果分析:

父类静态代码块执行前,父类静态变量就已经执行了。

父类非静态代码块执行前,父类非静态变量就已经执行了。

上面结论子类同理。

代码块执行顺序总结:

父类的静态成员变量—->父类静态代码块—->子类静态成员变量—->子类静态代码块—>父类非静态变量—->父类非静态代码块—->父类构造方法—->子类非静态变量—->子类非静态代码块—->子类构造方法。

另外关于代码块的总结:

  1. 在类第一次调用时,静态代码块只执行这一次。
  2. 静态代码块和静态方法只能调用静态变量;
  3. 非静态代码块和非静态方法可以调用任何(静态+非静态)变量。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • java中静态代码块与构造方法的执行顺序判断
  • Java 普通代码块静态代码块执行顺序(实例讲解)
  • 举例说明Java中代码块的执行顺序
(0)

相关推荐

  • Java 普通代码块静态代码块执行顺序(实例讲解)

    如下所示: class B { public B() { super(); System.out.println("构造器B"); } { System.out.println("普通的代码块B"); } static{ System.out.println("静态代码块B"); } } public class ClassA extends B { public ClassA() { super(); System.out.println(&q

  • 举例说明Java中代码块的执行顺序

    前言     今天在看Android ContentProvider实现的时候,突然想到了Java类在new的过程中,静态域.静态块.非静态域.非静态块.构造函数的执行顺序问题.其实这是一个很经典的问题,非常考察对Java基础知识的掌握程度.很多面试过程中相信也有这样的问题,趁着周末有时间复习一下. 结论     这里先把整理好的结论抛给大家,然后我在写个程序来验证我们的结论.在Java类被new的过程中,执行顺序如下: 实现自身的静态属性和静态代码块.(根据代码出现的顺序决定谁先执行) 实现自

  • java中静态代码块与构造方法的执行顺序判断

    前言 静态代码优先于非静态的代码,是因为被static修饰的成员都是类成员,会随着JVM加载类的时候加载而执行,而没有被static修饰的成员也被称为实例成员,需要创建对象才会随之加载到堆内存.所以静态的会优先非静态的. 执行构造器(构造方法)的时候,在执行方法体之前存在隐式三步: 1,super语句,可能出现以下三种情况: 1)构造方法体的第一行是this语句,则不会执行隐式三步, 2)构造方法体的第一行是super语句,则调用相应的父类的构造方法, 3)构造方法体的第一行既不是this语句也

  • Android代码块执行顺序分析总结

    本文介绍了Android代码块执行顺序分析总结,分享给大家,具体如下: 子类.父类变量,代码块,以及构造方法的加载顺序,是我们在程序开发中时不时遇到的一个问题,也是比较容易混淆的. 基础准备: 变量: 成员变量(叫类变量.实例变量)和局部变量 方法: 成员方法和构造方法 代码块:普通代码块.构造代码块.静态代码块.同步代码块 测试的父类: public class ParentClass { public static String name = "爸爸"; public int ag

  • Kotlin构造函数与成员变量和init代码块执行顺序详细讲解

    目录 在Kotlin中经常看到主构造函数.成员变量.init代码块(也叫初始化器),它们的执行时机和顺序是什么样的呢?看一下官方的示例: class InitOrderDemo(name: String) { val firstProperty = "First property: $name".also(::println) init { println("First initializer block that prints ${name}") } val se

  • Kotlin字节码层探究构造函数与成员变量和init代码块执行顺序

    之前写了一篇文章,从Java语法的角度分析了Kotlin构造函数.成员变量初始化.init代码块三者的执行顺序: Kotlin构造函数与成员变量和init代码块执行顺序详细讲解 这次再从字节码的角度分析它们的执行顺序. 还是用之前那个例子: class InitOrderDemo(name: String) { val firstProperty = "First property: $name".also(::println) init { println("First i

  • sql和MySQL的语句执行顺序分析

    今天遇到一个问题就是mysql中insert into 和update以及delete语句中能使用as别名吗?目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序: sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序 (1)from (2) on (3) join (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用) (6) avg,sum....

  • java面试题之try中含return语句时代码的执行顺序详解

    前言 最近在刷java面试题偶然看到这类问题(try/finally中含有return时的执行顺序),觉得挺有意思于是小小的研究了一下,希望经过我添油加醋天马行空之后,能给你带来一定的帮助,下面来看看详细的介绍. 原题 try {} 里有一个return语句,那么紧跟在这个try后的finally {}里的代码会不会被执行?什么时候被执行?在return前还是后? 乍一看题目很简单嘛,java规范都说了,finally会在try代码块的return之前执行,你这文章写得没意义,不看了 你等等!(

  • Shell 管道及执行顺序分析

    1.基本概念 a.I/O重定向通常与 FD有关,shell的FD通常为10个,即 0-9: b.常用FD有3个,为0(stdin,标准输入).1(stdout,标准输出).2(stderr,标准错误输出),默认与keyboard.monitor.monitor有关: c.用 < 来改变读进的数据信道(stdin),使之从指定的档案读进: d.用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案: e.0 是 < 的默认值,因此 < 与 0<是一样

  • JS异步的执行顺序分析

    1.js的执行顺序,先同步后异步 2.异步中任务队列的执行顺序: 先微任务microtask队列,再宏任务macrotask队列 3.调用Promise 中的resolve,reject属于微任务队列,setTimeout属于宏任务队列 注意以上都是 队列,先进先出. 微任务包括 `process.nextTick` ,`promise` ,`MutationObserver`. 宏任务包括 `script` , `setTimeout` ,`setInterval` ,`setImmediat

  • 数据库中的SELECT语句逻辑执行顺序分析

    引言 这不是一个什么多深的技术问题,多么牛叉的编程能力.这跟一个人的开发能力也没有非常必然的直接关系,但是知道这些会对你的SQL编写,排忧及优化上会有很大的帮助.它不是一个复杂的知识点,但是一个非常基础的SQL根基.不了解这些,你一直用普通水泥盖房子:掌握这些,你是在用高等水泥盖房子. 然而,就是这么一个小小的知识点,大家可以去调查一下周围的同事朋友,没准你会得到一个"惊喜". 由于这篇文章是突然有感而写,下面随手编写的SQL语句没有经过测试. 看下面的几段SQL语句: 复制代码 代码

  • Jquery $.ajax函数外的一段代码的执行顺序

    今天遇到了一个很都疼的问题.在一个函数中调用了JQuery的异步函数$.ajax ,然后在$.ajax函数外之后又有一段Jquery 代码.每次都是在$.ajax之后的代码先执行. 在网上搜了许久 终于找到了原因.拿来和大家分享分享 免得以后忘记了. async:false var flag=true; //async:false代表只有在等待ajax执行完毕后才执行 $.ajax({url:"EmailCheck.ashx",async:false,data: {"emai

随机推荐