2012-04-30 2 views
5

У меня есть следующий фрагмент кода, который взят из макета экзамена Sun Certified Java Programmer:Java статические обзорное

public class Static 
{ 
     static 
     { 
      int x = 5; 
     } 

     static int x,y; 
     public static void main(String args[]) 
     { 
      x--; myMethod(); 
      System.out.println(x + y + ++x); 
     } 

     public static void myMethod() 
     { 
      y = x++ + ++x; 
     } 
} 

Тест просит Вас за результат этой линии:

System.out.println(x + y + ++x); 

ответ 3, но я не совсем понимаю, почему это 3. Я могу прийти в этот ответ, если я полностью игнорировать:

 static 
     { 
      int x = 5; 
     } 

Мой вопрос: в чем смысл приведенного выше фрагмента кода? Почему это не меняет значение переменной x?

ответ

4

это статический блок инициализации. но это не имеет особого значения в этом контексте, поскольку оно изменяет значение переменной, локальной для него.

+2

@anonymous, спасибо я понял , Он ограничен, поэтому переменная не существует после области действия. – czchlong

5

int x = 5; действительно выполнен, но x здесь является локальной переменной, а не членом static int x. Значение

0

крестиков установлен на 5, но только в контексте статического блока

static 
     { 
      int x = 5; 
     } 

переменной х, объявленной в static int x,y; имеет объем на уровне класса, и зависит от остальной части кода, что ссылки Это.

1

это статический блок, поэтому переменные, которые вы определяете, не могут выходить за рамки { и }. работает -in, что чувственное так же, как методы

1

Он изменяет значение локальной переменной с именем x, но не статическое поле элемент называется x т.е. просто 0.