首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑

变种面试题 原因: 冷知识 case4:子类和父类有`同名同类型`的`静态`变量的时候 case5:静态代码块属于类的,并且优先于main方法执行(有难度) 注解对执行顺序的影响 继续补充:子类默认调用...静态变量从上到下初始化,而st变量还没初始化完呢,所以b此时值为0 执行紧跟着的静态代码块。...类构造器:编译器收集所有静态语句块和类变量的赋值语句,按语句在源码中的**顺序(请注意这三者是有序的)**合并生成类构造器 因此现在执行:st = new StaticTest().此时我们发现,就会进行对象的初始化了...(看到没,这个时候b变量的赋值语句还没有执行哦~~~) 而对象初始化的顺序为:成员变量 -> 普通代码块 -> 构造函数,因此这一波过后:a=110了。...,所以会先执行此类的静态变量 + 静态代码块。

97750
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Python】循环语句 ⑥ ( 变量作用域 | for 循环临时变量访问 | 分析在 for 循环外部访问临时变量的问题 | 在 for 循环外部访问临时变量的正确方式 )

    for 循环的临时变量 在 循环体外部也可以访问 , 但是不建议这么做 , 代码不够规范 ; 如果需要在外部访问 for 循环的临时变量 , 建议将该 临时变量 预定义在 for 循环的外部 , 然后在后续的所有代码中可以访问该...临时变量 ; 一、变量作用域 1、for 循环临时变量访问 下面的 for 循环中 , 临时变量 i 变量 的作用域范围 , 仅限于 for 循环语句内部 , 但是在 for 循环外部可以访问到临时变量...for 循环中的临时变量 i # 但是此处可以访问到 临时变量 i print(i) 理论上说 , for 循环中的 临时变量 是 临时的 , 只在 for 循环内部生效 , 在 for 循环的外部不应该生效...; 但是 如果在 for 循环外部 访问该临时变量 i 是可以访问的 , 上述代码的执行结果如下 : 0 1 2 2 2、分析在 for 循环外部访问临时变量的问题 下面分析一下上述 在 for 循环外部访问...""" # 先定义临时变量 # 在后面的代码中 # 不管是 for 循环内部 , 还是 for 循环外部 # 都可以使用该 变量 i i = 0 # i 变量是 for 循环的 临时变量, 仅在

    69440

    C++extern声明的外部变量 | 使用extern输出

    C++外部变量 上一节有读者咨询extern是什么,这节主要用来解释一下extern在C++中的用法,外部变量在函数的外部定义的,它的作用域为从变量的定义处开始,到本程序文件的末尾。...C++文件内声明全局变量  如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。...如果在定义点之前的函数想引用该全局变量,则应该在引用之前用关键字extern,对该变量作外部变量声明,表示该变量是一个将在下面定义的全局变量。...C++多文件程序声明外部变量 如果一个程序包含两个文件,在两个文件中都要用到同一个外部变量,不能分别在两个文件中各自定义一个外部变量。...正确的做法是:在任一文件中定义外部变量,而在另一文件中用extern对该变量作外部变量声明。

    2.7K2828

    Python进阶——修改闭包内使用的外部变量

    修改闭包内使用的外部变量 修改闭包内使用的外部变量的错误示例: # 定义一个外部函数 def func_out(num1): # 定义一个内部函数 def func_inner(num2...): # 这里本意想要修改外部num1的值,实际上是在内部函数定义了一个局部变量num1 num1 = 10 # 内部函数使用了外部函数的变量(num1)...,这里返回的内部函数就是闭包 return func_inner # 创建闭包实例 f = func_out(1) # 执行闭包 f(2) 修改闭包内使用的外部变量的错误示例: # 定义一个外部函数...num1 nonlocal num1 # 告诉解释器,此处使用的是 外部变量a # 修改外部变量num1 num1 = 10 # 内部函数使用了外部函数的变量...小结 修改闭包内使用的外部函数变量使用 nonlocal 关键字来完成。

    29.9K55

    利用Clang探究block捕获外部变量的本质(一)

    前言 说到外部变量,C语言中变量一般可以分为5种: 自动变量 函数参数 静态变量(指局部静态变量) 静态全局变量 全局变量 我们知道,Objective-C的block会捕获自动变量。...本篇文章主要探究block捕获局部变量的底层原理。除去函数参数外,关于block和静态变量、全局变量、静态全局变量的关系将在后面的文章展开讨论。...-- Program ended with exit code: 0--> } 这里有两个疑问: block是如何实现捕获block外部局部变量的?...0将__main_block_impl_0的成员变量val保存的值取出后赋值给另一个临时变量val。...这样就实现了block捕获外部变量。因为block在函数内部又创建了另一个临时变量val,这也验证了,为什么在block外和block内打印的val的内存地址不同。

    7.9K30

    内部类只能访问final的局部变量_java内部类引用外部变量

    因为在JDK8之前,如果我们在匿名内部类中需要访问局部变量,那么这个局部变量必须用final修饰符修饰。这里所说的匿名内部类指的是在外部类的成员方法中定义的内部类。...,是因为在底层将这个局部变量的值传入到了匿名内部类中,并且以匿名内部类的成员变量的形式存在,这个值的传递过程是通过匿名内部类的构造器完成的。...这里所说的数据一致性,对引用变量来说是引用地址的一致性,对基本类型来说就是值的一致性。 这里我插一点,final修饰符对变量来说,深层次的理解就是保障变量值的一致性。为什么这么说呢?...这里到了问题的核心了,如果局部变量发生变化后,匿名内部类是不知道的(因为他只是拷贝了局不变量的值,并不是直接使用的局部变量)。...这里举个栗子:原先局部变量指向的是对象A,在创建匿名内部类后,匿名内部类中的成员变量也指向A对象。但过了一段时间局部变量的值指向另外一个B对象,但此时匿名内部类中还是指向原先的A对象。

    94720

    Java中类的初始化过程:(静态成员变量,静态代码块,普通成员变量,代码块初始化顺序)

    初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 3.其次,...初始化父类的普通成员变量和代码块,在执行父类的构造方法; 4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法; 类的加载顺序: 父类静态成员变量、静态块>子类静态成员变量、 静态块>...父类普通成员变量、非静态块>父类构造函数>子类 普通成员变量、非静态块>子类构造函数 静态代码块:随着类的加载而执行,而且只执行一次 非静态代码块:每创建一个对象,就执行一次非静态代码块 关于各个成员简介

    50330

    static声明静态外部类_static静态变量的理解

    二是在成员的引用上,有比较大的限制。一般的非静态内部类,可以随意的访问外部类中的成员变量与成员方法。即使这些成员方法被修饰为private(私有的成员变量或者方法),其非静态内部类都可以随意的访问。...则是非静态内部类的特权。因为在其他类中是无法访问被定义为私有的成员变量或则方法。但是如果一个内部类被定义为静态的,那么在银用外部类的成员方法或则成员变量的时候,就会有诸多的限制。...如不能够从静态内部类的对象中访问外部类的非静态成员(包括成员变量与成员方法)。这是什么意思呢?如果在外部类中定义了两个变量,一个是非静态的变量,一个是静态的变量。...那么在静态内部类中,无论在成员方法内部还是在其他地方,都只能够引用外部类中的静态的变量,而不能够访问非静态的变量。...如是否可以创建静态的成员方法与成员变量(静态内部类可以创建静态的成员而非静态的内部类不可以)、对于访问外部类的成员的限制(静态内部类只可以访问外部类中的静态成员变量与成员方法而非静态的内部类即可以访问静态的也可以访问非静态的外部类成员方法与成员变量

    66910

    有趣的 Python 特性 1 | 是谁吃掉了我的外部变量?

    和 Python3 中的异同,希望大家能从学习的过程中体会到真正的乐趣。...被吃掉的外部变量 首先我们先来看这么一个例子: e = 429 try: raise Exception() except Exception as e: pass print(e)...这也变相的告诉我们,如果想要在 except 后面引用 e,必须将它先赋值给其它变量。 这样看来,是变量 e 执行了 except 子句而被删除,但是为什么 e 会去执行 except 子句呢?...答案是否定的,其实这个是因为子句在 Python 中没有独立的作用域,所以上述示例中的所有内容都处于同一个作用域里,所以变量 e 会因为执行了 except 子句而被删除。...而在 Python2 中,Exception() 实例被赋值给了变量 e,因为正常的 Exception() 示例打印出来就是空,所有当我们尝试打印结果的时候,它的输出为空。

    45110

    2017年区块链当中的黑客大事件

    总之,这起事件显示出ICO所经历的的成长痛苦,尽管这种模式可以筹集大量资金,但是仍旧需要面对一种早期技术的复杂性。...Parity钱包冻结 也许这是今年最大的安全事件,但这起事故也是本文列表中唯一没有恶意行为者存在的。...作为以太坊使用最广泛的两个钱包之一,这些事件让人质疑以太坊网络的中央基础设施组成究竟是什么,这促使一些人对该公司的产品表示怀疑,并再次对以太坊本身提出批评。...Tether代币攻击 另一起因争议尚未解决而引人注目的事件是,在11月底,超过三千万美元的与美元挂钩的加密货币Tether被盗。...当时,Tether声称大约3100万美元的代币是从他们的虚拟保险库中提取的,并被发送到一个未知的比特币地址。

    1.2K100

    const修饰符的使用(修饰结构体指针,引用外部的const 变量)

    const修饰符的使用 //const修饰变量为只读 const int a = 10; a = 20;//是错误的赋值 //指针变量 指针指向的内存 两个不同的概念 char buf[] =..."helloworld"; //从左往右看,跳过类型,看修饰那个字符 //如果是*,说明指针指向的内存不能改变 //如果是指针变量,说明指针的指向不能改变,指针的值不能修改 const char *p...是对指针指向的内存空间的内容进行封锁。 const封锁的是指针变量,不能修改其指向,但是可以修改指针指向内存当中的内容。...结构体指针指向的内容可以修改 p->a = 10是可以修改的 } void fun4(const my_struct * const p) { //结构体指针的指向不可以修改 //结构体指针指向内存当中的内容也不可以修改...} 如何引用其他.c文件中的const变量 extern const int a;//注意,不能再进行赋值,只能声明 printf("a = %d\n",a);

    55010

    在Java内部类中使用外部类的成员方法以及成员变量

    作为成员内部类,可以随意引用外部类中的成员变量与成员方法。那么在成员内部类中定义的成员变量,外部类是否也可以随意访问呢?答案是否定的。...在外部类和成员内部类中,都可以定义变量。成员内部类可以随意访问外部类中的变量,而外部类不能够直接访问内部类中的变量,只有通过使用内部类对象来引用内部类的成员变量。...不过需要注意的是,在外部类中定义的变量与内部类中定义的变量名字可以相同。也就是说,在外部类中可以定义一个变量i,在内部类中也可以定义一个变量i。此时新的问题就出来了。...由于在内部类中可以随意访问外部类中成员方法与成员变量。但是此时成员内部类与外部类的变量名相同,那么如果要在内部类使用这个变量i,编译器怎么知道现在需要调用外部类的变量i,还是内部类的变量i呢? ...而通过使用student.this.i的形式调用变量时表示此时引用的是外部类的成员变量。也就是说,如果内部类中引用外部类中同名的成员,需要通过外部类迷名字。this.外部类成员名字的方式加以引用。

    2.9K10

    【小家java】匿名内部类为什么只能使用外部final的变量

    1、概述 各位都知道,匿名内部类在使用的时候需要使用外部的变量,该变量必须被final修饰,否则编译报错。实际使用中,有时候确实还给我们造成了不少麻烦,可大家可曾想过这是为什么吗?...因为Java通过类的封装规范了类与类之间的访问权限,而内部类却打破了这种规范,它可以直接访问自身所在的外部类里私有成员,而且自身还可以创建相同的成员,从作用域角度看,内部类的新成员修改了什么值,外部方法也是不知道...,因为程序的运行由外而内的,所以外部根本无法确定内部这时到底有没有这个东西。...综上所述,选择final来修饰外部方法的成员,让其引用地址保持不变、值也不能被改变保证了外部类的稳定性。...第一种情况是在静态代码块中初始化。(当然这要求成员变量也是静态的) 第二种情况是在构造方法中进行初始化。

    92340
    领券