【考題題幹】在下面程式標明的位置處插入哪條語句會導致編譯錯誤?
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 an
public static void method1(final int j)
**片
.
public
classan;
final int[
] n =
;use
(x, y, z, n);}
static
void
use(final int x, int y, final int[
] z, int[
] n)
final關鍵詞的使用
1.final修飾變數的時候 表示這個變數的值不可變,只能在初始化的時候對它進行賦值 如果是類的成員變數也可以在建構函式中對它進行賦值 賦值以後變數的值不能改變。2.final修飾物件的引用 這個時候引用名的引用物件是不能夠改變的,但是物件中的內容是可以改變的。舉個例子 在上面的例子中,如果執行st...
函式傳值傳參
var obj function x 內部宣告的變數不會影響外面的obj物件 console.log obj.n 2 obj 傳入的是乙個指標 值 x是obj指標的副本,兩者都指向同乙個物件 console.log obj.n 3 例子二 var x 1 function a x a x conso...
C 引用方式傳參,傳值方式傳參( )
1 引用方式傳參 引用相當於是外部變數的別名,實際操作的就是該變數,即在函式內對該變數進行修改的話,在外部該變數也會相應被修改。外部變數的值也會被修改 void changeref int ref 2 傳值方式傳參 實際上是複製了乙個外部變數的副本進入函式中,在函式內操作的為該副本,對該變數的修改並...