CodeGym /Blog Java /rawak /Ralat Kod Penyata Tidak Boleh Dicapai dalam Java
John Squirrels
Tahap
San Francisco

Ralat Kod Penyata Tidak Boleh Dicapai dalam Java

Diterbitkan dalam kumpulan
Pernyataan kod yang tidak boleh dicapai adalah masalah biasa di kalangan pemula Java. Banyak pembangun pemula mengelirukan ralat dengan "kod mati" - satu lagi fenomena berkaitan Java. Walaupun kedua-duanya serupa dengan manifestasi, terdapat beberapa perbezaan yang akan kami bincangkan dalam siaran ini. Selain daripada itu, anda akan mengetahui sebab yang paling biasa untuk pengkompil anda mengembalikan pernyataan kod yang tidak boleh dicapai dan menemui beberapa pembetulan mudah untuk mendapatkan kod anda dan berjalan semula.

Apakah Kod Tidak Boleh Dicapai?

Secara takrifan, pernyataan yang tidak boleh dicapai ialah pernyataan yang tidak akan dilaksanakan oleh pengkompil apabila anda menjalankan kod sedia untuk digunakan. Kenyataan pemulangan kod yang tidak boleh dicapai biasanya merupakan tanda ralat logik dalam atur cara. Walaupun terdapat beberapa sebab mengapa anda mendapat kenyataan sedemikian, dalam semua kes, kod yang tidak boleh dicapai adalah berlebihan, mengacaukan program anda dan harus dielakkan pada semua kos.

Kod Tidak Boleh Dicapai vs Kod Mati

Dalam komuniti pembangunan, konsep kod "tidak boleh dicapai" dan "mati" boleh dikatakan sinonim. Walau bagaimanapun, jika anda cerewet semasa membaca dokumentasi, anda mungkin melihat bahawa garis panduan pembangunan sering menyebut kedua-duanya secara berasingan. Adakah terdapat perbezaan antara kod mati dan tidak boleh dicapai? Pada asasnya, perbezaan antara kedua-dua ralat adalah dalam cara pengkompil bertindak balas terhadapnya. Jika kod yang anda masukkan dalam pengkompil tidak dapat dicapai , anda akan mendapat ralat masa jalan kompil dalam pemberitahuan Java. Jika penyataan anda ialah " kod mati ", tidak akan ada ralat masa jalan - pembangun akan mendapat amaran sistem berikut:

class DeadCode {
    void deadcode_Method(boolean b) {
    System.out.println("Reachable statement");
        if(true) {
        return;
        }
    System.out.println("Unreachable statement"); // dead code
    }
}
Oleh kerana tiada ralat pengkompil langsung dalam kes kod mati, ia lebih sukar untuk dikesan. Walau bagaimanapun, jika anda menjejaki pengembalian System.out.printIn dengan berhati-hati , menangkap kod mati tidak sepatutnya menyebabkan masalah kepada anda.

Sebab Anda Mendapat Penyata Kod Tidak Boleh Dicapai

Berita baiknya ialah, mudah untuk mengesan punca isu kod yang tidak dapat dicapai. Terdapat tiga sebab utama mengapa pengkompil anda terus mengembalikan ralat:
  • Penyata pemindahan. Jika anda memecahkan kod anda dengan pernyataan pulangan, tiada apa-apa selepas "return = true" akan dilaksanakan.
  • Gelung tak terhingga - tiada kod yang anda tulis selepas gelung tak terhingga akan dilaksanakan sama ada kerana sistem akan terus mengulangi tindakan gelung. Oleh itu, apabila menukar kod anda dalam kod bait, pengkompil akan menghantar ralat kod yang tidak boleh dicapai.
Untuk membantu anda membenderakan dan menyelesaikan isu ini, mari zum masuk padanya.

Kembalikan kenyataan

Penyata pemulangan ialah sebahagian daripada kumpulan kata kunci Pemindahan, bermakna ia menamatkan kaedah anda. Ia berguna untuk mengasingkan fungsi dan membantu memastikan kod anda boleh dibaca dan bersih. Walau bagaimanapun, memandangkan anda tidak boleh menambah penyataan baharu pada fungsi selepas return = true, cuba meneruskan fungsi selepas kata kunci akan memberi anda ralat pengkompil "Kod tidak boleh dicapai". Mari kita lihat contoh salah pengendalian "return = true" dan cara pengkompil bertindak balas terhadapnya.

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");
    }
}
Begini cara penyalahgunaan pernyataan pulangan akan dipaparkan dalam pengkompil:

