V jazyku Java strictfp je modifikátor, ktorý znamená striktnú pohyblivú desatinnú čiarku, ktorá nebola zavedená v základnej verzii Java, ako bola predstavená vo verzii Java 1.2. Používa sa v Jave na obmedzenie výpočtov s pohyblivou rádovou čiarkou a zabezpečenie rovnakého výsledku na každej platforme pri vykonávaní operácií s premennou s pohyblivou rádovou čiarkou.
Výpočty s pohyblivou rádovou čiarkou sú závislé od platformy, t. j. odlišný výstup (hodnoty s pohyblivou rádovou čiarkou) sa dosiahne, keď je súbor triedy spustený na rôznych platformách (16/32/64-bitové procesory). Na vyriešenie tohto typu problému bolo zavedené kľúčové slovo strictfp vo verzii JDK 1.2 nasledujúcim spôsobom IEEE 754 štandardy pre výpočty s pohyblivou rádovou čiarkou.
Poznámka: Modifikátor strictfp sa používa iba s rozhraniami a metódami tried, ale nedá sa použiť s premennými, ako je znázornené nižšie:
Ilustrácia 1: Použitie kľúčových slov s triedami
strictfp class Test {
// All concrete methods here are implicitly strictfp.
}
Obrázok 2: Použitie kľúčových slov s rozhraniami
strictfp interface Test {
// All methods here becomes implicitly
// strictfp when used during inheritance.
}
class Car {
// strictfp applied on a concrete method
strictfp void calculateSpeed(){}
}
Obrázok 3: Použitie kľúčových slov s abstraktnou metódou v rozhraní
strictfp interface Test {
double sum();
// Compile-time error here
strictfp double mul();
}
Z vyššie uvedených ilustrácií možno vyvodiť niektoré závery:
- Keď je trieda alebo rozhranie deklarované s modifikátorom strictfp, potom všetky metódy deklarované v triede/rozhraní a všetky vnorené typy deklarované v triede sú implicitne strictfp.
- strictfp nemôže použiť s abstraktnými metódami. Môže sa však použiť s abstraktnými triedami/rozhraniami.
- Keďže metódy rozhrania sú implicitne abstraktné, strictfp nemožno použiť so žiadnou metódou vo vnútri rozhrania.
- Od verzie Java 17 sa kľúčové slovo strictfp výslovne nevyžaduje, pretože všetky výrazy s pohyblivou rádovou čiarkou sú prísne hodnotené.
Príklad:
Java// Java program to illustrate strictfp modifier // Usage in Classes // Main class class GFG { // Method 1 // Calculating sum using strictfp modifier public strictfp double sum() { double num1 = 10e+10; double num2 = 6e+08; // Returning the sum return (num1 + num2); } // Method 2 // Main driver method public static void main(String[] args) { // Creating object of class in main() method GFG t = new GFG(); // Here we have error of putting strictfp and // error is not found public static void main method System.out.println(t.sum()); } }
Výstup
1.006E11
výstup:
Nižšie vidíme výstup v konzole.