java基礎題,面試超有用的題

2021-06-22 12:40:28 字數 1805 閱讀 8986

會了這道題,基礎隨便考。寫出輸出結果
class b

static int bj()

public b()

void nihao()

}public class c extends b

static int cj()

public c()

public c(int i,int j)

//重寫了父類方法

public void nihao()

public static void main(string args)

}

寫出後請對下面答案:

對了,那麼你是大神,請 return; else:

我們來分析下:

首先我們要知道,執行程式分兩階段,

1.類載入階段,此時static修飾的變數在此階段會初始化(賦值),只有類的靜態成員首次被呼叫的時候才會進行類載入(構造方法實際上也是靜態方法)順序:先父類再本類。這個階段只有一次。

(說明下:靜態變數在類載入階段已經初始化了,靜態的只有乙份,類載入也只有一次,所以類載入的時候載入靜態變數,good! sun-man!)

2.類初始化階段,。呼叫構造的時候執行,new多少個物件就存在多少次類初始化。

(說明下:每次new物件,都會進行類初始化,你new了多少物件,就有多少份非static的變數存在。)

從結果說起

「main--------」 之前就是類載入,我們知道我們的程式從main()開始執行,main()是靜態的,剛才說了「只有類的靜態成員首次被呼叫的時候才會進行類載入」,所以執行靜態main()之前,先載入其所在類class c,

首先類載入b ,「static修飾的變數在此階段會初始化」,static int j=bj(); bj()輸出

b 初始化 j=1  

類載入c, c的變數 static int j=bj(); bj()輸出  

c 初始化 j=2  

此時類載入完畢 開始

main----------

執行super(),即呼叫父類無引數構造,

b初始化 非static修飾的變數初始化:   int i = bi(); bi()執行 輸出

b 初始化 i=1

,執行構造方法  

b 無參構造

呼叫子類重寫的nihao(); 子類此時還沒有初始化,即非靜態的i還沒有賦值,所以只能輸出初始值0;j=2就不說了(static在類載入時候就已經初始化了,前面說了)

c 你好 i=0,j=2

super()完畢(父類初始化後),本類初始化  int i = ci();   

c 初始化 i=2

圖中的3此時就輸出了初始化後的值 

c 你好 i=2,j=2

this.i=i;this.j=j;後你好()輸出,不用說了:

c 你好 i=3,j=3

有深度,面試有用的題

1.jdk1.5新增的功能 2.字元流和位元組流的區別,使用場景,相關類 3.執行緒安全的概念,實現執行緒安全的幾種方法 4.抽象類和介面的區別,使用場景 5.hash演算法的實現原理,hashcode的實現原理 error和exception的區別,runtimeexception和非runtim...

Java面試真題

1.簡述抽象類和抽象方法的作用 分析 抽象類主要用來提供多個派生類可共享的基類的公共定義,他與非抽象類的主要區別如下 1 抽象類只能作為其他類的基類,不能直接例項化,對抽象類不能使用new操作符 2 抽象類中可以包含抽象成員,但非抽相類不可以 3 如果乙個非抽象類從抽象類中派生,則其必須通過覆蓋來實...

Spring面試基礎題

1.你有沒有用過spring的aop?是來幹嘛的?大概會怎麼使用?答 1 有 2 用來實現橫切關注點與他們所影響的物件之間的解耦 橫切關注點 橫切關注點是散布於應用中多處的功能。橫切關注點是與應用的業務邏輯相分離的,往往會直接嵌入到應用的業務邏輯之中 2.如果1個介面有2個不同的實現,那麼怎麼來au...