prog.java:11: error: unreachable statement
System.out.println(“My code will run”);
^
1 error
Untuk mengukuhkan apa yang anda pelajari, kami cadangkan anda menonton pelajaran video daripada Kursus Java kami

Pecah kenyataan

Pernyataan Break ialah satu lagi jenis kata kunci yang anda perlu berhati-hati semasa menulis fungsi Java. Mengikut definisi, kata kunci rehat digunakan untuk menamatkan gelung. Dalam contoh di bawah, apabila pembangun keluar dari gelung, dia tidak lagi akan dapat melaksanakan pernyataan pada baris 8 - oleh itu, pengkompil akan menunjukkan ralat pernyataan yang tidak dapat dicapai. Berikut ialah contoh kod yang akan menghasilkan pernyataan kod yang tidak boleh dicapai:

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");
        }
    }
}
Melihat ralat dari sudut pandangan pengkompil, anda akan mendapat kenyataan ralat berikut.

JavaCodeGeeks.java:8: error: unreachable statement
System.out.println("After break");
                ^
1 error

Teruskan kenyataan

Teruskan ialah kata kunci kawalan gelung yang digunakan untuk mengulangi tindakan. Setiap kali anda mahu pelaksanaan gelung bermula dari awal dengan sendirinya, tambahkan teruskan pada kod anda. Pernyataan ini berguna untuk membantu pembangun memilih penyataan gelung yang ingin mereka ulangi dan pernyataan yang tidak mereka masukkan dalam lelaran. Walaupun continue ialah kata kunci yang mudah digunakan, tidak memahami sepenuhnya cara ia berfungsi membawa pembangun kepada perangkap "kod tidak boleh dicapai". Oleh kerana, selepas menemui sambungan, sistem akan mengulangi gelung, kata kunci tidak akan dapat mencapai pernyataan yang mengikutinya. Katakan, anda mempunyai kod berikut:

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");
            }
        }
    }
}
Sistem tidak akan melaksanakan pernyataan "Pengekodan selepas teruskan" anda - pengkompil akan memberitahu anda mengenainya dengan segera.

JavaIsFun.java:10: error: unreachable statement
                                System.out.println("Coding after continue");

Gelung tak terhingga

Senario yang serupa dengan contoh kes penggunaan kata kunci "putus" dan "teruskan" ialah gelung tak terhingga. Apabila mereka bentuk gelung tak terhingga, pembangun harus ingat bahawa tiada pernyataan selepas gelung itu akan berjalan. Oleh itu, jika anda tidak memecahkan gelung, semua kod yang ditulis selepas itu tidak boleh dicapai. Berikut ialah contoh menarik salah pengendalian gelung tak terhingga untuk diperiksa:

public class JavaCodeGym
{
    public static void main(String[] args) {
        while(true)
        {
            System.out.println("Hey there");
        }
        System.out.println("Nice to see you");
    }
}
Bolehkah anda meneka di mana ralat itu bersembunyi? Pengkompil akan menunjukkannya dengan segera sebaik sahaja anda menjalankan kod anda:

//unreachable code statement compiler error
JavaCodeGym.java:10: error: unreachable statement
                System.out.println("Nice to see you");
‘
Memandangkan terdapat gelung tak terhingga sebelum "Senang bertemu dengan anda" , pernyataan itu tidak akan dilaksanakan dan terus mengembalikan ralat kod yang tidak boleh dicapai.

Kesimpulan

Untuk mengelakkan kod yang tidak boleh dicapai, anda perlu memastikan terdapat aliran ke semua penyata sistem anda. Kebanyakan isu kod Java yang tidak boleh dicapai mempunyai kaitan dengan pengendalian kata kunci dan pengurusan gelung dengan buruk. Pada penghujung hari, menyemak semula kod anda ialah satu-satunya cara yang dicuba dan benar untuk mengelakkan kesilapan kod yang tidak boleh dicapai. Anda juga tidak seharusnya berkecil hati dengan mereka - tabiat mencipta kod Java cecair datang dengan pengalaman dan amalan bertahun-tahun. Jadi, mari tekan IDE dan mula membina produk perisian yang hebat.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION