strictfp søgeord i java
I Java strengfp er en modifikator, der står for strict floating-point, som ikke blev introduceret i basisversionen af Java, som den blev introduceret i Java version 1.2. Det bruges i Java til at begrænse floating-point-beregninger og sikre det samme resultat på hver platform, mens der udføres operationer i floating-point-variablen.
Floating-point-beregninger er platform-afhængige, dvs. forskelligt output (floating-point-værdier) opnås, når en klassefil køres på forskellige platforme (16/32/64-bit processorer). For at løse denne type problem blev nøgleordet strictfp introduceret i JDK 1.2 versionen ved at følge IEEE 754 standarder for flydende kommaberegninger.
Note: strictfp modifier bruges kun med klassegrænseflader og -metoder, men er ikke anvendelig til at anvende med variabler som illustreret nedenfor:
Illustration 1: Søgeordsbrug med klasser
strictfp class Test {
// All concrete methods here are implicitly strictfp.
}Illustration 2: Søgeordsbrug med grænseflader
strictfp interface Test {
// All methods here becomes implicitly
// strictfp when used during inheritance.
}
class Car {
// strictfp applied on a concrete method
strictfp void calculateSpeed(){}
}Illustration 3: Søgeordsbrug med abstrakt metode i en grænseflade
strictfp interface Test {
double sum();
// Compile-time error here
strictfp double mul();
}Nogle konklusioner kan drages ud fra ovenstående illustrationer som følger:
- Når en klasse eller en grænseflade er erklæret med strictfp-modifikator, er alle metoder, der er erklæret i klassen/grænsefladen, og alle indlejrede typer, der er erklæret i klassen, implicit strictfp.
- strengfp ikke kan bruges med abstrakte metoder. Det kan dog bruges med abstrakte klasser/grænseflader.
- Da metoder til en grænseflade implicit er abstrakte, kan strictfp ikke bruges med nogen metode inde i en grænseflade.
- Fra Java 17 version kræves strictfp nøgleord IKKE eksplicit, da alle floating-point udtryk er strengt evalueret.
Eksempel:
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 = 10 e + 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 ()); } }
Produktion
1.006E11
Produktion:
Nedenfor kan vi se outputtet i konsollen.