Java-Tipps, Tipps

Überblick

Versuchen Sie einfach, es so zu formulieren, wie es ist. Ich weiß nicht, ob es nützlich sein wird. Ich denke auch nicht, dass es unbedingt Java-spezifisch ist.

Inhalt

Mehrfachzuweisung

Sie können mehreren Variablen denselben Wert zuweisen.

int x, y;
x = y = 10;
System.out.println(x); // 10
System.out.println(y); // 10

Dies scheint wie folgt interpretiert zu werden. 10 wird y zugewiesen, aber in Java wird auch der Wert des Zuweisungsausdrucks zurückgegeben, was bedeutet, dass der gesamte Auswertungswert von "(y = 10)" x zugewiesen wird.

x = (y = 10);

Wie schreibe ich die Hauptmethode?

Ich denke, dass die Hauptmethode im Allgemeinen wie folgt geschrieben ist.

public static void main(String[] args) {
    System.out.println("Hello world!");
}

Wenn es sich um Java 5 oder höher handelt, können Sie wie folgt schreiben.

public static void main(String... args) {
    System.out.println("Hello world!");
}

Der einzige Unterschied ist "String []" oder "String ...". Ersteres ist ein Array und letzteres ist ein Argument variabler Länge, aber die Hauptmethode scheint beides zu sein.

Nur ein Bereich

Sie können einen neuen Bereich mithilfe der if-Anweisung oder der for-Anweisung erstellen, aber Sie können auch einen einfachen Bereich ohne bedingte Verzweigung oder Schleife erstellen.

{
    int x = 10;
    System.out.println(x);  // 10
}

{
    int x = 100;
    System.out.println(x); // 100
}

// System.out.println(x); //Kompilierungsfehler

x wird zweimal definiert, verursacht jedoch keinen Kompilierungsfehler, da es einen anderen Bereich hat. Da der Gültigkeitsbereich von "x" nur der von der Klammer eingeschlossene Bereich ist, handelt es sich um einen Kompilierungsfehler, wenn Sie versuchen, außerhalb der Klammer auf "x" zu verweisen.

Implementierung von HashSet

HashSet ist eine Klasse, die HashMap einfach als Implementierung umschließt. (* Dies ist eine detaillierte Implementierung, daher kann sie sich in Zukunft ändern.)

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }

AbstractStringBuilder Obwohl StringBuilder und StringBuffer in JavaDoc so geschrieben sind, als wären sie Unterklassen direkt unter der Object-Klasse, sind sie tatsächlich Unterklassen von AbstractStringBuilder. AbstractStringBuilder ist ein privates Paket (keine öffentliche API) und darf nicht in JavaDoc geschrieben werden. (* Dies ist eine detaillierte Implementierung, daher kann sie sich in Zukunft ändern.)

