Rumah  >  Artikel  >  Java  >  Adakah Java menyokong Goto?

Adakah Java menyokong Goto?

王林
王林ke hadapan
2023-09-05 23:33:071009semak imbas

Adakah Java menyokong Goto?

Java terkenal dengan konsistensi dan serba boleh. Java menyediakan beberapa kaedah utama aliran kawalan. Konstruk etimologi Java tidak mempunyai spesifikasi aliran kawalan, seperti yang ditunjukkan oleh pernyataan "goto". Dalam bahagian ini, kita akan belajar mengapa Java tidak mempunyai fungsi goto, beberapa pilihannya, dan cara menggunakannya untuk mencapai matlamat yang sama.

Tatabahasa

Pertama, mari kita lihat struktur bahasa Java. Tafsiran goto membolehkan anda menukar bahagian kod secara bebas berdasarkan nama mereka. Goto menjana aliran kawalan kompleks dalam C dan C++, tetapi kod itu selalunya tidak boleh dibaca dan tidak bernilai.

label: {
   // Code section 1
   if (condition) {
      // Code section 2
      if (anotherCondition) {
         // Code section 3
         break label;
      } else {
         // Code section 4
         if (yetAnotherCondition) {
            // Code section 5
            if (finalCondition) {
               // Code section 6
            }
         }
      }
   }
   // Code section 7
}

Penjelasan tatabahasa

Pengarang Java mengecualikan ungkapan goto kerana ia akan menjadikan kod berterabur dan sukar difahami. Mereka memilih aliran kawalan berstruktur untuk kod yang lebih bersih dan lebih sedikit pepijat.

Algoritma

Algoritma langkah demi langkah untuk menguruskan aliran kawalan dalam Java -

  • Entry Point- Perlaksanaan program akan bermula dari entry point yang dipilih, yang boleh menjadi kaedah utama atau entry point yang lain.

  • Sequential Execution - Kod berjalan baris demi baris secara berterusan melainkan tafsiran aliran kawalan ditemui, dalam kes ini pelaksanaan melompat ke rutin penegasan berikut.

  • Pernyataan untuk mencipta gelung Penyataan gelung (termasuk penyataan untuk, sambil dan buat sementara) membenarkan blok kod diulang sehingga syarat tertentu dipenuhi.

Kaedah

Walaupun Java tidak mempunyai goto, pembangun menemui cara untuk membina fungsi yang serupa.

Kaedah 1: Label dan Pernyataan Bersyarat

Arahan

Teg boleh menandakan segmen kod, dan ungkapan bersyarat boleh mengawal pelaksanaan berdasarkan syarat. Goto tidak mempunyai kawalan dan kebolehbacaan.

Contoh

public class GotoExample {
   public static void main(String[] args) {
      GotoExample program = new GotoExample();
      program.execute();
   }

   private void execute() {
      label: {
         System.out.println("Executing Code Section 1");
         // Code section 1
         if (condition) {
            System.out.println("Executing Code Section 2");
            // Code section 2
            if (anotherCondition) {
               System.out.println("Executing Code Section 3");
               // Code section 3
                  break label;
            } else {
               System.out.println("Executing Code Section 4");
               // Code section 4
               if (yetAnotherCondition) {
                  System.out.println("Executing Code Section 5");
                  // Code section 5
                  if (finalCondition) {
                     System.out.println("Executing Code Section 6");
                     // Code section 6
                  }
               }
            }
         }
         System.out.println("Executing Code Section 7");
         // Code section 7
      }
   }

   private boolean condition = true;
   private boolean anotherCondition = true;
   private boolean yetAnotherCondition = true;
   private boolean finalCondition = true;
}

Output

Executing Code Section 1
Executing Code Section 2
Executing Code Section 3

Arahan

Untuk menunjukkan pelaksanaan, kami memasukkan pernyataan System.out.println() ke dalam setiap bahagian kod. Ini membolehkan anda menjejaki pelaksanaan dan melihat perkara yang sedang berjalan bergantung pada situasi. Pusat Kawalan memaparkan mesej pelaksanaan kod.

Kaedah 2: Gunakan kaedah enkapsulasi

Bina aliran kawalan Java dengan merangkumkan kod dalam kaedah. Panggilan kaedah membolehkan kami menavigasi perisian dengan memecahkannya kepada bahagian yang boleh diurus.

Contoh

public class GotoExample {
   public static void main(String[] args) {
      GotoExample program = new GotoExample();
      program.execute();
   }

   private void execute() {
      section1();
      if (condition()) {
         section2();
         if (anotherCondition()) {
            section3();
            return;
         } else {
            section4();
            if (yetAnotherCondition()) {
               section5();
               if (finalCondition()) {
                  section6();
               }
            }
         }
      }
      section7();
   }

   private void section1() {
      System.out.println("Executing Code Section 1");
      // Code section 1
   }

   private void section2() {
      System.out.println("Executing Code Section 2");
      // Code section 2
   }

   private void section3() {
      System.out.println("Executing Code Section 3");
      // Code section 3
   }

   private void section4() {
      System.out.println("Executing Code Section 4");
      // Code section 4
   }

