[JAVA] Warum die get-Methode in der Calendar-Klasse benötigt wird

Ich bin neu in Java. Sie sind noch nicht zu einem Schluss gekommen? Jedoch nur um der Notiz willen,

Einführung

Ich habe mich gefragt, wann ich die Kalenderklasse verwendet habe.

Gibt es keine get-Methode?

Die Calendar-Klasse verfügt über Getter- und Setter-Methoden, mit denen Sie Jahre, Monate, Tage, Tage usw. abrufen und zuweisen können. Zum Beispiel, wenn Sie das aktuelle Jahr erhalten möchten

import java.util.*;
class CalendarTest {
	public static void main(String args[])
	{
    	Calendar cld = Calendar.getInstance();
    	System.out.println("JAHR Getter Methode →"+cld.get(cld.YEAR));
    }
}

Dies ist mit der Methode and getter möglich.

Ausgabe


JAHR Getter Methode → 2019

Ich habe mich hier gefragt. ** Soll ich cld.YEAR anrufen? **Wann. Selbst wenn Sie sich die API-Referenz ansehen, ist die Zugriffskontrollebene des Felds "YEAR" öffentlich, sodass Sie sie aufrufen können (wenn sie nicht öffentlich ist, können Sie das oben genannte "cld.get (cld.YEAR)" nicht verwenden. ). Wie auch immer, ich werde es überprüfen.

import java.util.*;
class CalendarTest {
	public static void main(String args[])
	{
    	Calendar cld = Calendar.getInstance();
    	System.out.println("JAHR Getter Methode →"+cld.get(cld.YEAR)+",Feld →"+cld.YEAR);
    }
}

Ausgabe


JAHR Getter Methode → 2019,Feld → 1

Hmm? Es scheint, dass das Feld YEAR die Ganzzahl 1 anstelle von 2019 enthält. Es scheint, dass Sie verschiedene Spekulationen anstellen können, aber lassen Sie uns verschiedene Dinge überprüfen.

import java.util.*;
class CalendarTest {
	public static void main(String args[])
	{
    	Calendar cld = Calendar.getInstance();
    	for(int i = 2015; i<2020 ;i++){
    		cld.set(Calendar.YEAR,i);
    		System.out.println("YEAR("+i+")Getter-Methode →"+cld.get(cld.YEAR)+",Feld →"+cld.YEAR);
    	}
    }
}

Ausgabe


YEAR(2015)Getter-Methode → 2015,Feld → 1
YEAR(2016)Getter-Methode → 2016,Feld → 1
YEAR(2017)Getter-Methode → 2017,Feld → 1
YEAR(2018)Getter-Methode → 2018,Feld → 1
YEAR(2019)Getter-Methode → 2019,Feld → 1

Nun, es scheint, dass das Feld "JAHR" immer eine ganze Zahl von 1 hat. Als ich die anderen Felder überprüfte, stellte ich fest, dass das Feld "MONTH" immer 2 und das Feld "DAY_OF_MONTH" immer 5 war.

Ich dachte, ich überprüfe die API-Referenz und ... Wieder wurde jedes Feld als konstant vom Typ "final" deklariert. Fehlende Bestätigung ,,

Ich warf einen Blick in die Kalenderklasse

Vorerst stellte ich fest, dass ich die get-Methode verwenden muss, wie der Titel andeutet. Wird das Feld als konstante Nummer wie eine Seriennummer deklariert?

Was gibt die Getter-Methode anstelle des Feldes zurück? Ich habe das Innere der Kalenderklasse überprüft. Die Getter- und Setter-Methoden sahen so aus.

Calendar.java


class Calendar {
    public int get(int field)
    {
        complete();
        return internalGet(field);
    }

    protected final int internalGet(int field)
    {
        return fields[field];
    }
    
    final void internalSet(int field, int value)
    {
        fields[field] = value;
    }
    
    public void set(int field, int value)
    {
        if (areFieldsSet && !areAllFieldsSet) {
            computeFields();
        }
        internalSet(field, value);
        isTimeSet = false;
        areFieldsSet = false;
        isSet[field] = true;
        stamp[field] = nextStamp++;
        if (nextStamp == Integer.MAX_VALUE) {
            adjustStamp();
        }
    }
}

Wenn man die Details ignoriert, gibt es ein konstantes Feld wie "YEAR" als Index (Index) des Arrays mit dem Namen "fields", und es fühlt sich an, als würde man dem durch das Feld angegebenen Element einen Wert zuweisen oder abrufen.

