JavaRush /Java-Blog /Random-DE /Kaffeepause Nr. 190. So konvertieren Sie eine Ganzzahl in...

Kaffeepause Nr. 190. So konvertieren Sie eine Ganzzahl in einen String. Statische und nicht statische innere Klassen in Java

Veröffentlicht in der Gruppe Random-DE

So konvertieren Sie eine Ganzzahl in einen String

Quelle: FreeCodeCamp In diesem Tutorial erfahren Sie verschiedene Möglichkeiten, eine Ganzzahl in eine Zeichenfolge umzuwandeln. Kaffeepause Nr. 190.  So konvertieren Sie eine Ganzzahl in einen String.  Statische und nicht statische innere Klassen in Java - 1Um Variablen von einem Datentyp in einen anderen zu konvertieren, verwendet die Java-Sprache verschiedene Methoden. Im Falle der Konvertierung von Integer in String können Sie eine der folgenden Methoden verwenden:
  • Verwendung der Integer.toString()- Methode .
  • Verwendung der String.valueOf()- Methode .
  • Verwenden der String.format()- Methode .
  • Verwendung der DecimalFormat- Klasse .

So konvertieren Sie eine Ganzzahl in eine Zeichenfolge in Java mit Integer.toString()

Die Methode Integer.toString() benötigt eine zu konvertierende Ganzzahl als Parameter. Beispielsyntax:
Integer.toString(INTEGER_VARIABLE)
Beispielcode:
class IntToStr {
    public static void main(String[] args) {

        int age = 2;
        String AGE_AS_STRING = Integer.toString(age);

        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
    }
}
In diesem Beispiel haben wir ein ganzzahliges Alter erstellt und ihm den Wert 2 zugewiesen . Um die Altersvariable in einen String umzuwandeln, haben wir sie als Parameter an die Methode Integer.toString() übergeben: Integer.toString(age) . Anschließend haben wir diesen neuen String-Wert in einer String-Variablen namens AGE_AS_STRING gespeichert . Schließlich haben wir die neue String-Variable mit anderen Strings kombiniert: „Das Kind ist „ + AGE_AS_STRING + „ Jahre alt“ . Die Frage ist nun: Wird ein Fehler auftreten, wenn wir die Altersvariable einfach ohne Konvertierung mit diesen anderen Zeichenfolgen verketten ?
class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        System.out.println("The child is " + age + " years old");
        // The child is 2 years old
    }
}
Die Ausgabe ist die gleiche wie in dem Beispiel, in dem wir eine Ganzzahl in eine Zeichenfolge konvertieren mussten. Aber woher wissen wir, ob die Typkonvertierung tatsächlich funktioniert hat? Dazu können wir die Variablentypen mithilfe des getClass()- Objekts überprüfen . Etwas wie das:
class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        String AGE_AS_STRING = Integer.toString(age);


        System.out.println(((Object)age).getClass().getSimpleName());
        // Integer

        System.out.println(AGE_AS_STRING.getClass().getSimpleName());
        // String
    }
}
Jetzt können wir überprüfen, dass die Altersvariable bei der Erstellung eine Ganzzahl war und nach der Typkonvertierung zu einem String wurde .

So konvertieren Sie eine Ganzzahl in eine Zeichenfolge in Java mit String.valueOf()

Die Methode String.valueOf() verwendet auch die Variable, die in einen String umgewandelt werden soll, als Parameter.
class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        String AGE_AS_STRING = String.valueOf(age);

        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
    }
}
Der obige Code ähnelt dem Code im vorherigen Abschnitt:
  1. Wir haben eine Ganzzahl namens age erstellt .
  2. Wir haben das ganzzahlige Alter als Parameter an die Methode String.valueOf() übergeben: String.valueOf(age) .
Jetzt können Sie mithilfe des getClass()- Objekts überprüfen, ob die Typkonvertierung funktioniert :
System.out.println(((Object)age).getClass().getSimpleName());
// Integer

System.out.println(AGE_AS_STRING.getClass().getSimpleName());
// String

So konvertieren Sie eine Ganzzahl in eine Zeichenfolge in Java mit String.format()

Die Methode String.format() benötigt zwei Parameter: einen Formatbezeichner und die zu formatierende Variable. Hier ist ein Beispiel:
class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        String AGE_AS_STRING = String.format("%d", age);

        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old

    }
}
In diesem Beispiel haben wir zwei Parameter an die Methode String.format() übergeben: „%d“ und age . „%d“ ist ein Formatbezeichner, der angibt, dass die zu formatierende Variable eine Ganzzahl ist. age , der zweite Parameter, wird in eine Zeichenfolge konvertiert und in der Variablen AGE_AS_STRING gespeichert . Sie können auch die Variablentypen vor und nach der Konvertierung überprüfen:
System.out.println(((Object)age).getClass().getSimpleName());
// Integer

System.out.println(AGE_AS_STRING.getClass().getSimpleName());
// String

So konvertieren Sie eine Ganzzahl in Java mit DecimalFormat in eine Zeichenfolge

Die DecimalFormat- Klasse wird zum Formatieren von Dezimalzahlen in Java verwendet. Es kann auf viele verschiedene Arten verwendet werden, aber zunächst werden wir es verwenden, um eine Ganzzahl in einen String umzuwandeln. Hier ist ein Beispiel:
import java.text.DecimalFormat;

class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        DecimalFormat DFormat = new DecimalFormat("#");


        String AGE_AS_STRING = DFormat.format(age);

        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old


        System.out.println(((Object)age).getClass().getSimpleName());
        // Integer

        System.out.println(AGE_AS_STRING.getClass().getSimpleName());
        // String

    }
}
Schauen wir uns diesen Code an:
  1. Um die DecimalFormat- Klasse in einem konkreten Beispiel verwenden zu können, haben wir sie importiert: import java.text.DecimalFormat; .
  2. Wir haben eine ganzzahlige Variable age erstellt .
  3. Anschließend haben wir ein neues DecimalFormat- Objekt namens DFormat erstellt .
  4. Mithilfe der format()- Methode des Objekts haben wir das Alter in einen String konvertiert: DFormat.format(age); .

Abschluss

In diesem Artikel haben wir über die Konvertierung von Ganzzahlen in Strings in Java gesprochen. Sie haben Codebeispiele gesehen, die drei verschiedene Methoden verwenden: Integer.toString() , String.valueOf() , String.format() und die DecimalFormat- Klasse . Jedes Beispiel zeigt den Konvertierungsprozess und die Überprüfung des Datentyps einer Variablen vor und nach der Konvertierung.

Statische und nicht statische innere Klassen in Java

Quelle: Medium In diesem Artikel lernen Sie die Unterschiede zwischen statischen und nicht statischen inneren Klassen in Java kennen. In Java haben nichtstatische innere Klassen (auch als innere Klassen oder innere Objekte bezeichnet) einen impliziten Verweis auf eine umschließende Instanz der äußeren Klasse. Dies bedeutet, dass sie Zugriff auf Instanzvariablen und Methoden der äußeren Klasse haben und zum Erstellen mehrerer Instanzen der inneren Klasse verwendet werden können, die verschiedenen Instanzen der äußeren Klasse zugeordnet sind. Schauen wir uns den folgenden Code an:
class Outer {
    private int x;
 class Inner {
        public void printX() {
            System.out.println(x);
        }
    }
}
Outer outer1 = new Outer();
outer1.x = 5;
Outer.Inner inner1 = outer1.new Inner();
inner1.printX(); // prints 5
Outer outer2 = new Outer();
outer2.x = 10;
Outer.Inner inner2 = outer2.new Inner();
inner2.printX(); // prints 10
Hier hat die äußere Klasse eine innere Klasse, Inner , die über eine printX- Methode verfügt . Und es gibt wiederum den Wert x aus der umgebenden Outer- Instanz aus . Der Code erstellt zwei Outer- Instanzen ( outer1 und external2 ) und zwei Inner- Instanzen ( inner1 und inner2 ), die jeweils einer anderen Outer- Instanz zugeordnet sind . Wenn printX inner1 und inner2 aufruft , druckt es den Wert x aus der entsprechenden Outer- Instanz . Da nicht statische innere Klassen einen impliziten Verweis auf die umgebende Instanz haben, benötigen sie zusätzlichen Speicher, um diesen Verweis zu speichern. Das bedeutet, dass sie weniger speichereffizient sind als statische innere Klassen, die keinen impliziten Verweis auf die umschließende Instanz haben und für diesen Zweck keinen zusätzlichen Speicher benötigen. Andererseits können statische innere Klassen nicht auf Instanzvariablen oder Methoden äußerer Klassen zugreifen, sodass ihre Fähigkeiten begrenzt sind. Sie sind nützlich, wenn Sie eine Klasse definieren möchten, die eng mit einer äußeren Klasse verbunden ist und keinen Zugriff auf deren Instanzvariablen oder -methoden benötigt. Nicht statische innere Klassen (auch als innere Klassen oder innere Objekte bezeichnet) sind nützlich, wenn Sie eine Klasse definieren möchten, die eng mit einer anderen Klasse verbunden ist und Zugriff auf die Instanzvariablen und -methoden der äußeren Klasse hat.

Verwendung nicht statischer innerer Klassen

Hier sind einige Situationen, in denen Sie möglicherweise eine nicht statische innere Klasse verwenden möchten:
  1. Wenn die innere Klasse auf Instanzvariablen oder Methoden der äußeren Klasse zugreifen muss, die nicht statisch sind . Da nicht statische innere Klassen einen impliziten Verweis auf die umgebende Instanz der äußeren Klasse haben, können sie direkt auf nicht statische Instanzvariablen und -methoden zugreifen.

  2. Wenn Sie mehrere Instanzen einer inneren Klasse definieren möchten, die verschiedenen Instanzen einer äußeren Klasse zugeordnet sind. Beispielsweise möchten Sie möglicherweise eine nicht statische innere Klasse Button für die Dialog- Klasse erstellen , wobei jede Button- Instanz einer anderen Dialog- Instanz zugeordnet ist und auf Instanzvariablen und Methoden der Dialog- Instanz zugreifen kann .

  3. Wenn Sie eine Klasse definieren möchten, die nur im Kontext der äußeren Klasse verwendet wird und nicht für die unabhängige Verwendung vorgesehen ist. Auf nicht statische innere Klassen kann nur von der äußeren Klasse aus zugegriffen werden, sodass sie stärker gekapselt und weniger anfällig für unbeabsichtigte Verwendung sind.

Verwendung statischer innerer Klassen

Wir können statische innere Klassen verwenden, wenn wir keinen Zugriff auf Instanzvariablen oder Methoden der äußeren Klasse benötigen und diese daher keinen impliziten Verweis auf die umgebende Instanz der äußeren Klasse haben müssen. Dadurch sind sie speichereffizienter als nicht statische innere Klassen, die einen impliziten Verweis auf die umgebende Instanz haben. Nehmen wir an, wir müssen einen Graphen entwerfen, der Trajektorien (Kanten) und Schnittpunkte (Knoten) enthält. Die Node- und Edge- Klassen sind eng mit der Graph- Klasse verwandt und werden nur im Kontext eines Graph- Objekts verwendet . Durch die Definition als statische innere Klassen wird deutlich, dass sie Teil der Graph- Klasse sind und nicht für die unabhängige Verwendung gedacht sind.
public class Graph {

    Map <String, Node> nodeMap;

    public Graph () {
        nodeMap = new HashMap<>();
    }

    static class Node {
        String name;
        List <Edge> edgeList;

        public Node(String name) {
            this.name = name;
            edgeList = new ArrayList();
        }
    }

    static class Edge {
        Node source;
        Node Destination;
        String type;

        public Edge(Node source, Node destination, String type) {
            this.Destination = destination;
            this.source = source;
            this.type = type;
        }
    }

}
Statische innere Klassen können nicht auf Instanzvariablen oder Methoden zugreifen. Hier ein Beispiel, um die Tatsache zu veranschaulichen, dass statische innere Klassen nicht auf Instanzvariablen oder Methoden einer äußeren Klasse zugreifen können:
class Outer {
    private int x;
static class Inner {
        public void printX() {
            System.out.println(x);  // compilation error: cannot access x
        }
    }
}
In diesem Beispiel verfügt die Outer- Klasse über eine private Instanzvariable x und eine statische innere Klasse Inner . Die Inner- Klasse verfügt über eine printX- Methode, die versucht, auf den Wert x von der umgebenden Outer- Instanz zuzugreifen . Dieser Code lässt sich jedoch nicht kompilieren, da statische innere Klassen nicht auf Instanzvariablen oder -methoden äußerer Klassen zugreifen können. Um von einer statischen inneren Klasse aus auf Instanzvariablen oder Methoden einer äußeren Klasse zuzugreifen, können Sie:
  1. Erstellen Sie statische Instanzvariablen oder -methoden . Dadurch kann die innere Klasse über den Namen der äußeren Klasse (z. B. Outer.x ) auf sie verweisen .

  2. Übergeben Sie eine Instanz der äußeren Klasse an die innere Klasse und speichern Sie sie in einem Feld. Über dieses Feld kann die innere Klasse dann auf Instanzvariablen oder Methoden der äußeren Klasse zugreifen.

Hier ist ein Beispiel, das zeigt, wie das geht:
class Outer {
    private int x;
public void setX(int x) {
        this.x = x;
    }
    static class Inner {
        Outer outer;
        public Inner(Outer outer) {
            this.outer = outer;
        }
        public void printX() {
            System.out.println(outer.x);
        }
    }
}
Outer outer = new Outer();
outer.setX(5);
Outer.Inner inner = new Outer.Inner(outer);
inner.printX();  // prints 5
In diesem Beispiel verfügt die Outer- Klasse über eine nicht statische setX- Methode , die den Wert von x festlegt , und eine statische innere Klasse Inner mit einem äußeren Feld vom Typ Outer . Die Inner-Klasse verfügt über einen Konstruktor, der eine Outer- Instanz nimmt und sie im äußeren Feld speichert . Die printX- Methode der Inner- Klasse kann dann mithilfe der Outer.x- Notation auf das x- Feld der äußeren Instanz zugreifen .
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION