【考題題幹】在下面程式標明的位置處插入哪條語句會導致編譯錯誤?
public class finaluse ;
final int n = ;
use(x, y, z, n);
}static void use(final int x, int y, final int z, int n)
}請考慮下面的選項:
a.x++
b.y++
c.y=x
d.z[0]++
e.n[0]++
f.z=n
【試題分析】宣告形參的時候可以在方法呼叫的引數呼叫之前加上關鍵字 final。 final 引數也可以叫
做空白最終變數,也可以當作常量。即在對其賦值之前(例如方法呼叫之前),該變數為空(為初始化),
賦值之後,在該變數的生存週期內只能呼叫再也
不能改變變數的值。
final 變數只可以被賦值一次。在方
法呼叫時,final 形式引數被賦予實際引數的值。在方法內部,不能對 final 引數進行重新賦值或者是修
改。在 use 方法中,x 是 final 型別的,因此 a 選項中 x++表示是可以改變 x 的值的,所以 a 會導致編
譯錯誤。y,n[0]是 int 變數,所以 y, n[0]值是可以變化的,因此插入 b 和 e 選項都會編譯通過的。c 選
項是把 x 的值賦給 y,改變是 y 的內容,不會改變 x 的值,所以插入 c 選項會編譯通過的。在 d 選項中,
由於 z 是個 int 型陣列,它是屬於復合型別,在進行值傳遞的時候,傳給形參的是位址值,而不是內容,
因此 final int z 就表示 z 陣列不能在指向其他的陣列物件,但是 z 陣列中的內容是可以改變的,因此 z
[0]++表示的是內容上的改變,所以是沒有錯誤的,可以編譯通過的。f 選項正好與 d 選項相反,同理,
f 就是錯誤的。
【參***】af
關於引數的傳遞
解釋引數在方法中的傳遞過程,並通過記憶體解析圖的 方式,描繪出方法執行時記憶體的變化。可以使用今天課堂 來解釋 public class demo11 public static void main string args 此方法最後的輸出是 fun1 i 15 fun1 j 25 main i 1...
ESP,EBP 彙編關於引數的傳遞
參考了羅雲斌的一篇文章,很清晰 子程式如何訪問引數 因為預設對堆疊操作的暫存器有 esp 和 ebp,而 esp是堆疊指標,無法暫借使用,所以一般使用 ebp 來訪問堆疊,假定在乙個呼叫中有兩個引數,而且在 push 第乙個引數前的堆疊指標 esp 為 x,那麼壓入兩個引數後的 esp 為 x 8,...
關於指標傳遞引數的理解
學習c語言至今,已經到了乙個瓶頸,難度大多來自於指標和指標的引數傳遞。指標分為一維指標 多維指標 函式指標 指標陣列 陣列指標等等 其中主要我們要了解的是一維指標和指標陣列 陣列指標。include include void allocate memory for two array int plo...