V Javě strictfp je modifikátor, který znamená striktní pohyblivou desetinnou čárku, která nebyla zavedena v základní verzi Javy, protože byla představena v Javě verze 1.2. Používá se v Javě pro omezení výpočtů s plovoucí desetinnou čárkou a zajištění stejného výsledku na každé platformě při provádění operací s proměnnou s plovoucí desetinnou čárkou.
Výpočty s pohyblivou řádovou čárkou jsou závislé na platformě, tj. různého výstupu (hodnoty s pohyblivou řádovou čárkou) je dosaženo, když je soubor třídy spuštěn na různých platformách (16/32/64bitové procesory). K vyřešení tohoto typu problému bylo ve verzi JDK 1.2 zavedeno klíčové slovo strictfp následujícím způsobem IEEE 754 standardy pro výpočty s pohyblivou řádovou čárkou.
Poznámka: Modifikátor strictfp se používá pouze s rozhraními tříd a metodami, ale nelze jej použít s proměnnými, jak je znázorněno níže:
průměr vs průměr
Ilustrace 1: Použití klíčových slov s třídami
strictfp class Test {
// All concrete methods here are implicitly strictfp.
}
Obrázek 2: Použití klíčových slov s rozhraními
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ázek 3: Použití klíčových slov s abstraktní metodou v rozhraní
strictfp interface Test {
double sum();
// Compile-time error here
strictfp double mul();
}
Z výše uvedených ilustrací lze vyvodit některé závěry:
- Když je třída nebo rozhraní deklarováno s modifikátorem strictfp, pak všechny metody deklarované ve třídě/rozhraní a všechny vnořené typy deklarované ve třídě jsou implicitně strictfp.
- strictfp nemůže použít s abstraktními metodami. Lze jej však použít s abstraktními třídami/rozhraními.
- Protože metody rozhraní jsou implicitně abstraktní, nelze strictfp použít s žádnou metodou uvnitř rozhraní.
- Od verze Java 17 NENÍ klíčové slovo strictfp explicitně vyžadováno, protože všechny výrazy s plovoucí desetinnou čárkou jsou přísně hodnoceny.
Pří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:
nastavení webového prohlížeče
Níže můžeme vidět výstup v konzoli.