public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, Comparable<StringBuilder>, CharSequence
{
//Unterlassung
 public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, Comparable<StringBuffer>, CharSequence
{
//Unterlassung

Definieren Sie eine Methode innerhalb einer Methode

Normalerweise erlaubt Ihnen Java nicht, eine Methode innerhalb einer Methode zu definieren. Sie können dies jedoch mit dem in Java 10 eingeführten var tun. (Ich habe es in einem anderen Artikel geschrieben)

Main.java


public class Main {
    public static void main(String[] args) {
        // func.capitalize()Kann mit angerufen werden
        //func ist eine lokale Variable und kann von außerhalb dieser Methode nicht aufgerufen werden
        var func = new Object() {
            private String capitalize(String s) {
                return s.substring(0, 1).toUpperCase() + s.substring(1, s.length()).toLowerCase();
            }
        };

        System.out.println(func.capitalize("tokyo")); // => Tokyo
        System.out.println(func.capitalize("TOKYO")); // => Tokyo
    }
}

Führen Sie Java-Quellcode ohne Kompilierung aus

Ich habe dies in einem anderen Artikel geschrieben, aber seit Java 11 können Sie die Quelldatei angeben und mit dem Befehl java ausführen, ohne javac zu verwenden. Dies kann für eine kleine Funktionsprüfung nützlich sein. Nun, ich denke nicht, dass es wirklich ohne Kompilierung läuft, aber es kompiliert hinter den Kulissen.

Betten Sie die Verarbeitung in eine Methode einer vorhandenen Klasse ein

In Java können Sie anonyme Klassen verwenden, um die Verarbeitung in vorhandene Methoden einzubetten.

List<String> list = new ArrayList<>() {
    @Override
    public boolean add(String s) {
        System.out.println("add called. arg: " + s);
        return super.add(s);
    }
};
list.add("hello"); // add called. arg: hello
list.add("world"); // add called. arg: world
System.out.println(list); // [hello, world]

Verwenden Sie "instanceof" für "null"

Sie können instanceof für null verwenden.

System.out.println(null instanceof Object); // false

Es ist natürlich, dass es nicht "wahr" sein wird, aber ich denke, der Punkt von Interesse ist, dass "NullPointerException" nicht ausgelöst werden kann. Das gleiche Ergebnis kann mit einer Variablen erzielt werden, der "null" zugewiesen ist, so dass es nicht erforderlich ist, "null" vor "instanceof" zu überprüfen.

null to throw

Wenn eine Ausnahmetypvariable "null" enthält, löst "throw" unabhängig vom Variablentyp "NullPointerException" aus.

RuntimeException e = null;
throw e; // NullPointerException

Wirke null

Es macht nicht viel Sinn, aber ich kann vorerst keine Ausnahmen machen.

Object obj = null;
String str = (String)obj;
System.out.println(str); // null

Typbestimmung, die keine Unterklassen zulässt

Wenn Sie "instanceof" verwenden, ist dies auch dann "true", wenn der Instanztyp eine Unterklasse der angegebenen Klasse ist.

System.out.println("str" instanceof Object); // true

Wenn Sie für Unterklassen "false" festlegen möchten, können Sie die "Class" -Typen wie unten gezeigt mit "equals" vergleichen.

System.out.println(new Object().getClass().equals(Object.class)); // true
System.out.println("str".getClass().equals(Object.class)); // false

Die Sequenz ist nicht typsicher

Ein Array ist mit einem Array eines Typs und einem Array einer Unterklasse dieses Typs kompatibel. Daher wird der folgende Code kompiliert und zur Laufzeit tritt ein Fehler auf.

Object[] array = new String[3];
array[0] = new Integer(10); // ArrayStoreException

Wenn es sich um eine Liste handelt, die Generika verwendet, tritt das oben genannte Problem nicht auf, da ein Kompilierungsfehler auftritt.

List<Object> list = new ArrayList<String>(); // incompatible types: ArrayList<String> cannot be converted to List<Object>

Überlauf erkennen

Wenn während eines Vorgangs ein Überlauf auftritt, ist das Ergebnis fehlerfrei. In der Klasse "Math" gibt es eine Dienstprogrammmethode, die beim Auftreten eines Überlaufs eine Ausnahme auslöst, sodass Sie den Überlauf erkennen können, indem Sie die Ausnahme abfangen.

System.out.println(Integer.MAX_VALUE + 1); // -2147483648
Math.addExact(Integer.MAX_VALUE, 1); // ArithmeticException: integer overflow

Nun, ich denke, ich sollte von Anfang an "BigInteger" verwenden.

Am Ende

Ich würde mich freuen, wenn es einen Artikel gibt, der als Referenz verwendet werden kann. Wenn Sie sich etwas anderes einfallen lassen, können Sie es hinzufügen oder auch nicht.

Recommended Posts

Java-Tipps, Tipps
Java-Tipps
Java-Code-TIPPS
Spielen Sie Framework2.5 (Java) -Tipps
Java
Java
Java-Tipps - Modifikatoren der StataticUtility-Klasse
Java-Tipps - Zusammenfassung der Federausführung
[Java] Tipps zum Schreiben der Quelle
Java lernen (0)
Java studieren ―― 3
[Java] -Array
Java geschützt
[Java] Anmerkung
Java-Array
Java studieren ―― 9
Java Scratch Scratch
Java-Methoden
Java-Methode
Java (Konstruktor)
Java-Array
[Java] ArrayDeque
Java (überschreiben)
Java (Methode)
Java Day 2018
Java-Zeichenfolge
Java (Array)
Java statisch
Java-Serialisierung
Java Anfänger 4
JAVA hat bezahlt
Java studieren ―― 4
Java (gesetzt)
Java-Shell-Sortierung
[Java] compareTo
Java studieren -5
Java reflektierend 获 获 举
Java (Schnittstelle)
Java-Memorandum
Java-Array
Java studieren ―― 1
[Java] Array
Tipps für Java High Level REST-Clients
[Java] Polymorphismus
Java # 0 studieren
Java-Überprüfung
Java-Framework
Java-Funktionen
[Java] Vererbung
FastScanner Java
Java-Funktionen
Java Anfänger 3
Java-Memo
Java (Kapselung)
Java-Vererbung
[Java] Überladung
Java-Grundlagen
Java dekompilieren
[Java] Anmerkung
Java Note