Ich habe versucht zusammenzufassen, was bei der Site-Java-Ausgabe gefragt wurde.

Warum haben Sie sich entschieden, diesen Artikel zu schreiben?

Es ist 5 Monate her, seit ich der aktuellen Seite beigetreten bin. In Gesprächen mit Fachleuten gibt es viele Dinge wie "Warum passiert das?" Und "Was macht diese Beschreibung?" Manchmal habe ich es zusammen nachgeschlagen und gesagt "Ich verstehe!".

Es ist nicht gut, es sofort zu beenden Ich wollte es mir als Memorandum überlassen.

Wenn Sie ähnliche Fragen haben, hoffe ich, dass Sie diesen Artikel nützlich finden.

Hauptthema

Warum kann ich einer Wrapper-Klasse einen primitiven Typwert zuweisen?

Frage

Eines Tages Gespräch

Herr A "Was ist das (int)? " I "** cast ** ist derjenige. ** ändert den Typ **." Herr A "Vielen Dank." ~ Ein paar Tage später ~ Herr A "Ich habe eine Frage, kann ich sie einer Variablen vom Typ Integer zuweisen, ohne einen Wert vom Typ int ** zu geben?" I "Ich kann es schaffen. ** Auto Boxing ** oder ** Unboxing **, es scheint, dass es eine Funktion mit diesem Namen war ..."

public class Sample {

  public void sample(long l) {
    int i = (int) l;
    Integer integer = i;
    log.info("int=[{}], Integer=[{}]", i, integer);
  }
}

Antworten

Java verfügt über eine Funktion, die implizit eine Typkonvertierung durchführt, wenn ein primitiver Typ (int) einer Wrapper-Klasse (Integer) zugewiesen wird, die als Autoboxing ** bezeichnet wird. Im Gegensatz zum Autoboxing wird ** die Funktion, die implizit eine Typkonvertierung von einer Wrapper-Klasse (Integer) in einen primitiven Typ (int) durchführt, als Unboxing ** bezeichnet. Seien Sie vorsichtig beim Entpacken </ font>, ** Die Wrapper-Klasse kann null verarbeiten, da es sich um ein Objekt handelt. Wenn ich jedoch versuche, es einem primitiven Typ zuzuweisen, wird eine NullPointerException ** angezeigt. Lassen Sie uns den Wert im Voraus überprüfen.

  • Liste der primitiven Typen und Wrapper-Klassen
Primitiver Typ Wrapper-Klasse
boolean Boolean
byte Byte
char Character
double Double
float Float
int Integer
long Long
short Short

Nach dem Versuch gibt es ein (), was macht das?

Frage

Eines Tages Gespräch

Herr A "Ich denke, es gibt eine ** try-catch-Anweisung **, aber was ist das Argument nach diesem Versuch?" I "Was ist das ... Lass es uns herausfinden ..."

public void Sample {

  public void sample(Strin url) {
    try (BufferedReader br = new BufferedReader(new FileReader(url))) {
      String line = null;
      while ((line = br.readLine()) != null) {
        System.out.println(line);
      }

    } catch (FileNotFoundException e) {
      e.printStackTrace();

    } catch (IOException e) {
      e.printStackTrace();

    }
  }
}

Antworten

Dies ist eine Beschreibung namens ** Try-with-Resources-Syntax **, die in JavaSE7 und höher verwendet werden kann. Vor javaSE6 musste die Ressource beim Zugriff auf eine Datei oder Datenbank als "close ()" beschrieben werden. ** Try-with-resources schließt Ressourcen automatisch, wenn die try-Klausel beendet wird **.

  • Ausführungsreihenfolge (Ausführung von oben nach unten)
  • Try-with-Resources-Teil (try () Teil)
  • In der try-Klausel
  • Try-with-Resources-Methode close ()
  • In der catch-Klausel
  • Schließlich in der Klausel
  • Andere Hinweise usw.
  • Wenn eine Ausnahme in der try-Klausel auftritt und close () auch eine Ausnahme auslöst, ** wird die in der try-Klausel aufgetretene Ausnahme ausgelöst **.
  • Wenn Sie die von close () ausgelöste Ausnahme verwenden möchten, können Sie mit ** ex.getSuppressed () ** ein Array von Throwables abrufen.
  • Die Ausführungsreihenfolge von "close ()" ist die umgekehrte Reihenfolge, in der die Ressourcen deklariert werden.
  • Wenn Sie die finally-Klausel schreiben, wird die finally-Klausel ausgeführt. ** Ausnahmen, die durch Try-with-Resources ausgelöst werden, können jedoch nicht verwendet werden **.
  • Wenn Sie Ihre eigenen Ressourcen verwenden möchten, können Sie dies tun, indem Sie die "AutoClosable-Schnittstelle" implementieren.

