JavaRush /Blog Java /Random-VI /Câu lệnh ngắt trong Java
iloveski
Mức độ
Москва

Câu lệnh ngắt trong Java

Xuất bản trong nhóm
Xin chào tất cả các đồng nghiệp và những người chỉ đơn giản là quan tâm.
Câu lệnh break trong Java - 1
Hôm nay chúng ta sẽ xem xét một tính năng của ngôn ngữ lập trình Java là toán tử ngắt. Đây là bài viết đầu tiên về chủ đề toán tử chuyển đổi, vì vậy nếu bạn thích nó, tôi sẽ rất vui được viết thêm. Tôi muốn lưu ý ngay rằng bài viết này chủ yếu dành cho các nhà phát triển mới bắt đầu và những sinh viên nâng cao hơn có thể không tìm thấy điều gì mới cho mình ở đây. Vì vậy, hãy đi thôi. Trong Java, có 2 cách để thay đổi thứ tự thực thi các lệnh chương trình: câu lệnh nhảy và cơ chế xử lý ngoại lệ. Có ba toán tử nhảy trong java: break, continue và return. Hôm nay tôi mời bạn xem xét kỹ hơn về nhà điều hành break. Xử lý ngoại lệ là một chủ đề rộng đến nỗi nó nằm ngoài phạm vi của bài viết này. Có ba cách để sử dụng câu lệnh break trong java. Cách đầu tiên và phổ biến nhất là sử dụng nó breakđể thoát khỏi vòng lặp sớm, ví dụ:
public class SimpleExample {
    public static void main(String[] args) {
        findNumberInLoop(3);
    }
    public static void findNumberInLoop(int number){
        for (int i = 0; i < 10; i++) {
            if (i == number) {
                break;
            }
            System.out.println(i);
        }
        System.out.println("cycle was finished");
    }
}
Ví dụ này sẽ hiển thị:
1
2
cycle was finished
Điều này có nghĩa là khi bộ đếm vòng lặp ibằng với tham số đã truyền number, nghĩa là số 3, thì việc thực thi vòng lặp sẽ kết thúc sớm. Nếu chương trình có nhiều vòng lặp lồng nhau thì chỉ ngắt kết quả đầu ra từ vòng lặp trong cùng, ví dụ:
public class SimpleExample {
    public static void main(String[] args) {
        findNumberInLoop(3);
    }
    public static void findNumberInLoop(int number){
        for(int i = 0; i < 5; i++) {
            for (int j =0; j < 10; j++) {
                if(j == number) {
                    break;
                }
                System.out.print(j);
            }
            System.out.println();
        }
        System.out.println("cycles was finished");
    }
}
Ví dụ này tạo ra đầu ra:
012
012
012
012
012
cycles was finished
Như có thể thấy từ ví dụ, vòng lặp bên trong bị gián đoạn mỗi lần ở số 3 (tham số number) và vòng lặp bên ngoài được thực thi 5 lần, như dự định. Trong java, bạn có thể sử dụng nhiều câu lệnh break trong một vòng lặp, nhưng điều này không được khuyến khích vì khả năng đọc và cấu trúc của mã bị suy giảm đáng kể. Công dụng thứ hai breaklà dùng nó để làm gián đoạn việc thực thi các câu lệnh trong các nhánh switch, ví dụ:
public class SimpleExample {
    public static void main(String[] args) {
        square(2);
    }

