Rumah > Java > javaTutorial > Mengapa Findbugs Menandakan Kenyataan Pecah Ditinggalkan dalam Pernyataan Suis Java?

Mengapa Findbugs Menandakan Kenyataan Pecah Ditinggalkan dalam Pernyataan Suis Java?

Linda Hamilton
Lepaskan: 2024-10-29 11:42:02
asal
758 orang telah melayarinya

  Why Does Findbugs Flag Omitted Break Statements in Java Switch Statements?

Pernyataan Suis: Bahaya Pemecahan Diabaikan

Di Java, pernyataan suis menyediakan cara yang mudah untuk mengendalikan berbilang pilihan kes. Walau bagaimanapun, meninggalkan kenyataan rehat boleh membawa kepada ralat halus dan tingkah laku yang tidak dijangka. Findbugs, alat analisis statik, membenderakan kejadian seperti itu, melaporkan ralat apabila satu kes "melewati" ke seterusnya.

Pertimbangkan kod berikut:

<code class="java">switch(x) {

    case 0:
        // code

    case 1:
        // code

    case 2:
        // code
}</code>
Salin selepas log masuk

Findbugs secara khusus menimbulkan ralat pada kenyataan kes kedua. Ini kerana, jika tiada pernyataan putus, pelaksanaan akan diteruskan kepada kes berikutnya selepas melaksanakan kod untuk kes semasa.

Untuk memahami tingkah laku ini dengan lebih baik, mari kita periksa contoh:

<code class="java">switch (foo) {
    case 0:
        doSomething();
    case 1:
        doSomethingElse();
    default:
        doSomeOtherThing();
}</code>
Salin selepas log masuk

Jika foo ialah 0, ketiga-tiga fungsi doSomething, doSomethingElse dan doSomeOtherThing akan dilaksanakan dalam susunan tersebut. Walau bagaimanapun, jika foo ialah 1, hanya doSomethingElse dan doSomeOtherThing akan dijalankan. Tingkah laku ini mungkin tidak mencerminkan logik yang dimaksudkan.

Sebaliknya, menambah pernyataan putus pada setiap kes memastikan bahawa hanya fungsi yang dimaksudkan dilaksanakan:

<code class="java">switch (foo) {
    case 0:
        doSomething();
        break;
    case 1:
        doSomethingElse();
        break;
    default:
        doSomeOtherThing();
        break;
}</code>
Salin selepas log masuk

Dalam kod ini, hanya satu fungsi akan dilaksanakan bergantung pada nilai foo.

Alat seperti bendera Findbugs mengetepikan rehat untuk menyerlahkan kemungkinan ralat dan memastikan gelagat yang dimaksudkan bagi pernyataan suis. Walau bagaimanapun, dalam kes tertentu, adalah boleh diterima untuk meninggalkan rehat apabila berbilang kes mewakili julat nilai yang bersebelahan dengan akibat yang sama:

<code class="java">switch (foo) {
    case 0:
    case 1:
        doSomething();
        break;
    case 2:
        doSomethingElse();
        break;
    default:
        doSomeOtherThing();
        break;
}</code>
Salin selepas log masuk

Kod ini dengan sengaja memanggil doSomething apabila foo sama ada 0 atau 1. Kebanyakan alat analisis tidak akan melaporkan ini sebagai ralat kerana tiada kod perantara antara kes.

Atas ialah kandungan terperinci Mengapa Findbugs Menandakan Kenyataan Pecah Ditinggalkan dalam Pernyataan Suis Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan