2012-04-30 38 views
5

Tôi có đoạn mã sau đây được lấy từ một kỳ thi mock cho Sun Certified Java Programmer:Java Phạm vi tĩnh

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; 
     } 
} 

Bài kiểm tra sẽ yêu cầu bạn cho là kết quả của dòng này:

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

Câu trả lời là 3, nhưng tôi không hiểu tại sao lại là 3. Tôi có thể đến câu trả lời đó nếu tôi hoàn toàn bỏ qua:

 static 
     { 
      int x = 5; 
     } 

Câu hỏi của tôi là, ý nghĩa của đoạn mã trên là gì? Tại sao nó không thay đổi giá trị của biến 'x'?

Trả lời

4

đó là một khối khởi tạo tĩnh . nhưng điều đó không thực sự quan trọng trong ngữ cảnh này vì nó thay đổi giá trị của một biến cục bộ thành nó.

+2

@anonymous, nhờ tôi nhận được nó . Nó là phạm vi, vì vậy biến không tồn tại sau phạm vi. – czchlong

5

int x = 5; không được thực thi, nhưng x đây là biến cục bộ chứ không phải thành viên static int x. giá trị

0

x được thiết lập đến 5, nhưng chỉ trong bối cảnh khối tĩnh

static 
     { 
      int x = 5; 
     } 

x biến khai báo trong static int x,y; đã phạm vi lớp cấp, và bị ảnh hưởng bởi phần còn lại của mã mà tài liệu tham khảo nó.

1

nó là một khối tĩnh nên các biến bạn xác định không thể vượt quá phạm vi của {}. làm việc -in rằng giác quan cùng một cách như các phương pháp

1

Nó thay đổi giá trị của biến địa phương gọi là x, nhưng không phải là lĩnh vực thành viên tĩnh gọi x tức là nó chỉ là 0.