1. Neue Funktionen von Java Jdk1.5
1. Generika:
List <String> strs = new ArrayList <string> (); // Geben Sie den Speichertyp für die Sammlung an. Beim Speichern von Daten in der obigen Sammlung müssen die Daten der String gespeichert werden, da der Compiler ansonsten einen Fehler meldet
2.foren
Zum Beispiel können wir die obige Sammlung durch For-Each durchqueren, was es einfacher und klarer macht
für (String S: strs) {System.out.println (s);}HINWEIS: Wenn Sie For-Each verwenden, eine Sammlung zu durchqueren
3. Automatische Unboxing- und Packfunktionen
Die Codekopie lautet wie folgt:
Was bedeutet es?
JDK1.5 definiert eine Kapselungsklasse für jeden grundlegenden Datentyp. Machen Sie die grundlegenden Datentypen in Java auch ihre eigenen Objekte, zum Beispiel: int -> Integer,
doppelt -> doppelt,
lang -> lang,
Char -> Charakter,
float -> float,
boolean -> boolean,
kurz -> kurz,
Byte -> Byte
Automatische Verpackung: Umwandeln Sie Basistypen in Objekte, zum Beispiel: int -> Integer
Automatisches Auspacken: Objekte in grundlegende Datentypen umwandeln, zum Beispiel: Ganzzahl -> int
Das Problem, dass die Sammlung keine grundlegenden Datentypen speichern konnte, bevor JDK1.5 jetzt gelöst werden kann.
4. Aufzählung:
Die Aufzählung ist ein vergleichendes Merkmal, das von JDK1.5 eingeführt wird. Das Schlüsselwort ist Enum
Zum Beispiel: Definieren Sie eine Aufzählung, die eine Ampel darstellt
public enum myenum {rot, grün, gelb}5. Variable Parameter
Was bedeutet es? Lassen Sie mich ein Beispiel geben: Vor JDK1.5, wenn wir mehrere Parameter desselben Typs an eine Methode übergeben wollten, hatten wir zwei Methoden, um es zu lösen, 1. Übergeben Sie direkt ein Array, 2. Übergeben Sie so viele Parameter wie es.
Zum Beispiel:
public void printColor (String rot, String Grün, String gelb) {} oder
public void printColor (String [] Farben) {} Obwohl Schreibmethodenparameter auf diese Weise den gewünschten Effekt erzielen können, ist dies nicht ein bisschen problematisch? Was sollten wir außerdem tun, wenn die Anzahl der Parameter ungewiss ist? Die von Java Jdk1.5 bereitgestellten variablen Parameter können dieses Problem perfekt lösen, z. B.:
public void printColor (String ... Farben) {}
Es kann so definiert werden, was bedeutet es? Wenn die Parameter vom gleichen Typ sind, können Sie das Formular "Typ + drei Punkte, gefolgt von einem Parameternamen" verwenden. Der Vorteil davon ist, dass so lange die Parametertypen gleich sind, es keine Grenze für die Anzahl der übergebenen Parameter gibt: Der variable Parameter muss das letzte Element in der Parameterliste sein (diese Funktion gilt sowohl für Objekt- als auch für grundlegende Datentypen)
6. Statische Import
Vorteile: Die Verwendung des statischen Imports kann alle statischen Variablen und statischen Methoden der importierten Klasse direkt in der aktuellen Klasse sichtbar machen. Die Verwendung dieser statischen Mitglieder muss ihre Klassennamen nicht angeben.
Nachteile: Überbeanspruchung verringert die Lesbarkeit des Codes
7. Thread -Concurrency -Bibliothek
Die Thread -Concurrency -Bibliothek ist eine erweiterte Merkmal des von Java 1.5 vorgeschlagenen Multithreading. Es befindet sich im Paket: java.util.concurrent
enthalten
1. Thread Mutex -Werkzeugklasse Beschreibung: Sperre, Redwritelock
2. Thread Communication Beschreibung: Zustand
3. Fadenpool
Executorservice
3. Synchronisieren Sie die Warteschlange
ArrayBlockingqueue
4. Synchronisieren Sie Sammlungen
Concurrenthashmap, CopyonWriteArrayList
5. Thread -Synchronisationstool
Semaphor
Es gibt immer noch viele (sehr wichtige) Inhalte über Thread -Concurrency -Bibliotheken, daher werde ich sie hier nacheinander nicht auflisten. Interessierte Freunde können sich die Hilfsdokumente ansehen.
2. Neue Funktionen von JDK1.6
1. Desktop -Klasse und SystemTray -Klasse
Ersterer kann verwendet werden, um den Standard -Standardbrowser zum Durchsuchen der angegebenen URL zu öffnen, den Standard -E -Mail -Client zu öffnen, um E -Mails an die angegebene E -Mail -Adresse zu senden, die Standardanwendung zum Öffnen oder Bearbeiten von Dateien zu verwenden (z. B. Notepad, um eine Datei mit TXT als Suffix zu öffnen) und den Systemdefund -Printer verwenden, um Dokumente zu drucken. Letzteres kann verwendet werden, um ein Tablettprogramm im Systemablettungsbereich zu erstellen.
2. Verwenden Sie JAXB2, um die Zuordnung zwischen Objekten und XML zu implementieren
JAXB ist die Abkürzung der Java -Architektur für die XML -Bindung, die ein Java -Objekt in das XML -Format umwandeln und umgekehrt.
Wir rufen die Zuordnung zwischen Objekten und relationalen Datenbanken ORM auf, und tatsächlich kann die Zuordnung zwischen Objekten und XML auch als OXM bezeichnet werden (Objekt XML -Zuordnung). Es stellt sich heraus, dass Jaxb Teil von Java ee ist. In JDK1.6 setzt Sun es in Java SE ein, was auch die übliche Praxis von Sun ist. Die mit JDK1.6 gelieferte JAXB -Version ist 2.0. Im Vergleich zu 1.0 (JSR 31) verwendet JAXB2 (JSR 222) die neue JDK5 -Feature -Annotation, um die zugebenden Klassen und Attribute zu identifizieren, was die Entwicklungsarbeitslast erheblich vereinfacht. Tatsächlich vereinfachen EJB- und Webdienste in Java EE 5.0 auch die Entwicklung durch Annotation. Darüber hinaus verwendet JAXB2 STAX (JSR 173), um XML -Dokumente unten zu verarbeiten.
Zusätzlich zu JAXB können wir die gleichen Funktionen über XMLBeans und Castor usw. erfüllen.
3. Verstehen Sie Stax
STAX (JSR 173) ist eine weitere API für die Verarbeitung von XML -Dokumenten in JDK1.6.0 Zusätzlich zu DOM und SAX.
Herkunft von STAX: Es gibt zwei Möglichkeiten, XML -Dokumente in JAXP1.3 (JSR 206) zu verarbeiten: DOM (Dokumentobjektmodell) und SAX (einfache API für XML).
Da JAXB2 (JSR 222) und JAX-WS 2.0 (JSR 224) in JDK1.6.0 Sun verwenden, beschloss Sun, der JAXP-Familie Stax hinzuzufügen und die JAXP-Version auf 1.4 zu verbessern (JAXP1.4 ist die Wartungsversion von JAXP1.3). Die JAXP -Version in JDK1.6 beträgt 1.4. STAX ist die Streaming-API für die Abkürzung von XML, eine API, die Pull-Parsing-XML-Dokumente verwendet. STAX bietet eine API, die auf einem Ereignis -Iterator basiert, damit Programmierer den Parsingprozess des XML -Dokuments steuern können. Das Programm durchquert diesen Ereignis -Iterator, um jedes Parsing -Ereignis zu verarbeiten. Das Parsing -Ereignis kann als vom Programm herausgezogen angesehen werden. Das Programm fordert den Parser auf, ein Parsing -Ereignis zu erzeugen, und veranlasst dann das Ereignis und veranlasst dann den Parser, das nächste Parsing -Ereignis zu generieren. Diese Schleifen, bis das Dokumentendungscharakter auftritt. SAX verarbeitet auch XML -Dokumente basierend auf Ereignissen, verwendet jedoch den Push -Modus zum Parsen. Nachdem der Parser das vollständige XML -Dokument analysiert hat, generiert es nur Parsing -Ereignisse und drückt sie dann zum Programm, um diese Ereignisse zu verarbeiten. Das DOM übernimmt die Methode, um das gesamte XML -Dokument einem Speicherbaum zuzuordnen, damit die Daten des übergeordneten Knotens, des untergeordneten Knotens und der Bruderknoten leicht erhalten werden können. Wenn das Dokument jedoch groß ist, wird dies die Leistung ernsthaft beeinflussen.
4. Verwenden Sie Compiler API
Jetzt können wir die Compiler -API von JDK1.6 (JSR 199) verwenden, um Java -Quelldateien dynamisch zu kompilieren. Die Compiler -API kombiniert die Reflexionsfunktion, um die dynamische Erzeugung von Java -Code zu erreichen und diese Codes zu kompilieren und auszuführen, was ein wenig dynamischer Sprachfunktion ist.
Diese Funktion ist sehr nützlich für einige Anwendungen, die eine dynamische Kompilierung erfordern, z. B. JSP Web Server. Wenn wir JSP manuell ändern, möchten wir den Webserver nicht neu starten, um den Effekt anzuzeigen. Zu diesem Zeitpunkt können wir die Compiler -API verwenden, um die dynamische Kompilierung von JSP -Dateien zu implementieren. Natürlich unterstützt der aktuelle JSP -Webserver auch die JSP -Hot Deployment. Der aktuelle JSP Web Server ruft Javac über runTime.exec oder ProcessBuilder auf, um den Code während des Betriebs zu kompilieren. Diese Methode erfordert, dass wir einen anderen Prozess für die Kompilierung generieren, was nicht elegant genug ist und der Code einfach von einem bestimmten Betriebssystem abhängt. Die Compiler-API bietet eine reichhaltigere Möglichkeit, eine dynamische Zusammenstellung durch eine Reihe benutzerfreundlicher Standard-APIs durchzuführen, und es ist plattformübergreifend.
5. Leichtes HTTP -Server -API
JDK1.6 bietet eine einfache HTTP -Server -API. Dem zufolge können wir unseren eigenen eingebetteten HTTP -Server erstellen, der die HTTP- und HTTPS -Protokolle unterstützt und einen Teil der Implementierung von HTTP1.1 liefert. Der nicht implementierte Teil kann durch Erweiterung der vorhandenen HTTP -Server -API implementiert werden. Programmierer müssen die HTTPHandler -Schnittstelle selbst implementieren. HTTPServer ruft die Callback -Methode der HTTPHandler -Implementierungsklasse an, um Clientanforderungen zu bearbeiten. Hier rufen wir eine HTTP -Anfrage und ihre Antwort als Austausch an, die in eine HTTPexchange -Klasse eingewickelt ist. Httpserver ist für die Übergabe von HTTPExchange an die Rückrufmethode der HTTPHandler -Implementierungsklasse verantwortlich.
6. API für die Verarbeitung von Steckanträgen (API für Steckanträge für Annotationsverarbeitung)
Die Plug-in-Annotationsverarbeitungs-API (JSR 269) bietet eine Standard-API für Anmerkungen (JSR 175)
Tatsächlich wird JSR 269 nicht nur mit Annotation behandelt. Ich denke, die leistungsstärkere Funktion ist, dass es ein Modell der Java -Sprache selbst festlegt. Es birgt Java -Sprachelemente wie Methode, Paket, Konstruktor, Typ, Variable, Enum, Annotation in Typen und Elemente (was ist der Unterschied zwischen den beiden?), Um die Semantik der Java -Sprache in Objekte zuzuordnen. Wir können diese Klassen unter dem Paket javax.lang.model sehen. So können wir die von JSR 269 bereitgestellte API verwenden, um eine merkmalreiche Metaprogrammierungsumgebung zu erstellen. JSR 269 verwendet Annotationsprozessor, um Annotation während der Zusammenstellung und nicht während des Betriebs zu verarbeiten. Annotationsprozessor entspricht einem Plug-In des Compilers und wird daher als Insertion-Annotationsverarbeitung bezeichnet. Wenn der neue Java -Code generiert wird, wenn Annotationsprozessor Annotation verarbeitet (Ausführung der Prozessmethode), ruft der Compiler erneut Annotationsprozessor auf. Wenn für die zweite Verarbeitung ein neuer Code generiert wird, ruft er Annotation -Prozessor auf, bis kein neuer Code generiert wird. Jedes Mal, wenn die Process () -Methode ausgeführt wird, wird sie als "Runde" bezeichnet, so dass der gesamte Annotationsverarbeitungsprozess als runde Sequenz angesehen werden kann.
JSR 269 ist hauptsächlich als API für Werkzeuge oder Behälter konzipiert. Zum Beispiel möchten wir ein annotationsbasiertes Unit-Test-Framework (z. B. TestNG) festlegen, um Annotation zu verwenden, um die Testmethoden zu identifizieren, die während des Tests ausgeführt werden müssen.
7. Verwenden Sie Konsole, um Konsolenprogramme zu entwickeln
JDK1.6 stellt die Klasse java.io.console aus, die speziell zum Zugriff auf charakterbasierte Konsolengeräte verwendet wird. Wenn Ihr Programm unter Windows oder Terminal unter Linux mit CMD interagieren möchte, können Sie die Konsolenklasse verwenden, um dies zu tun. Wir erhalten jedoch nicht immer die verfügbare Konsole, ob eine JVM zur Verfügung steht, hängt von der zugrunde liegenden Plattform ab und wie das JVM aufgerufen wird. Wenn der JVM in einer interaktiven Befehlszeile (z. B. Windows CMD) gestartet wird und die Eingabe und Ausgabe an anderer Stelle nicht umgeleitet werden, können Sie eine verfügbare Konsoleninstanz erhalten.
8. Unterstützung für Skriptsprachen
Wie: Ruby, Groovy, JavaScript.
9.Common Anmerkungen
Häufige Anmerkungen waren ursprünglich Teil der Spezifikation von Java EE 5.0 (JSR 244), und jetzt setzt Sun einen Teil davon in Java SE 6.0.
Mit der Hinzufügung einer Annotation -Metadatenfunktion (JSR 175) zu Java SE 5.0 verwenden viele Java -Technologien (wie EJB und Webdienste) Annotationsteil, um XML -Dateien zu ersetzen, um laufende Parameter zu konfigurieren (oder deklarative Programmierungen zu unterstützen, z. B. die deklarativen Transaktionen von EJB). Wenn diese Technologien ihre eigenen OTationen für allgemeine Zwecke separat definieren, ist dies offensichtlich ein bisschen doppelte Konstruktion. Daher ist es wertvoll, eine Reihe öffentlicher Annotation für andere verwandte Java -Technologien zu definieren. Es kann eine doppelte Konstruktion vermeiden und gleichzeitig die Konsistenz verschiedener Technologien von Java SE und Java EE sicherstellen.
Die folgenden Listen 10 Anmerkungen Common Annotations Annotation Retention Ziel Beschreibung Erzeugt SourceAnnotation_Type, Konstruktor, Feld, lokal_variable, Methode, Paket, Parameter, Typ. Der durch die Annotation generierte Quellcode wird verwendet, um die generierte Ressource zu kennzeichnen. Der Container injiziert externe Ressourcenabhängigkeiten danach. Es gibt zwei Methoden: feldbasierte Injektion und Setter-basierte Injektion. Ressourcenlaufzeit. Geben Sie gleichzeitig mehrere externe Abhängigkeiten ein. Der Container injiziert alle diese externen Abhängigkeiten in die postkonstruziale Methode. Die Methode wird ausgeführt, nachdem der Container alle Abhängigkeiten injiziert, um die Initialisierungsarbeiten nach Abhängigkeitsinjektion auszuführen. Nur eine Methode kann als Post -Construct -Vorspeise -Laufzeitmethode gekennzeichnet werden. Bevor die Objektinstanz aus dem Container gelöscht werden soll, muss die zu ausgeführte Rückrufmethode als Predestroy Runas -Laufzeittyp gekennzeichnet werden, um die Sicherheitsrolle zu kennzeichnen, die die Methode der beschrifteten Klasse ausführen kann. Diese Sicherheitsrolle muss mit der Sicherheitsrolle des Containers übereinstimmen. Rollen veraltete Laufzeittyp und Methode wird verwendet, um Sicherheitsrollen zu kennzeichnen, die die Ausführung von beschrifteten Klassen oder Methoden ermöglichen. Diese Sicherheitsrolle muss mit der Rolle der Containersicherheit übereinstimmen. Mit der Methode können alle Rollen beschriftete Klassen oder Methoden ausführen. Denyall -Laufzeittyp. Die Methode erlaubt keine Rolle, beschriftete Klassen oder Methoden auszuführen, was darauf hinweist, dass die Klasse oder Methoden im Java EE -Container nicht ausgeführt werden können. Deklarerolen -Laufzeittyp werden verwendet, um Sicherheitsrollen zu definieren, die von der Anwendung getestet werden können. Es wird normalerweise verwendet, um Isuserinrol zu verwenden, um Sicherheitsrollen zu überprüfen.
Beachten:
1. RLANSALED, ALDALL und DENYALL können nicht auf die Rollen der Klasse oder Methode angewendet werden, und Denyall, die in der Klasse gekennzeichnet sind, überschreiben die Rollen, die Erlaubnis, Denyallrunas, Rolllowed, erlauben, denyall und deklarolen nicht zu add. Java SE6.0 enthält nur die Definitionsklassen der ersten fünf Annotationen in der obigen Tabelle und enthält den Motor nicht für die Behandlung dieser Annotationen. Diese Arbeit kann durch die Steckdose -Annotations -Verarbeitungs -API (JSR 269) erledigt werden.
Im Vergleich zu den neuen Funktionen von 1,6 machen uns die neuen Funktionen von 1,7 aufgeregter, da wir uns darauf gefreut und sichtbar und greifbar sind.
3.. Neue Funktionen von JDK1.7
1. Binärer Nennwert
In Java7 kann der Wert der Art der Formung (Byte, kurz, int, lang) durch binäre Typen dargestellt werden. Bei der Verwendung von Binärwerten müssen OB oder OB vor diesem hinzugefügt werden, zum Beispiel:
int a = 0b01111_00000_11111_00000_10101_01010_10; kurz B = (kurz) 0B01100_00000_11111_0; Byte C = (Byte) 0B00000_0001;
2. Unterstützung digitaler Variablen für Gleitlinien
JDK1.7 kann einer Variablen des numerischen Typs eine Folienlinie hinzufügen.
Es gibt jedoch einige Orte, die nicht hinzugefügt werden können
1. Der Anfang und Ende der Zahl
2. Vor und nach dem Dezimalpunkt
3. vor f oder l, zum Beispiel:
int num = 1234_5678_9;
float num2 = 222_33f;
long num3 = 123_000_111l;
3. Die Unterstützung von Switch für die Zeichenfolge
Hatten Sie schon immer ein Fragezeichen? Warum ist C# in Java verfügbar, aber nicht? Ha, aber Java ist auch nach JDK1.7 in Ordnung, zum Beispiel:
String status = "orderState"; Switch (Status) {case "orderCancel": System.out.println ("Order Stornierung"); brechen; Fall "ordnersuccess": System.out.println ("Abonnement erfolgreich"); brechen; Standard: System.out.println ("Status unbekannt"); }4.Ry-with-ressource
Try-with-Resources ist eine Versuchserklärung, die eine oder mehrere Ressourcen definiert. Diese Ressource bezieht sich auf das Objekt, das das Programm nach der Verarbeitung abschließen muss. Versuchen Sie mit Ressourcen stellen Sie sicher, dass jede Ressource nach Abschluss der Verarbeitung geschlossen wird.
Ressourcen, die Try-with-Ressourcen verwenden können, sind:
Jedes Objekt, das die Schnittstelle von java.lang.autoclosenable implementiert.
Zum Beispiel:
public static String ReadFirstLineFromFile (String -Pfad) löst IOException {try (bufferedReader BR = new bufferedReader (neuer FileReader (Pfad))) {return br.readline () aus; }}
In Java 7 und späteren Versionen implementiert BufferedReader die Schnittstelle java.lang.autoclosenable.
Da der BufferedReader in der Erklärung von Try-with-Ressources definiert ist, wird er automatisch ausgeschaltet, unabhängig davon, ob die Versuchserklärung normal oder abnormal ist. Vor Java7 müssen Sie endlich Blöcke verwenden, um dieses Objekt zu schließen.
5. Fangen Sie mehrere Ausnahmen an und stürmen Sie die Ausnahme mit verbesserter Typüberprüfung zurück
Zum Beispiel:
public static void first () {try {bufferedReader reader = new bufferedReader (neuer fileReader (""); Verbindungs con = null; Aussage STMT = con.CreateStatement (); } catch (ioException | }}Vorteile: Die Verwendung eines Fangs zur Verarbeitung mehrerer Ausnahmen ist kleiner und effizienter als die Verwendung mehrerer Fänge, um eine Ausnahme von der durch Verarbeitung einer Ausnahme erzeugten Bytecode zu verarbeiten.
6. Geben Sie Inferenz beim Erstellen von Generika ein
Solange der Compiler die Typ -Parameter aus dem Kontext schließen kann, können Sie generische Parameter durch ein Paar leerer Winkelklammern <> ersetzen. Dieses Paar Klammern wird privat Diamanten genannt. Vor Java SE 7 sollten Sie dies tun, wenn Sie ein generisches Objekt deklarieren
Liste <String> list = new ArrayList <string> ();
Und nach Java SE7 können Sie dies tun
Liste <String> list = new ArrayList <> ();
Da der Compiler die Typ -Parameter der vorherigen (Liste) abschließen kann, können Sie nach der nachfolgenden ArrayList keine generischen Parameter mehr schreiben. Verwenden Sie einfach ein Paar leerer Winkelklammern. Natürlich müssen Sie eine "Diamant" <> tragen, sonst wird es eine Warnung geben.
Java SE7 unterstützt nur eine eingeschränkte Inferenz: Sie können nur den Typ -Inferenz verwenden, wenn der parametrisierte Typ des Konstruktors im Kontext erheblich deklariert wird, andernfalls funktioniert er nicht.
Liste <String> list = new ArrayList <> (); list.add ("a"); // Dies funktioniert nicht list.addall (NeuarrayList <> ()); // Das kann eine Liste sein <? erweitert String> list2 = new ArrayList <> (); list.addall (list2);
7. (keine)
8. Fügen Sie einige neue Tools und Methoden hinzu, um Umweltinformationen zu erhalten
Zum Beispiel:
Dateisystem.getUserHomedir () // Aktuelle Benutzerverzeichnisdateisystem.getUserDir () // Verzeichnis, wo Sie mit dem Java -Prozess 5 Dateisystem starten.
9. sichere Zugabe, Subtraktion, Multiplikation und Abteilung
Zum Beispiel:
int Math.Safetoint (langer Wert) int math.safenegate (int value) Long Math.SafeSubtract (Long Value1, int Wert2) Long Math.Safesubtract (Long Value2, Long Value2) int Math.Safemultiply (int value1, int value2) Long Math. Math.Safenegate (Long Value) int Math.Safeadd (int value1, int value2) Long Math.Safeadd (Long Value1, Int Value2) Long Math.Safeadd (Long Value1, Long Value2) Int Math.SafesUbract (int value1, Int Value2)
Nun, so viel wurde bisher geklärt. Ich werde es später hinzufügen.
Es ist zu beachten, dass Sie keine neuen Funktionen verwenden können, da Sie sich nicht sicher sind, dass es zu Problemen besteht, wenn Sie sich nicht sicher sind.