1. 程式人生 > >java 之final用法

java 之final用法

final 修飾符分兩種情況:
如果是修飾基本型別,如果整形,浮點型,如 final int i=100,這裡的i的值是不能變的
如果修飾的是物件,如final String s = "dddd";,這裡的引用是不能變的,比如你不能這樣寫:
s = "bbbbb";但物件的值可以改變
在java裡面,陣列是被看做是一個物件的,所以這個final不能阻止通過陣列下標來訪問物件進行值的改變。
1:修飾變數final修飾基本資料型別:一旦賦值,變數的值不能修改。即Java中的常數。例如:final int num = 10;//num在程式中不能再次被賦值,只能為10;final修飾物件:一旦賦值,則物件控制代碼不能再修改(指向其他物件)。但是物件的內容可以被修改。
所以將物件變成final看起來似乎不如將基本資料型別變成final那麼有用。2:修飾方法final方法不可以被複寫,可以被繼承。用final修飾方法可能出於兩方面的考慮:a:希望方法在程式中不被改寫。b:呼叫final方法時,程式採用的是“常規程式碼替換”,而不是跳轉。所以效能會提高。但是如果程式碼塊太大,則得不償失,所以一般final修飾的函式應該比較簡潔短小。ps:private方法是自動加final的; final類的方法是自動final的。3:修飾類final類是無法被任何人繼承的。那也就意味著此類在一個繼承樹中是一個葉子類,並且此類的設計已被認為很完美而不需要進行修改或擴充套件。對於final類中的成員,你可以定義其為final,也可以不是final。而對於方法,由於所屬類為final的關係,自然也就成了final型的。你也可
以明確的給final類中的方法加上一個final,但這顯然沒有意義。
new Thread(new Runnable() {
@Override
public void run() {
byte[] bytes = HttpUtils.getHttpResult(ViewpagerPath);
String json = new String(bytes,0,bytes.length);
final List<String> list = ParserJsonUtil.ParserHomeViewpagerJson(json);
final List<ImageView> ivlist =
new ArrayList<ImageView>();
handler.post(new Runnable() {
@Override
public void run() {
for (int i = 0; i<list.size(); i++){
//byte[] imagebytes = HttpUtils.getHttpResult(list.get(i));
//Bitmap bm = BitmapFactory.decodeByteArray(imagebytes,0,imagebytes.length);
ImageView iv = new ImageView(context);
//iv.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
// ViewGroup.LayoutParams.MATCH_PARENT));
Glide.with(context).load(list.get(i)).into(iv);
ivlist.add(iv);
}
}
});