2016-04-25 28 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