1. 程式人生 > >從c++到java 之三(inline)

從c++到java 之三(inline)

(4) 所有方法都是在類的主體定義的。所以用C++的眼光看,似乎所有函式都已嵌入,但實情並非如何(嵌入的問題在後面講述)。
(30) Java不存在“嵌入”(inline)方法。Java編譯器也許會自行決定嵌入一個方法,但我們對此沒有更多的控制權力。在Java中,可為一個方法使用final關鍵字,從而“建議”進行嵌入操作。然而,嵌入函式對於C++的編譯器來說也只是一種建議。

java的成員函式,無論是否內聯的,其定義都是在類定義的程式碼中,在c++裡面只有inline函式才是這樣。在java中,區別內聯與否就要靠final關鍵字了,加上了final關鍵字,就可以“建議”編譯器對此方法進行嵌入操作。究竟編譯器是否會真的嵌入,這取決於它的判斷,final關鍵字只是代表寫程式的人的一種建議,拿主意的還是編譯器。

嵌入操作是什麼樣的操作?

引數入棧,執行函式程式碼的副本。和c++是一樣的

final關鍵字:

1. final關鍵字加上以後,成員函式就被鎖定,不會在繼承中被過載。(這和“建議”嵌入操作是兩回事)

2. private成員函式隱含為final的,當然如果願意給private成員再加上final關鍵字也是允許的,只是不會有什麼額外的效果。

3. 因為private成員函式其實並不能作為繼承的介面,因此並不存在怎麼處置過載private final函式的問題。

4. final關鍵字加在了某類上,則意味著不允許此類被修改被繼承;加上了final的類,其中的函式成員也都隱含成為final的,無需再分別給函式加上final關鍵字了。