亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java 程序初始化順序

 更新時間:2022年01月13日 10:31:01   作者:.小柱.  
這篇文章主要介紹了Java 程序初始化順序,在Java語言中,當實例化對象時,對象所在類的所有成員變量首先要進行初始化,只有當所有的類成員完成了初始化之后,才會調(diào)用對象所在類的構(gòu)造函數(shù)創(chuàng)建對象,需要的朋友可以參考一下

Java程序的初始化一般遵循三個原則(優(yōu)先級依次遞減):

  • 1,靜態(tài)對象(變量)優(yōu)先于非靜態(tài)對象(變量)初始化,其中,靜態(tài)對象(變量)只初始化一次,而非靜態(tài)對象(變量)可能會初始化很多次。
  • 2,父類優(yōu)先于子類進行初始化。
  • 3,按照成員變量的定義順序進行初始化。即使變量定義散布于方法定義之中,它們依然在任何方法被調(diào)用之前先初始化。

Java程序初始化工作可以在許多不同的代碼塊中完成(例如靜態(tài)代碼塊,構(gòu)造函數(shù)等),它們的執(zhí)行順序如下:

  1. 父類靜態(tài)變量
  2. 父類靜態(tài)代碼塊
  3. 子類靜態(tài)變量
  4. 子類靜態(tài)代碼塊
  5. 父類非靜態(tài)變量
  6. 父類非靜態(tài)代碼塊
  7. 父類構(gòu)造函數(shù)
  8. 子類非靜態(tài)變量
  9. 子類非靜態(tài)代碼塊
  10. 子類構(gòu)造函數(shù)。

下面給出一個不同模塊初始化時執(zhí)行順序的一個例子:

class Base{
? ? ? ? ? ?static {
? ? ? ? ? ? ? ? System.out.println("Base static block");

? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ?public Base(){
? ? ? ? ? ?System.out.println("Base constructor");

? ? ? ? ? ?}

?public class Derived extends Base{
? ? ? ? ? ?static{
? ? ? ? ? System.out.println("Drevied static block");

? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? {
? ? ? ? ? System.out.println("Drevied ?block");

? ? ? ? ? ?}

?public ?Derived(){
? ? ? ? ? System.out.println("Drevied ?constructor");

? ? ? ? ? }

public static void main(String args[]){
? ? ? ? ? ? ? ? new Derived();

? ? ? ? ? }

? ? ? ? ? }

先自己利用上面給出的執(zhí)行順序進行判斷:

程序的運行結(jié)果為:

Base static block

Derived static block

Base block

Base constructor

Derived block

Derived constructor

怎么樣,運行結(jié)果是否與你的結(jié)果一致呢?

最后,我們再來看一道面試真題:

下列代碼運行結(jié)果是什么?

? class B extends Object{
? ? ? ? ? static{
? ? ? ? ? System.out.println("Load B1");

? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ?public ?B(){
? ? ? ? ? System.out.println("Create B");

? ? ? ? ? }

? ? ? ? ? ?static{
? ? ? ? ? System.out.println("Load B2");

? ? ? ? ? ?}

? ? ? ? ? ?}

class A extends B{
? ? ? ? ? static{
? ? ? ? ? System.out.println("Load A");

? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ?public ?A(){
? ? ? ? ? System.out.println("Create A");

? ? ? ? ? }

? ? ? ? ? }

? ? ? ? ? public class Testclass{
? ? ? ? ? public static void main(String[ ] args){
? ? ? ? ? ? ? ? ? ? ? ? new A();

? ? ? ? ? }

? ? ? ? ? }

運行結(jié)果是:

Load B1      LoadB2      Load A     Create B     Create A

在面試中出現(xiàn)的執(zhí)行順序的問題,無非也就是把上面的代碼再換幾個形式,但,萬變不離其宗,只要掌握它的執(zhí)行順序的規(guī)律,所有問題就都可以迎刃而解了

到此這篇關(guān)于Java 程序初始化順序的文章就介紹到這了,更多相關(guān)Java程序初始化順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論