java.lang.Math.abs, die nicht standardmäßig importiert?
Studiere ich für ein Anfänger-Java Prüfung durch Oracle.
Einer der Fragen gegeben, sagt:
int absoluteValue = abs(-21)
Was import-Anweisung wird kompiliert den code?
Richtige Antwort gegeben:
import static java.lang.Math.abs;
Aber meine Frage ist, ob java.lang.*
ist standardmäßig importiert, warum dann ist das Math
Klasse nicht importiert und die abs()
- Methode nicht verfügbar?
import java.lang.*;
!=import static java.lang.Math.*;
- tut java.lang.* nicht bedeuten, dass alle Klassen in der lang-Paket?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil es nicht so ist.
Weil das ist die Art, wie Java funktioniert. Eine implizite (oder explizite) wildcard import der Klassen in einem Paket nur importiert die Klassen. Es nicht auch einen statischen import der Klasse Mitglieder.
Wenn Sie wollen, beziehen sich auf alle statischen Elemente einer Klasse, ohne zu Kennzeichnen, verwenden Sie ein wildcard-static-import; z.B.
Alternativ können Sie statische import einzelner Mitglieder; z.B.
Warum definieren Sie Java auf diese Weise?
Gut, es ist wahrscheinlich Grund dafür ist, dass implizite Import macht es schwerer zu Lesen code. Wenn Methoden wie
abs
erhalten standardmäßig importiert, dann müssen Sie wissen, was Sie alle sind ... und wo Sie sind importiert aus ... um zu verstehen, die wahre Bedeutung des Codes.Ist es wissenswert, dass statische Importe wurden nur Hinzugefügt, in Java 5. Vor, dass es nicht möglich war, beziehen sich auf
Math.abs
ohne dieMath
Qualifikation.Bekommst du nur den Namen der Klasse. Zum Beispiel:
mir erlaubt zu schreiben
new HashMap()
eher alsnew java.util.HashMap()
etcetera. Dies ist von Bedeutung. (Stellen Sie sich vor, wenn man auf Klassen verweisen, indem Sie Ihre vollen Namen ....)zu nennen
abs()
Methode der Klasse name der Klasse mathMath.abs()
Es ist die statische Methode.oder Sie importieren
import static java.lang.Math.abs;
Interne Implementierung
Math
Klasseabsolute()
Methode.abs()
Methode iststatic
Methodejava.lang.*;
können nicht importiert werden statische member der Klasse.Java nicht erlaubt
static
Methode werden standardmäßig importiert. Alle Methoden injava.lang.Math
- Klasse sind statisch. Das ist, warum diese Methode nicht standardmäßig importiert, wo alle Klassen vonjava.lang.*
- Paket ist standardmäßig importiert.Neben
import static java.lang.Math.abs;
- mit dieser Anweisung können Sie die eine der folgenden zwei -Math.abs()
direkt (ohneimport
- Anweisung) rufen Sie dieabs()
Methode. Dies funktioniert aber nur für die statische Methode injava.lang
Paket, da Sie standardmäßig importiert.import static java.lang.Math.*;
In diesem Fall können Sie die
abs()
Methode ohne den Namen der Klasse -Math
. Diese Technik (static-import) wird für alle statischen Methode einer Klasse unter jedem Paket.