Impressionen

Ist es nicht in Ordnung, normalerweise einen Wert in jedes Feld einzugeben (wie "public int YEAR = 2001")? Ich konnte dieses Gefühl nicht loswerden.

Ich bin mir nicht sicher, wo die Vorteile von Getter- und Setter-Methoden liegen. (Schließlich verstehe ich die Kapselung oder Objektorientierung nicht.

Es scheint jedoch einfach zu handhaben, dass jedes Element keine eigenen Elemente hat, sondern wie {[Jahr], [Monat], [Tag], ...} in einem Array zusammengefasst ist. Ich habe es gefühlt ^^

Wenn ich Java studiere, weiß ich nicht, wie es geht, und es ist schwierig, Fortschritte zu erzielen ...

Recommended Posts

Warum die get-Methode in der Calendar-Klasse benötigt wird
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
Was ist die Hauptmethode in Java?
Wenn Sie sich im Klassennamen verlieren
Warum PreventDefault benötigt wird
Rufen Sie den Namen des Testfalls in der JUnit-Testklasse ab
[Java] Holen Sie sich das Datum 10 Tage später mit der Calendar-Klasse
Was ist die Zupfmethode?
Was ist die Initialisierungsmethode?
Abrufen des Datums ohne Verwendung der Kalenderklasse
[Java] Abrufen von Datumsinformationen 10 Tage später in Millisekunden in der Datumsklasse
Warum werden Klassenvariablen benötigt? [Java]
[Spring Boot] Bis @Autowired in der Testklasse [JUnit5] ausgeführt wird
Rufen Sie die Super-Methode in Java auf
Fehler, wenn das in SpringWebFlux verwendete Mitglied der Entity-Klasse endgültig ist
Wenn die HTTP-Methode nicht angegeben ist, fordert die Browserseite GET an
Wenn der Bean-Klassenname dupliziert wird
Was ist eine Klasse in der Java-Sprache (3 /?)
Holen Sie sich das Ergebnis von POST in Java
Spring Autowired wird im Konstruktor geschrieben
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist eine Klasse in der Java-Sprache (2 /?)
So erhalten Sie das Datum mit Java
Erhalten Sie eine Fehlermeldung mit einer beliebigen Methode
[Java] Verwendung der Calendar-Klasse
Nach mehreren Feldern in der Klasse sortieren
[Java] Ermitteln Sie das Datum mit der LocalDateTime-Klasse
Ein Teil der Klasse, der von der zu testenden Klasse im JMockit Mock-Methodenmemo aufgerufen wurde
Benennen und rufen Sie in Ruby übergeordnete Klassenmethoden explizit auf
Ruft den Klassennamen und den Methodennamen des Controllers ab, der vom HandlerInterceptor von Spring Boot ausgeführt wird
Rufen Sie den in der Controller-Klasse von Spring Boot definierten Pfad als Liste ab
Klassenmethode
[Java] Ist es nicht erforderlich, "Identität" bei der Implementierung der equals () -Methode zu überprüfen?
Ursache ist nicht sichtbar, wenn Methoden anderer Klassen in Java aufgerufen werden
[Java] Tag ab Datum berechnen (Kalenderklasse nicht verwenden)
[Rails] Das Textlicht von Bootstrap kann nicht von der link_to-Methode geerbt werden, da die Klasse nicht als Argument in der Methode geschrieben ist.
[Bestellmethode] Legen Sie die Reihenfolge der Daten in Rails fest
So erhalten Sie Keycloak-Anmeldeinformationen in der Interceptor-Klasse
[Java] Behandlung von Java Beans in der Methodenkette
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Die Ruby-Version wird in der .rbenv / version-Datei verwaltet
Java-Methodenaufruf von RPG (Methodenaufruf in eigener Klasse)
Holen Sie sich Ihre Versionsnummer in der Android-App
Ausnahmestille ist die schlimmste (warum bringt der Programmierer Ausnahme aus?)
[Java] In der Ausgabe wird etwas als "-0.0" angezeigt
[Java] KFunction von Method / Constructor in Java abrufen [Kotlin]
Wenn das Projekt nicht in Eclipse angezeigt wird
Ebean.update () wird im geerbten Modell nicht ausgeführt.
Ich möchte den Wert in Ruby erhalten
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden