Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Pernyataan Jawa

Pernyataan Java

Dalam tutorial ini, kita akan belajar tentang pernyataan Java assert (Java assertions) dengan bantuan contoh.

Pernyataan di Java membantu mendeteksi bug dengan menguji kode yang kami anggap benar.

Pernyataan dibuat menggunakan assert kata kunci.

Sintaksnya adalah:

assert condition;

Di sini, condition adalah ekspresi boolean yang kita anggap benar ketika program dijalankan.


Mengaktifkan Pernyataan

Secara default, pernyataan dinonaktifkan dan diabaikan saat runtime.

Untuk mengaktifkan pernyataan, kami menggunakan:

java -ea:arguments

ATAU

java -enableassertions:arguments

Saat pernyataan diaktifkan dan kondisinya true , program dijalankan secara normal.

Tetapi jika kondisinya mengevaluasi ke false saat pernyataan diaktifkan, JVM melempar AssertionError , dan program akan segera berhenti.


Contoh 1:Pernyataan Java

class Main {
  public static void main(String args[]) {
    String[] weekends = {"Friday", "Saturday", "Sunday"};
    assert weekends.length == 2;
    System.out.println("There are " + weekends.length + "  weekends in a week");
  }
}

Keluaran

There are 3 weekends in a week

Kami mendapatkan output di atas karena program ini tidak memiliki kesalahan kompilasi dan secara default, pernyataan dinonaktifkan.

Setelah mengaktifkan pernyataan, kami mendapatkan output berikut:

Exception in thread "main" java.lang.AssertionError

Bentuk lain dari pernyataan pernyataan

assert condition : expression;

Dalam bentuk pernyataan pernyataan ini, sebuah ekspresi diteruskan ke konstruktor AssertionError obyek. Ekspresi ini memiliki nilai yang ditampilkan sebagai pesan detail kesalahan jika kondisinya false .

Pesan terperinci digunakan untuk menangkap dan mengirimkan informasi kegagalan pernyataan untuk membantu dalam men-debug masalah.


Contoh 2:Pernyataan Java dengan contoh ekspresi

class Main {
  public static void main(String args[]) {
    String[] weekends = {"Friday", "Saturday", "Sunday"};
    assert weekends.length==2 : "There are only 2 weekends in a week";
    System.out.println("There are " + weekends.length + "  weekends in a week");
  }
}

Keluaran

Exception in thread "main" java.lang.AssertionError: There are only 2 weekends in a week

Seperti yang kita lihat dari contoh di atas, ekspresi diteruskan ke konstruktor AssertionError obyek. Jika asumsi kita adalah false dan pernyataan diaktifkan, pengecualian ditampilkan dengan pesan yang sesuai.

Pesan ini membantu dalam mendiagnosis dan memperbaiki kesalahan yang menyebabkan pernyataan gagal.


Mengaktifkan pernyataan untuk kelas dan paket tertentu

Jika kami tidak memberikan argumen apa pun ke sakelar baris perintah pernyataan,

java -ea

Ini memungkinkan pernyataan di semua kelas kecuali kelas sistem.

Kami juga dapat mengaktifkan pernyataan untuk kelas dan paket tertentu menggunakan argumen. Argumen yang dapat diberikan untuk sakelar baris perintah ini adalah:

Aktifkan pernyataan dalam nama kelas

Untuk mengaktifkan pernyataan untuk semua kelas dari program Utama kami,

java -ea Main

Untuk mengaktifkan hanya satu kelas,

java -ea:AnimalClass Main

Ini memungkinkan pernyataan hanya dalam AnimalClass di Main program.

Aktifkan pernyataan dalam nama paket

Untuk mengaktifkan pernyataan untuk paket com.animal dan sub-paketnya saja,

java -ea:com.animal... Main

Aktifkan pernyataan dalam paket tanpa nama

Untuk mengaktifkan pernyataan dalam paket tanpa nama (bila kita tidak menggunakan pernyataan paket) di direktori kerja saat ini.

java -ea:... Main

Aktifkan pernyataan di kelas sistem

Untuk mengaktifkan pernyataan di kelas sistem, kami menggunakan sakelar baris perintah yang berbeda:

java -esa:arguments 

ATAU

java -enablesystemassertions:arguments

Argumen yang dapat diberikan ke sakelar ini adalah sama.


Menonaktifkan Pernyataan

Untuk menonaktifkan pernyataan, kami menggunakan:

java -da arguments 

ATAU

java -disableassertions arguments

Untuk menonaktifkan pernyataan di kelas sistem, kami menggunakan:

java -dsa:arguments

ATAU

java -disablesystemassertions:arguments

Argumen yang dapat diteruskan saat menonaktifkan pernyataan sama dengan saat mengaktifkannya.


Keuntungan Pernyataan

  1. Cepat dan efisien untuk mendeteksi dan memperbaiki bug.
  2. Pemeriksaan pernyataan hanya dilakukan selama pengembangan dan pengujian. Mereka secara otomatis dihapus dalam kode produksi saat runtime sehingga tidak memperlambat eksekusi program.
  3. Ini membantu menghapus kode boilerplate dan membuat kode lebih mudah dibaca.
  4. Memperbaiki dan mengoptimalkan kode dengan peningkatan keyakinan bahwa kode berfungsi dengan benar.

