1. 程式人生 > 實用技巧 >java線上程和內部類中的使用final關鍵字

java線上程和內部類中的使用final關鍵字

1.執行緒內只能訪問執行緒外的final變數

2.區域性內部類

  內部類訪問了方法中的final剋行的變數name

public class LocalInnerClass {  
    private static Test monitor = new Test();     
    private int count = 0; 
    Counter getCounter(final String name) { 
     // A local inner class:
         class LocalCounter implements Counter { 
             
public LocalCounter() { // Local inner class can have a constructor System.out.println("LocalCounter()"); } public int next() { System.out.print(name); // Access local final return count++; } }
return new LocalCounter(); } }

3.匿名內部類引數必須為final型別

  匿名內部內訪問了外面的final int dynaimcUserId ,final int dynamicId,final String commentDataUrl

   private void sendRequestWithHttpURLConnectionHaveParam(final int dynaimcUserId ,final int dynamicId,final String commentDataUrl) {
        Thread t = new
Thread(new Runnable() { @Override public void run() { try { OkHttpClient client = new OkHttpClient(); RequestBody requestBody = new FormBody.Builder().add("userId",dynaimcUserId+"").add("dynamicId",dynamicId+"").build();// Request request = new Request.Builder().url(commentDataUrl).post(requestBody).build(); Response response = client.newCall(request).execute(); String responseData = response.body().string(); Log.d(TAG, "run: "+responseData); // parseJSONWithJSONObject(responseData); // responseData=new String(responseData.getBytes("iso8859-1"),"utf-8"); Message message=Message.obtain(handler,1,2,3,responseData); message.sendToTarget(); testJson=responseData; Log.d(TAG, "run:testJson "+testJson); // initView(); } catch (IOException e) { e.printStackTrace(); } } }); t.start(); try { t.join(); } catch (InterruptedException e) { e.printStackTrace(); } }