19
A
回答
23
final
變量可以包含任何值,但一旦賦值,最終變量就不能被重新分配給任何其他值。
例如:
main() {
final msg = 'hello';
msg = 'not allowed'; // **ERROR**, program won't compile
}
final
也可以在一個對象用於實例變量。在構造函數體運行之前,必須設置類的最後一個字段。最終字段將爲而不是有一個爲其創建的隱式setter,因爲您無法在最終變量上設置新值。
class Point {
final num x, y;
Point(this.x, this.y);
}
main() {
var p = new Point(1, 1);
print(p.x); // 1
p.x = 2; // WARNING, no such method
}
重要的是要認識到,final
影響變量是很重要的,但不是通過對象指向的變量。也就是,final
不會使變量的對象不可變。
例如:
class Address {
String city;
String state;
Address(this.city, this.state);
}
main() {
final address = new Address("anytown", "hi");
address.city = 'waikiki';
print(address.city); // waikiki
}
在上面的例子中,變量address
被標記爲最終,所以它將總是指向由new Address("anytown", "hi")
構造實例化的對象。但是,對象本身的狀態是可變的,所以改變城市是完全有效的。 final
阻止的唯一的事情是重新分配address
變量。
相關問題
- 1. VB.NET:'friend'修飾符做了什麼?
- 2. Swing和最終修飾符
- 3. 關於java最終訪問修飾符
- 4. 方法和最終修飾符
- 5. 訪問修飾符「protected private」在visual C++中做什麼?
- 6. 修改類內的最終場在DART
- 7. >>操作符/操作數/修飾符是做什麼的?
- 8. 未知修飾符'/'在...?它是什麼?
- 9. @Component裝飾器到底做了什麼?
- 10. html_entity_decode上的ENT_HTML5,ENT_HTML401,...修飾符是做什麼的?
- 11. 「新」修飾符做什麼以使b.M(); a.M(); 「B」?
- 12. 爲什麼「L」和「LL」修飾符做同樣的printf(C)
- 13. 這個版本修飾符是做什麼的?
- 14. 變量'最終'修飾符丟失在字節碼?
- 15. 在c#中^字符做了什麼?
- 16. ∴字符在bash shell中做了什麼?
- 17. '+ ='操作符在Javascript中做了什麼?
- 18. @字符在jQuery中做了什麼?
- 19. @字符在p中做了什麼
- 20. \符號在C++中做了什麼?
- 21. &符(「&」)在put語句中做了什麼?
- 22. '|| ='操作符在ruby中做了什麼?
- 23. Andengine修飾符,在路徑中的每一步都做些什麼?
- 24. 什麼是訪問修飾符
- 25. 什麼是正確的修飾符?
- 26. 訪問修飾符 - 目的是什麼?
- 27. 「+」在CSS中做了什麼?
- 28. %%在printf中做了什麼?
- 29. *在CSS中做了什麼?
- 30. 帶靜態訪問修飾符的最終變量
「在構造函數體運行之前,必須設置類的最後一個字段。」 - 這是我投擲得最多的部分。儘管我在構造函數中設置了最終變量,但它並沒有出現,這是我得到錯誤的原因。 –
@KevinSheehan我也是通過在構造函數之前設置最後一個字段而拋棄它的。對於那些試圖在構造函數級別執行此操作的人,如果state是最終變量,則可以這樣設置:Address(this.city):state =「Hawaii」; – djm