非靜態初始化塊與夠着函數的 執行順序

題目:

子類A繼承父類B,A a=new A();則父類B夠着函數、父類B靜態代碼塊、父類B非靜態代碼塊執行的先後順序是?

正確的執行順序是:杜磊B靜態代碼塊-》子類A靜態代碼塊-》父類B非靜態代碼塊-》父類B構造函數-》子類A非靜態代碼塊-》子類A構造函數

也就是説非靜態初始化塊的執行順序要在構造函數之前。

 1 class SuperClass{
 2     private static String str="Spuer Class Static Variable";
 3     static{
 4     System.out.println("Spuer Class Static Block:"+str);
 5     }
 6     public SuperClass(){
 7     System.out.println("Spuer class Constructor Menthod");
 8     }
 9     {
10     System.out.println("super class Block");
11     }
12
13 }
14
15 public class ObjectInit extends SuperClass{
16     private static String str="Class Static Variable";
17     static{
18     System.out.println{"Class Static Block:"+str};
19     }
20     public ObjectInit(){
21     System.out.println("constructor Menthod");
22     }
23     {
24     System.out.println("Class Block");
25     }
26     public static void main(String[] args){
27         @SuppressWarnings("unused")
28         ObjectInit a = new ObjectInit();
29     }
30 }

執行完之後可以看到順序如下:
Spuer Class Static Block:Spuer Class Static Variable
Class Static Block:Spuer Class Static Variable
Spuer Class Block
Spuer class Constructor Menthod
Class Block
Constructor Menthod
时间: 2024-10-11 17:34:07

非靜態初始化塊與夠着函數的 執行順序的相关文章

對比:莫比烏斯反演與歐拉函數

最近題讓我非常困惑,貌似我現在已經完全分不清楚哪些題用莫比烏斯反演,哪些用歐拉函數. 下面簡單總結一下,莫比烏斯反演處理的是 求segma(gcd(x,y)) 1<=x<=n,1<=y<=m (見<能量項鍊>) gcd(x,y) = k   1<=x<=n 1<=y<=m  求x,y對數 (見<bzoj 2301  problem b>) 莫比烏斯反演原來是解決以上問題2的,大體思路是 設F(a,b,k)表示1<=x<=a

Java显示的静态初始化和非静态实例初始化

静态初始化只执行一次,实例初始化每次创建实例都会执行. 1.创建一个Spoon类: package com.samsung.wx; public class Spoon { static { System.out.println("显示的静态初始化"); } { System.out.println("非静态实例初始化"); } public void f1(int i) { System.out.println(i); } } 2.测试代码: package co

c++11之二: 非静态成员变量初始化

在C++11中,允许非静态成员变量的初始化有多种形式:初始化列表; 使用等号=或花括号{}进行就地的初始化. 可以为同一成员变量既声明就地的列表初始化,又在初始化列表中进行初始化,只不过初始化列表总是看起来“后作用于”非静态成员. 也就是说,初始化列表的效果总是优先于就地初始化的. #include <iostream> 2 using namespace std; 3 class CBase{ 4 public: 5 CBase(){cout<<"mem default

Unity strip engine code 遇到執行不能之問題與解決

遊戲發布在 WebGL 平台發現檔案還是太大,因此在 IL2CPP 的環境下,開啟 Strip engine code 編譯功能,嘗試看看能不能減少一些檔案容量. 但由於我們另外有載入 Scene stream assetbundles 的機制,因此遇到開啟 Strip engine code 後,無法正常執行的情形. 經過 Kelvin Lo 技術支援以及時間測試後,終究能夠正常執行,留下整件事情的經過.技術問題以及相關解法支援等等資料. 測試環境 Unity5.5.1f1,Windows 1

Python 函數與常用模組 - 生成器並行運算

目前我們已經大致上都了解生成器了,但要怎麼實際應用呢?!接下來就要舉個例子 yield 保存了這個函數的中斷狀態,返回當前這個狀態的值,並且把函數停在這,想什麼時候回來執行就什麼時候回來執行. 通過yield實現單綫程的情況下,實現並發運算的效果 #!/usr/bin/env python3 # -*- coding:utf-8 -*- def consumer(name): print("%s 準備吃包子啦!" %name) while True: baozi = yield # b

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. 您可以假设除了数字 0 之外,这两个数都不会以 0 开头. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807 来源:力扣(LeetCode)链接:https://leetcode-c

非静态实例初始化

Java中也有被称为实例初始化的类似语法,用来初始化每一个对象的非静态变量.例如: //:  initialization/Mugs.java //  Java "Instance Initialization." class Mug { Mug(int marker) { System.out.println("Mug(" + marker + ")"); } void f(int marker) { System.out.println(&q

Linux主機靜態IP配置方式

CentOS 5.6.7: ifcfg家族:(直接生效,重開機後失效) ifconfig:配置ip.netmask route:配置路由 netstat:狀態及統計數據查看 iproute2家族:(直接生效,重開機後失效) ip addr:配置ip.netmask ip link:配置網卡接口 ip route:配置路由 ss:狀態及統計數據查看(統計數量很多的時候效能比netstat好很多) CentOS 7:(將配置寫到配置文件,不會立即生效) nm(Network Manager)家族 n

解决非工程化项目初始化页面闪动问题

原文地址 vue页面在加载的时候闪烁花括号{}},v-cloak指令和css规则如[v-cloak]{display:none}一起用时,这个指令可以隐藏未编译的Mustache标签直到实例准备完毕. /*css样式*/ [v-cloak] { display: none; } <!--html代码--> <div id="app" v-cloak> <ul> <li v-for="item in tabs">{{it