В Java strictfp е модификатор, който означава стриктна плаваща запетая, която не е въведена в базовата версия на Java, както е въведена в Java версия 1.2. Използва се в Java за ограничаване на изчисленията с плаваща запетая и осигуряване на един и същ резултат на всяка платформа, докато се извършват операции в променливата с плаваща запетая.
Изчисленията с плаваща запетая зависят от платформата, т.е. различен изход (стойности с плаваща запетая) се постига, когато файл с клас се изпълнява на различни платформи (16/32/64-битови процесори). За да се реши този тип проблем, ключовата дума strictfp беше въведена във версията JDK 1.2, като се следва IEEE 754 стандарти за изчисления с плаваща запетая.
Забележка: Модификаторът strictfp се използва само с интерфейси и методи на класове, но не е приложим за прилагане с променливи, както е илюстрирано по-долу:
Илюстрация 1: Използване на ключови думи с класове
strictfp class Test {
// All concrete methods here are implicitly strictfp.
}
Илюстрация 2: Използване на ключови думи с интерфейси
strictfp interface Test {
// All methods here becomes implicitly
// strictfp when used during inheritance.
}
class Car {
// strictfp applied on a concrete method
strictfp void calculateSpeed(){}
}
Илюстрация 3: Използване на ключова дума с абстрактен метод в интерфейс
strictfp interface Test {
double sum();
// Compile-time error here
strictfp double mul();
}
От горните илюстрации могат да се направят някои заключения, както следва:
- Когато клас или интерфейс е деклариран с модификатор strictfp, тогава всички методи, декларирани в класа/интерфейса, и всички вложени типове, декларирани в класа, са неявно strictfp.
- strictfp не може да се използва с абстрактни методи. Въпреки това може да се използва с абстрактни класове/интерфейси.
- Тъй като методите на интерфейс са имплицитно абстрактни, strictfp не може да се използва с който и да е метод в интерфейс.
- От версия на Java 17 ключовата дума strictfp НЕ се изисква изрично, тъй като всички изрази с плаваща запетая се оценяват стриктно.
Пример:
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()); } }
Изход
1.006E11
Изход:
По-долу можем да видим изхода в конзолата.