2013-06-13 40 views
9

Trong một ví dụ về mã android được đưa ra trong một cuốn sách liên quan đến thanh hành động, mẫu nhất định là như sau:bằng cách sử dụng {} sau dấu chấm phẩy

MenuItem menu1 = menu.add(0, 0, 0, "Item 1"); 
{ 
    menu1.setIcon(R.drawable.ic_launcher); 
    menu1.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
} 

thế nào là sử dụng dấu ngoặc nhọn sau một dấu chấm phẩy có thể? Có một số khái niệm rõ ràng mà tôi không hiểu ngay tại đây.

+3

theo như tôi biết điều này giống như khi bạn rời khỏi {}. menu.add là một lệnh, menu.setIcon là next, menu.setShowAsAction tiếp theo. Niềng răng có thể được sử dụng để khai báo các khối mã. – damian

+0

Chỉ một bản sao của * nếu bạn biết * đó là một khối mã ẩn danh. – Raedwald

Trả lời

17

Chúng hoàn toàn không bắt buộc trong trường hợp này và hoàn toàn không có tác dụng phụ. Trong ví dụ của bạn, nó duy nhất phục vụ cho mục đích làm cho mã dễ đọc hơn bằng cách có ý định gán thuộc tính thuộc về điều khiển. Bạn cũng có thể làm điều đó mà không cần niềng răng. Nhưng nếu bạn sử dụng một công cụ để định dạng lại mã của bạn, sự thụt đầu dòng có thể biến mất.

Tuy nhiên, nếu bạn có một phương pháp và bạn đặt {} trong đó, bạn có thể tạo một phạm vi biến mới:

void someMethod() { 
    { 
     int x = 1; 
    } 
    // no x defined here 
    { 
     // no x here, so we may define a new one 
     string x = "Hello"; 
    } 
} 

Bạn có thể bắt đầu một phạm vi mới bất cứ nơi nào trong một phương pháp mà bạn có thể bắt đầu một tuyên bố (một khai báo biến, một cuộc gọi phương thức, một vòng lặp vv)

Lưu ý: Khi bạn có ví dụ một câu lệnh if bạn cũng tạo một phạm vi biến mới với các dấu ngoặc đó.

void someMethod() { 
    if (someThing) { 
     int x = 1; 
    } 
    // no x defined here 
    if (somethingElse) { 
     // no x here, so we may define a new one 
     string x = "Hello"; 
    } 
} 

Điều này cũng đúng trong khi, để, thử, nắm bắt v.v. Nếu bạn nghĩ về nó ngay cả các dấu ngoặc ôm của một phương thức làm việc theo cách đó: chúng tạo ra một phạm vi mới, đó là một "lớp" ở trên cùng của phạm vi lớp.

+1

giải thích rõ ràng. cảm ơn bạn. –

+0

bạn được chào đón! – Mene

15

Nó được gọi là các khối mã ẩn danh, chúng được cho là restrict the variable scope.

0

Đó là Khối khởi tạo.

Tôi không nghĩ đây là cách sử dụng chính xác khối khởi tạo. Ngoài ví dụ bạn đã tạo, các khối này chỉ được sử dụng cho mục đích khởi tạo. Click Here để xem chi tiết.

+1

Chúng * có thể * là một trình khởi tạo, nhưng chúng cũng có thể là một câu lệnh khối đơn giản trong một phương thức. Chúng tôi không thể nói mà không nhìn thấy bối cảnh. –

+0

chắc chắn, việc sử dụng hoàn toàn phụ thuộc vào nhà phát triển – R9J

Các vấn đề liên quan