2011-09-14 42 views

Trả lời

12

Một tuyên bố trở lại mà không có một giá trị có thể chỉ được sử dụng trong một phương pháp void (hoặc một nhà xây dựng), và chỉ đơn giản là thực hiện "lấy ra khỏi phương pháp bây giờ" một phần của trở về. Hãy nghĩ về một tuyên bố trở lại với các giá trị đã có hai mục đích:

  • Chấm dứt thực hiện các phương pháp hiện hành (thông qua finally khối dĩ nhiên)
  • Làm một giá trị tính toán trong phương pháp có sẵn để người gọi

Câu lệnh trả về trong phương thức void chỉ đơn giản là đạt được đầu tiên trong số này; thứ hai không có ý nghĩa trong phương thức void.

Từ section 14.17 của ngôn ngữ Java Specification:

Một tuyên bố trở lại với không biểu phải được chứa trong cơ thể của một phương pháp mà được khai báo, sử dụng khoảng trống từ khóa, không trả lại bất kỳ giá trị (§8.4), hoặc trong phần thân của một hàm tạo (§8.8). Một lỗi biên dịch thời gian xảy ra nếu một câu lệnh return xuất hiện trong một trình khởi tạo thể hiện hoặc một bộ khởi tạo tĩnh (§8.7). Một câu lệnh return không có Expression cố gắng chuyển điều khiển tới người gọi của phương thức hoặc hàm tạo chứa nó. Để chính xác, một tuyên bố trả về không có Biểu thức luôn hoàn thành đột ngột, lý do là sự trở lại không có giá trị.

+2

Tôi chính thức có thể xác minh rằng tôi không thể đánh bại Jon Skeet. –

+0

Khá một lời giải thích về một câu hỏi đơn giản, tuyệt vời! @ Jon bạn có thể xuất bản một cuốn sách của tất cả các câu trả lời bạn đã đưa ra ở đây trên stackoverflow, hoặc có thể là sách. :-) – kaps

+0

@kaps: Cuốn sách tiếp theo của tôi có thể là khá nhiều một bộ não của "suy nghĩ của tôi về phát triển" :) –

4

Tuyên bố trả về của bạn không có đối số, vì vậy nó không trả lại bất kỳ điều gì, do đó giá trị trả lại là 'void'.

1

Tại bất kỳ điểm nào trong Phương thức khi câu lệnh trả về được thực thi, nó thoát ra khỏi phương thức đơn giản. Do đó, việc trả lại ở đây vừa kết thúc việc thực hiện phương thức của bạn ở đây.
Nếu bạn cố gắng một cái gì đó (một số giá trị) từ một phương pháp khoảng trống ví dụ
return"xzy";
Bạn sẽ nhận được lỗi complition
Void methods cannot return a value

0

Tuyên bố return cũng có thể được sử dụng để thực thi lệnh quay trở lại người gọi của phương pháp này. Do đó, câu lệnh return sẽ ngay lập tức chấm dứt phương thức mà nó được thực thi.

Do đó, mã mẫu của bạn:

void nothingDohere() { 
    return ; 
} 

Kết thúc cuộc gọi phương thức và trả lại ngay cho người gọi của phương pháp.

0

Trong trường hợp được bạn đề cập, trả về thực sự là không cần thiết về ngữ nghĩa (mặc dù cần cú pháp - Javac sẽ không biên dịch nếu không có trả lại này). Sự trở lại chấm dứt phương thức.

Tuy nhiên, trong một số trường hợp, chúng tôi muốn có nhiều vị trí thoát trong một phương pháp, ví dụ:như thế này:

public void doDifferentThings(){ 
    if(){ 
     //something done 
     return; 
    } 
    else{ 
     //something else done 
     return; 
    } 
} 

Một số xem xét thiết kế xấu này (mâu thuẫn với một điểm xuất cảnh), tuy nhiên nó có thể giữ mã của bạn sạch hơn.

0

đơn giản, nó sẽ trả về từ bên trong phương pháp khoảng trống đến vị trí nơi mà các chương trình được gọi là phương pháp mà:

public calss Test 
{ 
    private boolean flag = true; 
    public Test() 
    { 
     ... // (1) 
     ... // (2) 
     voidMethod(); // (3) 
     ... // (7) 
     ... // (8) 
    } 
    private void voidMethod() 
    { 
     ... // (4) 
     ... // (5) 
     if(flag) return; // (6) 
     ... 
     ... 
    } 
} 
0

Khi bạn trở về từ một hàm, bạn quay trở lại điều khiển với chức năng gọi hàm trở về. Nếu bạn trả về một giá trị, hàm gọi sẽ nhận được giá trị đó, nếu không hàm gọi sẽ chỉ nhận được điều khiển.

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