2016-04-25 27 views
0

下面的代碼是從https://github.com/NanoHttpd/nanohttpd/blob/master/webserver/src/main/java/fi/iki/elonen/SimpleWebServer.java此代碼是否將值傳遞給var?

代碼static {mimeTypes(); ...}是否將值傳遞給var LICENSE?這是有效的Java語法? var LICENSE何時會傳遞值?運行時還是編譯時?

/** 
* The distribution licence 
*/ 
private static final String LICENCE; 
static { 
    mimeTypes(); 
    String text; 
    try { 
     InputStream stream = SimpleWebServer.class.getResourceAsStream("/LICENSE.txt"); 
     ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
     byte[] buffer = new byte[1024]; 
     int count; 
     while ((count = stream.read(buffer)) >= 0) { 
      bytes.write(buffer, 0, count); 
     } 
     text = bytes.toString("UTF-8"); 
    } catch (Exception e) { 
     text = "unknown"; 
    } 
    LICENCE = text; 
} 

回答

1

static {是一個靜態初始化塊。該代碼在加載類時運行一次。

LICENSE設置爲text的值,其從bytes.toString()獲得。

它將在運行時設置。

0

因爲它會將值傳遞給var LICENCE。一旦該類被加載,該塊將被執行一次。

但是,DO NOT這樣的編碼。讀取/寫入不得在Main Thread中調用,否則不會得到ANR