CodeGym/Blog Java/Ngẫu nhiên/Lỗi mã tuyên bố không thể truy cập trong Java

Lỗi mã tuyên bố không thể truy cập trong Java

Xuất bản trong nhóm
Một câu lệnh mã không thể truy cập được là một vấn đề phổ biến đối với những người mới bắt đầu sử dụng Java. Rất nhiều nhà phát triển mới làm quen nhầm lẫn lỗi này với “mã chết” - một hiện tượng khác liên quan đến Java. Mặc dù cả hai đều giống nhau về biểu hiện, nhưng có một số khác biệt mà chúng tôi sẽ đề cập trong bài viết này. Ngoài ra, bạn sẽ tìm ra những lý do phổ biến nhất khiến trình biên dịch của bạn trả về một câu lệnh mã không thể truy cập được và khám phá một số cách khắc phục dễ dàng để khởi động và chạy lại mã của bạn.

Mã không thể truy cập là gì?

Theo định nghĩa, một câu lệnh không thể truy cập là câu lệnh sẽ không được thực thi bởi trình biên dịch khi bạn chạy mã sẵn sàng để triển khai. Câu lệnh trả về mã không thể truy cập thường là dấu hiệu của lỗi logic trong chương trình. Mặc dù có một số lý do khiến bạn kết thúc với một tuyên bố như vậy, nhưng trong mọi trường hợp, mã không thể truy cập được là dư thừa, làm lộn xộn chương trình của bạn và nên tránh bằng mọi giá.

Mã không thể truy cập so với Mã chết

Trong cộng đồng phát triển, các khái niệm về mã "không thể truy cập" và "chết" trên thực tế đồng nghĩa với nhau. Tuy nhiên, nếu bạn là người tỉ mỉ khi đọc tài liệu, bạn có thể thấy rằng các nguyên tắc phát triển thường đề cập đến hai điều này một cách riêng biệt. Có sự khác biệt nào giữa mã chết và không thể truy cập được không? Về cơ bản, sự khác biệt giữa hai lỗi là ở cách trình biên dịch phản ứng với chúng. Nếu mã bạn nhập vào trình biên dịch không thể truy cập được , bạn sẽ nhận được lỗi thời gian chạy biên dịch trong thông báo Java. Nếu câu lệnh của bạn là “ mã chết ”, sẽ không có lỗi thời gian chạy - nhà phát triển sẽ nhận được cảnh báo hệ thống sau:
class DeadCode {
    void deadcode_Method(boolean b) {
    System.out.println("Reachable statement");
        if(true) {
        return;
        }
    System.out.println("Unreachable statement"); // dead code
    }
}
Vì không có lỗi trình biên dịch trực tiếp trong trường hợp mã chết, nên khó phát hiện hơn. Tuy nhiên, nếu bạn theo dõi cẩn thận các trả về System.out.printIn , việc bắt mã chết sẽ không gây rắc rối cho bạn.

Tại sao bạn nhận được báo cáo mã không thể truy cập

Tin tốt là, thật dễ dàng để tìm ra nguyên nhân của các vấn đề về mã không truy cập được. Có ba lý do chính khiến trình biên dịch của bạn liên tục trả về lỗi:
  • Báo cáo chuyển nhượng. Nếu bạn phá vỡ mã của mình bằng một câu lệnh return, thì không có gì sau “return = true” sẽ được thực thi.
  • Vòng lặp vô hạn - không có mã nào bạn viết sau vòng lặp vô hạn sẽ được thực thi vì hệ thống sẽ tiếp tục lặp lại hành động của vòng lặp. Do đó, khi chuyển đổi mã của bạn thành mã byte, trình biên dịch sẽ gửi lỗi mã không thể truy cập được.
Để giúp bạn gắn cờ và khắc phục những sự cố này, hãy phóng to chúng.

Báo cáo trả về

Câu lệnh return là một phần của nhóm từ khóa Transfer, nghĩa là nó chấm dứt phương thức của bạn. Nó rất hữu ích để tách các chức năng và giúp giữ cho mã của bạn dễ đọc và sạch sẽ. Tuy nhiên, vì bạn không thể thêm các câu lệnh mới vào hàm sau khi return = true, nên việc cố gắng tiếp tục hàm sau từ khóa sẽ khiến bạn gặp lỗi trình biên dịch “Mã không thể truy cập”. Chúng ta hãy xem một ví dụ về xử lý sai “return = true” và cách trình biên dịch phản ứng với nó.
class GFG {
    public static void main(String args[])
    {

        System.out.println("My code will run");

        return;

        // ironically, this code will never run
        // here’s an unreachable code message a developer gets.
        System.out.println("My code will run");
    }
}
Đây là cách sử dụng sai câu lệnh return sẽ được hiển thị trong trình biên dịch:
prog.java:11: error: unreachable statement
System.out.println(“My code will run”);
^
1 error
Để củng cố những gì bạn đã học, chúng tôi khuyên bạn nên xem một video bài học từ Khóa học Java của chúng tôi

