寫出程式的輸出結果:
public class a
public void fun2(a a) }
public class b : a
public static void main() }
結果是2,5,1,6。
這是乙個很古老的面試題,我當時在一家公司面試時也遇到了這個問題,當時我的結果是1,5,2,5。也就是最後乙個錯了,就這個問題
引起了我的思考,我覺得我在寫程式時忽視了乙個很重要的問題。那就是單步除錯的作用。
其實我們應該在寫程式時經常用一下單步除錯
,這樣能讓我們能更好地理解程式的執行過程,這樣就不會像很多網友說的做這個題做的頭疼。那麼現在來分析一下這個題目吧,
程式首先從main()執行;——>b b = new b();如果b中有建構函式就再去執行它。——>a a = new a();如果a
中有建構函式就再去執行它。——>a.fun2(b);到這時a中的public void fun2(a a)把b傳進去就得到b.fun1(1);fun1(5);程式就再跳到
b中public override void fun1(int i)得第乙個結果2,再執行fun1(5);跳到a中public virtual void fun1(int i)得第二個結果5
那麼a.fun2(b);就執行完了。再執行b.fun2(a);程式又會在基類中找到public void fun2(a a),得到a.fun1(1);fun1(5);
就會執行a.fun1(1)得到結果1,最後一點要注意,我先也錯過,這裡main()中是b.fun2(a);所以會跳到b中執行public override void fun1(int i)
得到結果6。所以結果是:2,5,1,6
所以我們在寫程式時不要想當然認為程式會怎麼執行,我們分析程式結果時一定要了解程式的執行過程,這樣就灰覺得很簡單
那麼我們不妨在寫完每乙個程式後都看看它的執行過程。這樣我們能更清楚地了解程式。
留個問題給大家吧:
public abstract class a
public virtual void fun() }
public class b: a
public new void fun()
public static void main() }
看看程式時怎麼執行的,是先呼叫a的建構函式還是b的呢?
乙個面試題
題目是 假設乙個 搜尋引擎收錄了2 24首歌曲,並記錄了可收聽這些歌曲的2 30條url,但每首歌的url不超過2 10個。系統會定期檢查這些url,如果乙個url不可用則不出現在搜尋結果中。現在歌曲名和url分別通過整型的song id和url id唯一確定。對該系統有如下需求 1 通過song ...
乙個面試題
在不超過最右邊的數量的情況下任意組合,要求加起來不超過20280這個數字,但達成最接近的情況,現有一種方法為 1290 4 2990 5,差170,有沒有更接近20280的答案 資料如下 4900 13790 22990 5 意思是不能超過5次,但可以使用1次,2次,3次,4次,5次。2390 31...
乙個面試題
res fromkeys name password age print res print res print id res name id res password res name 666 print res 輸出 57496360 57496360 fromkeys 建立字典時,字典中所有的...