Static block initialization

前端 未结 3 1525
慢半拍i
慢半拍i 2021-01-19 05:19

This is a snippet of Java code:

static {        
    ture = 9;       
}
static int ture;
{ // instance block 
    System.out.println(\":\"+ture+\":\");              


        
3条回答
  •  旧时难觅i
    2021-01-19 05:44

    Regarding your first question, static blocks are indeed processed in the order in which they appear, but declarations are processed first, before the static blocks are. Declarations are processed as part of the preparation of the class (JLS §12.3.2), which occurs before initialization (JLS §12.4.2). For learning purposes, the entire JLS §12 may be useful, as well as JLS §8, particularly §8.6 and JLS §8.7. (Thank you to Ted Hopp and irreputable for calling out those sections.)

    There isn't enough information in your quoted code to answer your second question. (In any case, on SO it's best to ask one question per question.) But for instance:

    public class Foo {
        static {     
            ture = 9;   
        }
    
        static int ture;
    
        {   // instance block   
            System.out.println(":"+ture+":");
    
        }
    
        public static final void main(String[] args) {
            new Foo();
        }
    }
    

    ...only outputs :9: once, because only one instance has been created. It doesn't output it at all if you remove the new Foo(); line. If you're seeing :9: three times, then it would appear that you're creating three instances in code you haven't shown.

提交回复
热议问题