Câu lệnh ngắt

Các câu lệnh ngắt là một loại từ khóa khác mà bạn cần cẩn thận khi viết các hàm Java. Theo định nghĩa, từ khóa break được sử dụng để kết thúc một vòng lặp. Trong ví dụ bên dưới, khi nhà phát triển thoát khỏi vòng lặp, anh ta sẽ không thể thực thi câu lệnh trên dòng 8 nữa - do đó, trình biên dịch sẽ hiển thị lỗi câu lệnh không thể truy cập được. Đây là mã mẫu sẽ dẫn đến một câu lệnh mã không thể truy cập được:
public class JavaCodeGeeks
     {
    public static void main(String[] args) {
     for(int i=1;i<5;i++)
        {
        System.out.println(i);
        break;
        System.out.println("Code after break");
        }
    }
}
Nhìn vào lỗi từ quan điểm của trình biên dịch, bạn sẽ nhận được thông báo lỗi sau.
JavaCodeGeeks.java:8: error: unreachable statement
System.out.println("After break");
                ^
1 error

Tiếp tục báo cáo

Tiếp tục là một từ khóa điều khiển vòng lặp được sử dụng để nhắc lại các hành động. Bất cứ khi nào bạn muốn thực thi vòng lặp tự bắt đầu lại từ đầu, hãy thêm tiếp tục vào mã của bạn. Câu lệnh này rất hữu ích để giúp các nhà phát triển chọn câu lệnh nào của vòng lặp mà họ muốn nhắc lại và câu lệnh nào họ không đưa vào vòng lặp. Mặc dù continue là một từ khóa đơn giản để sử dụng, nhưng việc không hiểu đầy đủ về cách thức hoạt động của nó sẽ dẫn các nhà phát triển đến cái bẫy “mã không thể truy cập được”. Vì sau khi gặp tiếp tục, một hệ thống sẽ lặp lại vòng lặp, từ khóa sẽ không thể tiếp cận các câu lệnh theo sau nó. Giả sử, bạn có đoạn mã sau:
public class JavaIsFun
{
    public static void main(String[] args) {
        for(int i=0;i<8;i++)
        {
            System.out.println(i);
            if(i==5)
            {
                continue;
                System.out.println("Coding after continue");
            }
        }
    }
}
Hệ thống sẽ không thực thi câu lệnh “Mã hóa sau khi tiếp tục” của bạn - trình biên dịch sẽ cho bạn biết về điều đó ngay lập tức.
JavaIsFun.java:10: error: unreachable statement
                                System.out.println("Coding after continue");

vòng lặp vô hạn

Một kịch bản tương tự như các ví dụ về các trường hợp sử dụng từ khóa “ngắt” và “tiếp tục” là kịch bản của một vòng lặp vô hạn. Khi thiết kế một vòng lặp vô hạn, nhà phát triển nên nhớ rằng không có câu lệnh nào sau nó sẽ chạy. Do đó, nếu bạn không phá vỡ vòng lặp, tất cả các mã được viết sau đó sẽ không thể truy cập được. Đây là một ví dụ thú vị về việc xử lý sai vòng lặp vô hạn để kiểm tra:
public class JavaCodeGym
{
    public static void main(String[] args) {
        while(true)
        {
            System.out.println("Hey there");
        }
        System.out.println("Nice to see you");
    }
}
Bạn có đoán được lỗi đang ẩn ở đâu không? Trình biên dịch sẽ chỉ vào nó ngay khi bạn chạy mã của mình:
//unreachable code statement compiler error
JavaCodeGym.java:10: error: unreachable statement
                System.out.println("Nice to see you");
Vì có một vòng lặp vô hạn trước "Rất vui được gặp bạn" nên câu lệnh sẽ không bao giờ được thực thi và tiếp tục trả về lỗi mã không thể truy cập.

Phần kết luận

Để tránh mã không truy cập được, bạn cần đảm bảo rằng có một luồng tới tất cả các câu lệnh hệ thống của mình. Hầu hết các vấn đề về mã không truy cập được của Java đều liên quan đến việc xử lý từ khóa và quản lý vòng lặp kém. Vào cuối ngày, kiểm tra kỹ mã của bạn là cách duy nhất đã được thử và đúng để tránh các lỗi mã không thể truy cập được. Bạn cũng không nên nản lòng vì chúng - thói quen tạo mã Java linh hoạt đi kèm với nhiều năm kinh nghiệm và thực hành. Vì vậy, hãy sử dụng IDE và bắt đầu xây dựng các sản phẩm phần mềm tuyệt vời.
Bình luận
  • Phổ biến
  • Mới
Bạn phải đăng nhập để đăng nhận xet
Trang này chưa có bất kỳ bình luận nào