Kapan menggunakan Pernyataan

1. Kode tidak dapat dijangkau

Kode yang tidak dapat dijangkau adalah kode yang tidak dieksekusi saat kita mencoba menjalankan program. Gunakan pernyataan untuk memastikan kode yang tidak dapat dijangkau sebenarnya tidak dapat dijangkau.

Mari kita ambil contoh.

void unreachableCodeMethod() {
  System.out.println("Reachable code");
  return;
  // Unreachable code
  System.out.println("Unreachable code");
  assert false;
}

Mari kita ambil contoh lain dari pernyataan switch tanpa kasus default.

switch (dayOfWeek) {
  case "Sunday":
    System.out.println("It’s Sunday!");
    break;
  case "Monday":
    System.out.println("It’s Monday!");
    break;
  case "Tuesday":
    System.out.println("It’s Tuesday!");
    break;
  case "Wednesday":
    System.out.println("It’s Wednesday!");
    break;
  case "Thursday":
    System.out.println("It’s Thursday!");
    break;
  case "Friday":
    System.out.println("It’s Friday!");
    break;
  case "Saturday":
    System.out.println("It’s Saturday!");
    break;
}

Pernyataan sakelar di atas menunjukkan bahwa hari dalam seminggu hanya dapat menjadi salah satu dari 7 nilai di atas. Tidak memiliki kasus default berarti programmer percaya bahwa salah satu kasus ini akan selalu dieksekusi.

Namun, mungkin ada beberapa kasus yang belum dipertimbangkan di mana asumsi tersebut sebenarnya salah.

Asumsi ini harus diperiksa menggunakan pernyataan untuk memastikan bahwa kasus sakelar default tidak tercapai.

default:
    assert false: dayofWeek + " is invalid day";

Jika hariPekan memiliki nilai selain hari yang valid, sebuah AssertionError dilempar.


2. Mendokumentasikan asumsi

Untuk mendokumentasikan asumsi yang mendasarinya, banyak programmer menggunakan komentar. Mari kita ambil contoh.

if (i % 2 == 0) {
    ...
} else { // We know (i % 2 == 1)
    ...
}

Gunakan pernyataan sebagai gantinya.

Komentar dapat menjadi kedaluwarsa dan tidak sinkron seiring bertambahnya program. Namun, kami akan dipaksa untuk memperbarui assert pernyataan; jika tidak, mereka mungkin gagal untuk kondisi yang valid juga.

if (i % 2 == 0) {
   ...
} else {
    assert i % 2 == 1 : i;
    ...
}

Kapan tidak menggunakan Pernyataan

1. Pemeriksaan argumen dalam metode publik

Argumen dalam metode publik dapat diberikan oleh pengguna.

Jadi, jika pernyataan digunakan untuk memeriksa argumen ini, kondisinya mungkin gagal dan menghasilkan AssertionError .

Alih-alih menggunakan pernyataan, biarkan itu menghasilkan pengecualian runtime yang sesuai dan tangani pengecualian ini.


2. Untuk mengevaluasi ekspresi yang mempengaruhi operasi program

Jangan memanggil metode atau mengevaluasi pengecualian yang nantinya dapat memengaruhi operasi program dalam kondisi asersi.

Mari kita ambil contoh daftar hari kerja yang berisi nama-nama semua hari dalam seminggu.


ArrayList<String> weekdays = new ArrayList<>(Arrays.asList("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ));

ArrayList<String> weekends= new ArrayList<>(Arrays.asList("Sunday", "Saturday" ));

assert weekdays.removeAll(weekends);

Di sini, kami mencoba untuk menghapus elemen Saturday dan Sunday dari ArrayList hari kerja .

Jika pernyataan diaktifkan, program berfungsi dengan baik. Namun, jika pernyataan dinonaktifkan, elemen dari daftar tidak akan dihapus. Hal ini dapat mengakibatkan kegagalan program.

Sebagai gantinya, tetapkan hasilnya ke variabel dan kemudian gunakan variabel itu untuk pernyataan.

ArrayList<String> weekdays = new ArrayList<>(Arrays.asList("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ));

ArrayList<String> weekends= new ArrayList<>(Arrays.asList("Sunday", "Saturday" ));

boolean weekendsRemoved = weekdays.removeAll(weekends);
assert weekendsRemoved;

Dengan cara ini, kami dapat memastikan bahwa semua akhir pekan dihapus dari hari kerja terlepas dari pernyataan yang diaktifkan atau dinonaktifkan. Akibatnya, tidak mempengaruhi operasi program di masa mendatang.


java

  1. Operator Jawa
  2. Komentar Jawa
  3. Pernyataan Java if...else
  4. Java untuk setiap Loop
  5. String Jawa
  6. Antarmuka Jawa
  7. Kelas Anonim Java
  8. Java mencoba-dengan-sumber daya
  9. Anotasi Jawa
  10. Vektor Jawa