   private void section5() {
      System.out.println("Executing Code Section 5");
      // Code section 5
   }

   private void section6() {
      System.out.println("Executing Code Section 6");
      // Code section 6
   }

   private void section7() {
      System.out.println("Executing Code Section 7");
      // Code section 7
   }

   private boolean condition() {
      // Define the condition logic
      return true;
   }

   private boolean anotherCondition() {
      // Define the anotherCondition logic
      return true;
   }

   private boolean yetAnotherCondition() {
      // Define the yetAnotherCondition logic
      return true;
   }

   private boolean finalCondition() {
      // Define the finalCondition logic
      return true;
   }
}

Output

Executing Code Section 1
Executing Code Section 2
Executing Code Section 3

Arahan

Saya menambah kaedah seksyen3(), seksyen4(), seksyen5(), seksyen6() dan seksyen7(). Condition, anotherCondition, yetAnotherCondition, dan FinalCondition digantikan dengan prosedur mereka. Kaedah ini sesuai untuk anda.

Mesin Keadaan 3 Kaedah

Mesin negeri menguruskan aliran kawalan yang kompleks. Mesin negeri mewakili peralihan secara matematik. Mesin negeri mengatur aliran kawalan.

Contoh

enum State {
   STATE_1, STATE_2, STATE_3, STATE_4, STATE_5, STATE_6, STATE_7
}

public class GotoExample {
   public static void main(String[] args) {
      GotoExample program = new GotoExample();
      program.execute();
   }

   private void execute() {
      State currentState = State.STATE_1;

      while (currentState != State.STATE_7) {
         switch (currentState) {
            case STATE_1:
               section1();
               currentState = State.STATE_2;
               break;
            case STATE_2:
               if (condition()) {
                  section2();
                  currentState = State.STATE_3;
               } else {
                  currentState = State.STATE_4;
               }
               break;
               // Define other states and transitions
         }
      }
   }

   private void section1() {
      System.out.println("Executing Code Section 1");
      // Code section 1
   }

   private void section2() {
      System.out.println("Executing Code Section 2");
      // Code section 2
   }

   // Define other section methods and states

   private boolean condition() {
      // Define the condition logic
      return true;
   }
}

Output

Executing Code Section 1
Executing Code Section 2

Arahan

Kami menambah alasan bersyarat pada spesifikasi teknikal syarat(). Jika boleh, tukar kumpulan dasar untuk syarat().

Pengendalian Pengecualian Kaedah 4

Pengendalian pengecualian dalam Java atau Java pengecualian dengan ditandai, tidak ditanda dan ralat dengan contoh dan penggunaan try, catch, throw, throws dan akhirnya kata kunci.

Contoh

public class GotoExample {
   public static void main(String[] args) {
      try {
         section1();
         if (condition()) {
            section2();
            if (anotherCondition()) {
               section3();
               throw new GotoException();
            } else {
               section4();
               if (yetAnotherCondition()) {
                  section5();
                  if (finalCondition()) {
                     section6();
                     throw new GotoException();
                  }
               }
            }
         }
         section7();
      } catch (GotoException e) {
         // Handle the exception to continue execution
         // or perform any necessary operations
      }
   }

   private static void section1() {
      System.out.println("Executing Code Section 1");
      // Code section 1
   }

   private static void section2() {
      System.out.println("Executing Code Section 2");
      // Code section 2
   }

   private static void section3() {
      System.out.println("Executing Code Section 3");
      // Code section 3
   }

   private static void section4() {
      System.out.println("Executing Code Section 4");
      // Code section 4
   }

   private static void section5() {
      System.out.println("Executing Code Section 5");
      // Code section 5
   }

   private static void section6() {
      System.out.println("Executing Code Section 6");
      // Code section 6
   }

   private static void section7() {
      System.out.println("Executing Code Section 7");
      // Code section 7
   }

   private static boolean condition() {
      // Define the condition logic
      return true;
   }

   private static boolean anotherCondition() {
      // Define the anotherCondition logic
      return true;
   }

   private static boolean yetAnotherCondition() {
      // Define the yetAnotherCondition logic
      return true;
   }

   private static boolean finalCondition() {
      // Define the finalCondition logic
      return true;
   }
}

class GotoException extends Exception {
   // Custom exception class to simulate the "goto" behavior
}

Output

Executing Code Section 1
Executing Code Section 2
Executing Code Section 3

Arahan

Kaedah 4 Salin pernyataan goto untuk mengendalikan pengecualian. Untuk "melompat" ke kod, kami mengeluarkan GotoException. Cuba gunakan GotoException untuk mengawal pelaksanaan.

Kesimpulan

Pendekatan aliran kawalan tertib Java berfungsi walaupun tanpa ekspresi goto. Notasi, sambungan terhingga, mesin keadaan, dan paradigma pengaturcaraan berjujukan membantu jurutera menulis kod yang cekap dan bebas ralat. Untuk mencipta program Java yang boleh dipercayai dan mudah difahami, anda mesti menerima kemungkinan ini dan mengikuti amalan terbaik.

Atas ialah kandungan terperinci Adakah Java menyokong Goto?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam