Java Memorandum (Liste)

Ein Memorandum of Memo

◆ Kompilierungsfehler

-Fehler: \ <Bezeichner > fehlt.

Überprüfen Sie, ob der Typ angegeben ist.

◆ Warnung (Klassendatei wurde generiert)

-VORSicht: Der Vorgang von "Dateiname" ist deaktiviert oder unsicher.

Hinweis: Für weitere Informationen kompilieren Sie erneut mit der Option -Xlint: nicht aktiviert. Überprüfen Sie, ob die Typinferenz von Generics <> beschrieben ist.

◆ Andere

・ Instanzinitialisierer

ArrayList und HashMap können in einer Zeile initialisiert werden.


// {{}}← Dies ist die Syntax des Instanzinitialisierers

List<String> list = new ArrayList<>() {{add("A"); add("B"); add("C");}}

//In Anbetracht der Lesbarkeit ist es wie folgt.

List<String> list = new ArrayList<> {
  { add("A");
    add("B");
    add("C");
  }
}

・ Instanz des Bedieners

Wenn die linke Seite (Instanz) denselben Typ, dieselbe Vererbungsbeziehung oder dieselbe Implementierungsbeziehung wie die rechte Seite (Typ) hat, wird "true" zurückgegeben. Wenn die Typen überhaupt nicht </ font> sind, wird ein Kompilierungsfehler angezeigt.


//·Syntax
//<Beispiel> instanceof <Typ Typ>

class Main{
  public static void main(String... args){
    System.out.println(new A() instanceof B); // false
    System.out.println(new B() instanceof A); // true
    System.out.println(new C() instanceof A); //Kompilierungsfehler
  }
}

class A {}
class B extends A {}
class C {}

- Verhalten des statischen Initialisierers (ausgeführt)

*** - Fall ① Zum Zeitpunkt der Klasseninstanziierung: *** statischer Initialisierer ⇒ Initialisierer (Initialisierungsblock) ⇒ Konstruktor (Der statische Initialisierer wird auch dann ausgeführt, wenn kein statisches Element vorhanden ist.)

*** - case② Beim Zugriff auf das statische Feld: *** ★ Wenn es kein Finale gibt ... Der statische Initialisierer wird unabhängig davon ausgeführt, ob das Feld initialisiert wurde oder nicht. ★ Wenn es endgültig ist ... Wenn das Feld initialisiert wird, wird es nicht ausgeführt. Wenn das Feld nicht initialisiert ist, wird es ausgeführt.

*** - Fall ③ Beim Zugriff auf die statische Methode: *** Mit oder ohne Finale ausgeführt.

· Regeln zum Überschreiben von equals () und hashCode ()

(1) Die hashCode-Methode für dieselbe Instanz sollte denselben ganzzahligen Wert zurückgeben. (2) Wenn die Methode equals "true" ist, sollte die Methode hashCode auch "true" zurückgeben. (3) Wenn die Methode equals "false" ist, kann die Methode hashCode entweder zurückgeben. ④ Wenn die hashCode-Methode "false" ist, sollte die equals-Methode auch "false" zurückgeben.

· Überschriebene Methodenpriorität

Genaue Übereinstimmung> Vererbungsbeziehung> Implizite Typkonvertierung (erweiterte Konvertierung) (Bitkonvertierung)> Autoboxing> Argument variabler Länge

-Hinweise zum Basisdatentyp (Wrapper-Klasse)

★ Typkonvertierung (Implizite Typkonvertierung) ➡︎

byte short int long float double
      |  char  |

⬅︎ (Typumwandlung durch Besetzung)

★ Reduktionsumwandlung ohne Gießen Für Byte, kurz, char, (int), Wenn es innerhalb des gültigen Bereichs liegt, kann der int-Wert ohne Casting empfangen werden. (Long, Float, Double, Zahlen sind nicht erlaubt)

★ Hinweise zur Verwendung von arithmetischen Operatoren In der definierten Variablen wird der Operand auf der rechten Seite als int-Typ behandelt, wenn der Operator (zwei oder mehr Operanden) verwendet wird.

  • Dies gilt nicht, wenn der Variablentyp long, float oder double ist.
byte b1 = 1;
b1 = 1 + 1;    //Kein Problem, wenn Sie keine Variablen verwenden
b1 = --b1;     //Kein Problem bei Inkrementierung
b1 = b1 * 1;   //Kompilierungsfehler
b1 = b1 / b1;  //Kompilierungsfehler

//Ansatz
int b1 = 1;    //Als int-Typ deklariert
b1 = (byte)(b1 * 1);  //Besetzung

・ Verschachtelte Klasse

★ Arten von Verschachtelungsklassen

  • Verschachtelte Klasse --Inner-Klasse (nicht statische Klasse)
  • Lokale Klasse (Klasse in Methode)
  • Anonyme Klasse
  • statische Klasse

★ Verschachtelte Klassenregeln

  • statisch / nicht statisch gemeinsam
  • Der gleichnamige Klassenname der äußeren Klasse kann nicht verwendet werden
  • Zugriffsmodifikatoren können verwendet werden
  • Abstrakte, endgültige Modifikatoren können verwendet werden
  • Schnittstelle und abstrakte Klasse können definiert werden
  • Nur statische Klasse
  • Kann nicht statische / statische Elemente haben
  • Zugriff auf Instanzvariablen, die in der äußeren Klasse definiert sind
  • Nur nicht statische Klassen
  • Statische Mitglieder können nicht definiert werden
  • Zugriff auf Instanzvariablen, die in der äußeren Klasse definiert sind --Andere
  • Verschachtelte Klassen (IF, abstract, class) können in Schnittstellen und abstrakten Klassen definiert werden
  • Äußere Klassen können implementiert und erweitert werden
//Innere Klasse(Nicht statische Klasse)Instanziierungssyntax für
Äußerer Klassenname.Name der inneren Klasse Variablenname=neue äußere Klasse().neuer innerer Klassenname();

//Syntax zur Instanziierung statischer Klassen
Äußerer Klassenname.statischer Klassenname Variablenname= new Äußerer Klassenname.statischer Klassenname();

//Definitionsbeispiel
class Outer{
  abstract class A {abstract void hoge();}
  class B extends A {void hoge(){}}
  static interface X {void bar();}
  static class Y implements X {public void bar(){}}
} 

★ Lokale Klassenregeln

  • Zugriffsmodifikator nicht verfügbar --Statischer Modifikator nicht verfügbar
  • Abstrakte und endgültige Modifikatoren verfügbar
  • Zugänglich für Mitglieder der äußeren Klasse
  • Beim Zugriff auf die Argumente und lokalen Variablen der Methoden der äußeren Klasse von der lokalen Klasse aus muss jede Variable eine im Wesentlichen endgültige Variable (Konstante) sein. (Wird im Wesentlichen als endgültig behandelt, auch wenn es nicht endgültig qualifiziert ist. Daher kann es nicht neu zugewiesen werden.)

★ Anonyme Klassenregeln

  • Zugriffsmodifikator nicht verfügbar --Statischer Modifikator nicht verfügbar --Abstrakt, endgültiger Modifikator nicht verfügbar
  • Zugänglich für Mitglieder der äußeren Klasse
  • Zugriff auf Methodenargumente der äußeren Klasse und lokale Variablen als wesentliche endgültige Variablen --Construct kann nicht definiert werden
  • Da es als Ausdruck behandelt wird, ist am Ende ein Semikolon erforderlich.

・ Funktionsschnittstelle

★ Voraussetzungen, um eine funktionale Schnittstelle zu werden

  • Die Schnittstelle muss eine einzige abstrakte Methode haben --Statische Methode und Standardmethode können definiert werden
  • Die öffentliche Methode der Klasse java.lang.Object kann als abstrakte Methode </ font> deklariert werden
  • Wenn Sie es als funktionale Schnittstelle angeben möchten, fügen Sie die Annotation "@FunctionalInterface" hinzu.

Recommended Posts