Warum erfordern einige Ausnahmen Würfe und andere nicht?

Frage

Eines Tages Gespräch

Herr A "Ich möchte nach dieser Quelle fragen, was ist ** wirft ?" I " Ich schreibe nur explizit die Ausnahmen, die die Methode auslösen könnte ** Ist es nicht **? ** Es ist möglich, ohne sie zu kompilieren ...? **" Mr. A "Ich werde wütend, wenn ich lösche ** wirft AAAException, richtig? ... Warum?" Ich "... warum? ** Ich muss keine BBBException schreiben ** ..."

python


public class Sample {

  public Object sample(String url, Request request) throws AAAException {

    XXXClient client = new XXXClient();

    try {
      return client.request(url, reuqest);

    } catch (AAAException ex) {
      log.error("Eine Art Protokoll", ex);
      throw ex;

    } catch (BBBException ex) {
      log.error("Eine Art Protokoll", ex);
      throw ex;

    }
  }
}

Antworten

In Java gibt es zwei Arten von Ausnahmen: ** geprüfte Ausnahmen (geprüfte Ausnahmen) ** und ** ungeprüfte Ausnahmen (ungeprüfte Ausnahmen) **. (Genau genommen gibt es einen ** Fehler **, der hier jedoch weggelassen wird.) ** Benötigt Würfe für Methoden, die geprüfte Ausnahmen verursachen können **. In diesem Beispiel war ** AAAException eine aktivierte Ausnahme, daher waren Würfe erforderlich, und BBBException war eine nicht aktivierte Ausnahme, sodass keine Würfe hinzugefügt werden mussten **.

  • Inspektionsausnahme

  • Ausnahme, die auch dann ausgelöst wird, wenn Sie sie korrekt schreiben und sich wie erwartet verhalten (≒ im Implementierungsprogramm kann nichts getan werden)

  • Dies ist ein vorhersehbarer Fehler, daher müssen Sie den Anrufer zwingen, ihn zu behandeln (Würfe erforderlich).

  • Unterklasse von java.lang.Exception

  • IOException… E / A-Fehler

  • FileNotFoundException… Datei nicht gefunden

  • SQLException ... SQL-Fehler ... usw.

  • Es scheint ein Konzept zu sein, das nur Java </ font> hat

  • Deaktivierte Ausnahme

  • Ausnahmen aufgrund verschiedener Ursachen (≒ kann durch das Implementierungsprogramm vermieden werden)

  • Da es schwierig ist, alle möglichen Muster vorherzusagen, ist der Anrufer nicht gezwungen, damit umzugehen, und die Ausführung wird gestoppt.

  • Unterklasse von java.lang.RuntimeException

  • NullPointerException… Wert ist NULL

  • NumberFormatException… Wert kann nicht in eine Zahl konvertiert werden

  • ArrayIndexOutOfRangeException… Es liegt außerhalb des Bereichs der Liste oder des Arrays …… usw.

  • Andere Sprachen haben grundsätzlich nur ungeprüfte Ausnahmen </ font>

  • Einfaches Klassendiagramm 無題.png

Schließlich

Die Ausgabe an jemanden ist eine Gelegenheit, um zu sehen, ob Sie sich selbst wirklich verstehen. Als ich es noch einmal nachschlug, vertiefte ich mein Verständnis und lernte viel. Wir werden es von Zeit zu Zeit weiter aktualisieren!

Bis zum Ende Danke fürs Lesen!

Recommended Posts