Java állítások (állítási állítás)

Ebben az oktatóanyagban példák segítségével megismerhetjük a Java állítás utasítását (Java állítások).

A Java állításai segítenek a hibák felderítésében az általunk igaznak feltételezett kód tesztelésével.

Az állítás a assertkulcsszó felhasználásával történik.

Szintaxisa:

 assert condition;

Itt conditionvan egy logikai kifejezés, amelyet feltételezünk, hogy igaz, amikor a program végrehajtódik.

Az állítások engedélyezése

Alapértelmezés szerint az állításokat futás közben letiltják és figyelmen kívül hagyják.

Az állítások engedélyezéséhez a következőket használjuk:

 java -ea:arguments

VAGY

 java -enableassertions:arguments

Ha az állítások engedélyezve vannak, és a feltétel megvan true, a program normálisan hajt végre.

De ha a feltétel értékét az falseállítások engedélyezése után értékeli , a JVM dob egy an-t AssertionError, és a program azonnal leáll.

1. példa: Java állítás

 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"); ) ) 

Kimenet

 Egy héten 3 hétvége van 

A fenti kimenetet azért kapjuk, mert ennek a programnak nincsenek fordítási hibái, és alapértelmezés szerint az állítások le vannak tiltva.

Az állítások engedélyezése után a következő kimenetet kapjuk:

 Kivétel a "main" szálban java.lang.AssertionError 

Az állítás másik formája

 assert condition : expression; 

Az állítás ebben a formában egy kifejezést továbbítunk az AssertionErrorobjektum konstruktorának . Ennek a kifejezésnek van egy értéke, amely a hiba részletei üzenetként jelenik meg, ha a feltétel fennáll false.

A részletes üzenet az állítás sikertelenségének információinak rögzítésére és továbbítására szolgál, hogy segítsen a probléma hibakeresésében.

2. példa: Java állítás kifejezési példával

 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"); ) ) 

Kimenet

 Kivétel a "main" szálban java.lang.AssertionError: Egy héten csak 2 hétvége van 

Amint a fenti példából láthatjuk, a kifejezést továbbítjuk az AssertionErrorobjektum konstruktorának . Ha feltételezésünk az, falseés az állítások engedélyezve vannak, akkor egy kivétel egy megfelelő üzenettel kerül megadásra.

Ez az üzenet segít az állítás sikertelenségét okozó hiba diagnosztizálásában és kijavításában.

Az állítás engedélyezése meghatározott osztályokhoz és csomagokhoz

Ha nem adunk meg argumentumokat az állítás parancssori kapcsolóinak,

 java -ea 

Ez lehetővé teszi az állításokat a rendszerosztályok kivételével minden osztályban.

Argumentumok segítségével engedélyezhetjük az állítást bizonyos osztályokhoz és csomagokhoz is. Ezeknek a parancssori kapcsolóknak megadható argumentumok a következők:

Engedélyezze az állítást az osztálynevekben

Az állítás engedélyezéséhez a fő programunk minden osztályához

 java -ea Main

Csak egy osztály engedélyezéséhez

 java -ea:AnimalClass Main

Ez lehetővé teszi az állítást csak AnimalClassa Mainprogramban.

Engedélyezze az állítást a csomagnevekben

Az állítások engedélyezéséhez csak a csomaghoz com.animalés annak alcsomagjaihoz,

 java -ea:com.animal… Main

Engedélyezze az állítást meg nem nevezett csomagokban

Az állítás megnevezése nélküli csomagokban történő engedélyezése (amikor nem használunk csomag utasítást) az aktuális munkakönyvtárban.

 java -ea:… Main

Az állítás engedélyezése a rendszerosztályokban

Az állítás engedélyezéséhez a rendszerosztályokban egy másik parancssori kapcsolót használunk:

 java -esa:arguments 

VAGY

 java -enablesystemassertions:arguments

Az ezeknek a kapcsolóknak megadható érvek ugyanazok.

Az állítások letiltása

Az állítások letiltásához a következőket használjuk:

 java -da arguments 

VAGY

 java -disableassertions arguments 

To disable assertion in system classes, we use:

 java -dsa:arguments

OR

 java -disablesystemassertions:arguments

The arguments that can be passed while disabling assertions are the same as while enabling them.

Advantages of Assertion

  1. Quick and efficient for detecting and correcting bugs.
  2. Assertion checks are done only during development and testing. They are automatically removed in the production code at runtime so that it won’t slow the execution of the program.
  3. It helps remove boilerplate code and make code more readable.
  4. Refactors and optimizes code with increased confidence that it functions correctly.

When to use Assertions

1. Unreachable codes

Unreachable codes are codes that do not execute when we try to run the program. Use assertions to make sure unreachable codes are actually unreachable.

Let’s take an example.

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

Let’s take another example of a switch statement without a default case.

 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; ) 

The above switch statement indicates that the days of the week can be only one of the above 7 values. Having no default case means that the programmer believes that one of these cases will always be executed.

However, there might be some cases that have not yet been considered where the assumption is actually false.

This assumption should be checked using an assertion to make sure that the default switch case is not reached.

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

If dayOfWeek has a value other than the valid days, an AssertionError is thrown.

2. Documenting assumptions

To document their underlying assumptions, many programmers use comments. Let’s take an example.

 if (i % 2 == 0) (… ) else ( // We know (i % 2 == 1)… ) 

Use assertions instead.

Comments can get out-of-date and out-of-sync as the program grows. However, we will be forced to update the assert statements; otherwise, they might fail for valid conditions too.

 if (i % 2 == 0) (… ) else ( assert i % 2 == 1 : i;… ) 

When not to use Assertions

1. Argument checking in public methods

Arguments in public methods may be provided by the user.

So, if an assertion is used to check these arguments, the conditions may fail and result in AssertionError.

Instead of using assertions, let it result in the appropriate runtime exceptions and handle these exceptions.

2. To evaluate expressions that affect the program operation

Do not call methods or evaluate exceptions that can later affect the program operation in assertion conditions.

Let us take an example of a list weekdays which contains the names of all the days in a week.

  ArrayList weekdays = new ArrayList(Arrays.asList("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" )); ArrayList weekends= new ArrayList(Arrays.asList("Sunday", "Saturday" )); assert weekdays.removeAll(weekends); 

Here, we are trying to remove elements Saturday and Sunday from the ArrayList weekdays.

Ha az állítás engedélyezve van, a program jól működik. Ha azonban az állítások le vannak tiltva, a lista elemei nem kerülnek eltávolításra. Ez programhibát okozhat.

Ehelyett rendelje hozzá az eredményt egy változóhoz, majd használja ezt a változót állításhoz.

 ArrayList weekdays = new ArrayList(Arrays.asList("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" )); ArrayList weekends= new ArrayList(Arrays.asList("Sunday", "Saturday" )); boolean weekendsRemoved = weekdays.removeAll(weekends); assert weekendsRemoved; 

Ily módon biztosíthatjuk, hogy az összes hétvégét eltávolítsuk a hétköznapoktól, függetlenül attól, hogy az állítás engedélyezve vagy letiltva van-e. Ennek eredményeként a jövőben nem befolyásolja a program működését.

érdekes cikkek...