    public static void square(int number){
        switch (number){
            case 1:
                System.out.println(number*number);
                break;
            case 2:
                System.out.println(number*number);
                break;
            case 3:
                System.out.println(number*number);
                break;
        }
        System.out.println("after switch");
    }
}
Chạy ví dụ này sẽ tạo ra kết quả:
4
after switch
Câu lệnh break chuyển quyền kiểm soát cho mã theo sau toàn bộ khối switch. Nếu bạn không chỉ định breaktrong switchví dụ này:
public class SimpleExample {
    public static void main(String[] args) {
        square(2);
    }
    public static void square(int number){
        switch (number){
            case 1:
                System.out.println(number*number);
            case 2:
                System.out.println(number*number);
            case 3:
                System.out.println(number*number);
        }
        System.out.println("after switch");
    }
}
Đầu ra sẽ không như mong đợi:
4
4
after switch
Điều này xảy ra vì sau khi khối được thực thi, case 2chương trình tiếp tục thực thi tất cả các khối tình huống tiếp theo , điều này cho chúng ta kết quả đầu ra tương ứng. Đôi khi tính năng này của toán tử switch có thể có lợi cho chúng ta, ví dụ:
public class SimpleExample {
    public static void main(String[] args) {
        compare(2);
        compare(7);
        compare(12);
    }
    public static void compare(int number){
        switch (number){
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("number is less than 5 or equal 5");
                break;
            case 6:
            case 7:
            case 8:
            case 9:
                System.out.println("number is greater than 5");
                break;
            default:
                System.out.println("number is less than 0 or greater than 9");
        }
        System.out.println("after switch");
    }
}
Chương trình này so sánh một số đã cho với số 5 và đưa ra kết quả sau:
after switch
number is greater than 5
after switch
number is less than 0 or greater than 9
after switch
Khi một phương thức được gọi lần đầu tiên, toán tử switchsẽ chuyển quyền điều khiển cho toán tử đó case 2rồi đến toán tử đó breaktrong case 5. Cuộc gọi thứ hai tương tự như cuộc gọi đầu tiên, nhưng bắt đầu bằng c case 7. Cuộc gọi thứ ba không tìm thấy giá trị phù hợp trong số tất cả các trường hợp, do đó toán tử được thực thi default. Cách thứ ba là sử dụng toán tử breakthay vì gototoán tử C. Để thực hiện việc này, chúng ta sẽ sử dụng một dạng đặc biệt của toán tử breakđược gọi breakbằng nhãn. Biểu mẫu này trông giống như break метка;một Nhãn - đây thường là bất kỳ tên phù hợp nào từ không gian tên java, đứng trước một khối mã. Hơn nữa, sau khi áp dụng khối mã này breakcó nhãn, mã sẽ tiếp tục được thực thi từ vị trí sau khối mã có nhãn tương ứng, ví dụ:
public class SimpleExample {
    public static void main(String[] args) {
        howWeUseLabels(true);
        System.out.println();
        howWeUseLabels(false);
    }
    public static void howWeUseLabels(boolean bool) {
        firstBlock:{
            secondBlock:{
                thirdBlock:{
                    System.out.println("We will see it always");
                    if(bool) {
                        break secondBlock;
                    }
                    System.out.println("We won't see it if bool == true");
                }
                System.out.println("We won't see it if bool == true");
            }
            System.out.println("We will see it always");
        }
    }
}
Ví dụ này sẽ tạo ra kết quả sau:
We will see it always
We will see it always

We will see it always
We won't see it if bool == true
We won't see it if bool == true
We will see it always
Sau lệnh gọi phương thức đầu tiên, toán tử breakchuyển quyền điều khiển đến cuối khối secondBlock, thoát ra secondBlockthirdBlocktrong khi thực thi toán tử khác println()ở cuối khối firstBlock. Sau cuộc gọi thứ hai, tất cả các dòng sẽ được hiển thị trên màn hình. Nhãn cũng có thể được sử dụng để biểu thị chu kỳ. Cần nhớ rằng bạn chỉ có thể truy cập nhãn từ bên trong khối mã được chỉ định bởi nhãn; ví dụ: mã như vậy sẽ không được biên dịch:
public class SimpleExample {
    public static void main(String[] args) {
        label:{
            System.out.println("inside label");
        }
        if(true) {
            break label;
        }
        System.out.println("This is error");
    }
}
Lưu ý về độ rõ ràng của mã và câu lệnh break: Nói chung có lời khuyên được chấp nhận là sử dụng câu lệnh breakthật cẩn thận, vì việc sử dụng breaklàm cho vòng lặp khó hiểu hơn và buộc người lập trình phải nhìn vào bên trong vòng lặp để hiểu các sắc thái hoạt động của nó. Có một quy tắc heuristic mà break bạn có thể sử dụng một cách tự tin hơn trong các vòng lặp ngắn hơn và thận trọng hơn trong các vòng lặp dài và được lồng sâu, vì điều này làm tăng khả năng xảy ra lỗi và làm phức tạp việc đọc và hiểu mã của bạn bởi các lập trình viên khác. Như tôi đã viết ở trên, việc sử dụng một số lượng lớn break... rải rác trong mã cho thấy rằng lập trình viên không hiểu đầy đủ lý do tại sao anh ta lại viết mã theo cách anh ta đã làm. Có thể đáng xem xét việc tái cấu trúc một vòng lặp như vậy bằng cách chia nó thành nhiều vòng nhỏ hơn. Hãy cố gắng cẩn thận khi sử dụng break nhãn thay thế cho goto, vì điều này làm phức tạp cấu trúc mã. Đó là tất cả những gì tôi muốn nói với bạn hôm nay về toán tử breaktrong java. Tôi sẽ vui mừng đón nhận những lời chỉ trích mang tính xây dựng và tôi cũng sẵn sàng viết phần tiếp theo về các toán tử continuereturn, nếu bạn quan tâm.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION