A Java nyelven a strictfp egy olyan módosító, amely a szigorú lebegőpontot jelöli, amelyet a Java alapverziójában nem vezettek be, mint ahogy a Java 1.2-es verziójában. Javaban használják a lebegőpontos számítások korlátozására, és ugyanazt az eredményt biztosítják minden platformon, miközben a lebegőpontos változóban hajtanak végre műveleteket.
A lebegőpontos számítások platformfüggőek, azaz különböző kimenetek (lebegőpontos értékek) érhetők el, ha egy osztályfájlt különböző platformokon (16/32/64 bites processzorokon) futtatnak. Az ilyen típusú problémák megoldására a JDK 1.2-es verziójában a strictfp kulcsszót a következőképpen vezettük be IEEE 754 szabványok a lebegőpontos számításokhoz.
Jegyzet: A strictfp módosító csak osztályfelületekkel és metódusokkal használható, de nem alkalmazható változókkal, ahogyan az alábbiakban látható:
1. ábra: Kulcsszóhasználat osztályokkal
strictfp class Test {
// All concrete methods here are implicitly strictfp.
}
2. ábra: Kulcsszóhasználat interfészekkel
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. ábra: Kulcsszóhasználat absztrakt módszerrel egy felületen
strictfp interface Test {
double sum();
// Compile-time error here
strictfp double mul();
}
A fenti ábrákból néhány következtetés vonható le:
script shell végrehajtása
- Ha egy osztályt vagy interfészt szigorúfp módosítóval deklarálunk, akkor az osztályban/interfészben deklarált összes metódus és az osztályban deklarált összes beágyazott típus implicit szigorúfp.
- strictfp nem lehet absztrakt módszerekkel használható. Azonban használható absztrakt osztályokkal/interfészekkel.
- Mivel az interfész metódusai implicit absztraktak, a strictfp nem használható egyetlen interfészen belüli metódussal sem.
- A Java 17-es verziótól a strictfp kulcsszó NEM kötelező kifejezetten, mivel minden lebegőpontos kifejezés szigorúan kiértékelésre kerül.
Példa:
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()); } }
Kimenet
1.006E11
Kimenet:
Alább láthatjuk a kimenetet a konzolban.