2009-04-13 31 views
50

Tôi nhìn vào a path finding tutorial và tôi nhận thấy một tuyên bố return bên trong một phương pháp void (lớp PathTest, dòng 126):Từ khóa trả về làm gì trong một phương thức void trong Java?

if ((x < 0) || (y < 0) || (x >= map.getWidthInTiles()) || (y >= map.getHeightInTiles())) { 
    return; 
} 

Tôi mới làm quen với Java. Bất cứ ai có thể cho tôi biết lý do tại sao nó có? Theo như tôi biết, return bên trong một phương pháp void không được phép.

Trả lời

94

Nó chỉ thoát khỏi phương thức tại điểm đó. Khi return được thực thi, phần còn lại của mã sẽ không được thực thi.

ví dụ:

public void test(int n) { 
    if (n == 1) { 
     return; 
    } 
    else if (n == 2) { 
     doStuff(); 
     return; 
    } 
    doOtherStuff(); 
} 

Lưu ý rằng trình biên dịch là đủ thông minh để cho bạn biết một số mã không thể đạt được:

if (n == 3) { 
    return; 
    youWillGetAnError(); //compiler error here 
} 
+4

Tôi hiểu mã của bạn là minh họa, nhưng đối với thông tin của cha mẹ; Tôi đã làm việc với những người tin rằng mỗi phương pháp chỉ nên có một câu trả lại đơn. Tôi không phải là một trong số họ, nhưng hãy tin vào việc giảm thiểu số lượng lợi nhuận càng nhiều càng tốt mà không làm cho mã xấu xí khi thực hiện nó. – digitaljoel

+2

Vâng, nó chắc chắn không phải là một cái gì đó để lạm dụng, nhưng đôi khi nó chỉ làm cho nó dễ dàng hơn rất nhiều và vẫn có thể rất dễ đọc. – CookieOfFortune

+2

Cách yêu thích của tôi để phá vỡ vòng lặp lồng nhau :) –

22

Bạn có thể có return trong một phương pháp có hiệu lực, bạn chỉ có thể không trở lại bất kỳ giá trị (như trong return 5;), đó là lý do tại sao họ gọi nó là phương thức void. Một số người luôn dứt khoát kết thúc các phương thức vô hiệu bằng câu lệnh trả về nhưng không bắt buộc. Nó thể được sử dụng để lại một chức năng sớm, mặc dù:

void someFunct(int arg) 
{ 
    if (arg == 0) 
    { 
     //Leave because this is a bad value 
     return; 
    } 
    //Otherwise, do something 
} 
12

Ngôn ngữ Java specification nói rằng bạn có thể có trở lại không có biểu hiện nếu phương pháp của bạn trả về void.

2

Nó hoạt động giống như một hàm trả về cho hàm với tham số được chỉ định, ngoại trừ nó trả về không có gì, vì không có gì để trả về và điều khiển được chuyển về phương thức gọi.

2

Nó thoát khỏi hàm và không trả về gì.

Something như return 1; sẽ không chính xác vì nó trả về số nguyên 1.

14

Các từ khóa đơn giản là bật một khung từ các cuộc gọi stack trở sự kiểm soát để dòng sau lời gọi hàm.

+6

Haha. Đây là câu trả lời tuyệt vời nhưng tôi nghi ngờ người mới bắt đầu trong java sẽ thực sự nắm bắt những gì bạn đang cố gắng để nói. – franklin

1

Xem ví dụ này, bạn muốn thêm vào danh sách có điều kiện. Nếu không có từ "return", tất cả ifs sẽ được thực hiện và thêm vào ArrayList!

Arraylist<String> list = new ArrayList<>(); 

    public void addingToTheList() { 

    if(isSunday()) { 
     list.add("Pray today") 
     return; 
    } 

    if(isMonday()) { 
     list.add("Work today" 
     return; 
    } 

    if(isTuesday()) { 
     list.add("Tr today") 
     return; 
    } 
} 
+0

ArrayList nên được khởi tạo là: ArrayList list = new ArrayList <>(); –

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