strictfp-avainsana javassa
Javassa strictfp on muokkaus, joka tarkoittaa tiukkaa liukulukua, jota ei otettu käyttöön Javan perusversiossa, koska se otettiin käyttöön Java-versiossa 1.2. Sitä käytetään Javassa liukulukulaskelmien rajoittamiseen ja saman tuloksen varmistamiseen kaikilla alustoilla suoritettaessa toimintoja liukulukumuuttujalla.
Liukulukulaskelmat ovat alustariippuvaisia, eli erilainen tulos (liukulukuarvot) saavutetaan, kun luokkatiedostoa ajetaan eri alustoilla (16/32/64-bittiset prosessorit). Tämän tyyppisen ongelman ratkaisemiseksi strictfp-avainsana otettiin käyttöön JDK 1.2 -versiossa seuraavasti IEEE 754 liukulukulaskujen standardit.
Huomautus: strictfp-muuttajaa käytetään vain luokkarajapintojen ja menetelmien kanssa, mutta sitä ei voida soveltaa muuttujien kanssa, kuten alla on kuvattu:
Kuva 1: Avainsanojen käyttö luokkien kanssa
strictfp class Test {
// All concrete methods here are implicitly strictfp.
}Kuva 2: Avainsanojen käyttö käyttöliittymien kanssa
strictfp interface Test {
// All methods here becomes implicitly
// strictfp when used during inheritance.
}
class Car {
// strictfp applied on a concrete method
strictfp void calculateSpeed(){}
}Kuva 3: Avainsanan käyttö abstraktilla menetelmällä käyttöliittymässä
strictfp interface Test {
double sum();
// Compile-time error here
strictfp double mul();
}Yllä olevista kuvista voidaan tehdä joitain johtopäätöksiä seuraavasti:
- Kun luokka tai liitäntä on ilmoitettu strictfp-muuntimella, kaikki luokassa/rajapinnassa ilmoitetut menetelmät ja kaikki luokassa ilmoitetut sisäkkäiset tyypit ovat implisiittisesti strictfp.
- strictfp ei voi käyttää abstraktien menetelmien kanssa. Sitä voidaan kuitenkin käyttää abstraktien luokkien/rajapintojen kanssa.
- Koska käyttöliittymän menetelmät ovat implisiittisesti abstrakteja, strictfp:tä ei voida käyttää minkään menetelmän kanssa rajapinnan sisällä.
- Java 17 -versiosta alkaen strictfp-avainsanaa EI vaadita erikseen, koska kaikki liukulukulausekkeet arvioidaan tarkasti.
Esimerkki:
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 ()); } }
Lähtö
1.006E11
Lähtö:
Alla näemme ulostulon konsolissa.