Je suis nouveau sur Java. Vous n'êtes pas parvenu à une conclusion? Cependant, juste pour mémoire,
Je me demandais quand j'utilisais la classe Calendar.
La classe Calendar a des méthodes getter et setter qui vous permettent de récupérer et d'attribuer des années, des mois, des jours, des jours, etc. Par exemple, si vous souhaitez obtenir l'année en cours
import java.util.*;
class CalendarTest {
public static void main(String args[])
{
Calendar cld = Calendar.getInstance();
System.out.println("Méthode getter YEAR →"+cld.get(cld.YEAR));
}
}
Cela est possible en utilisant la méthode getter et.
production
Méthode getter YEAR → 2019
Je me suis demandé ici.
** Dois-je appeler cld.YEAR
? **Quand. Même si vous regardez la référence API, le niveau de contrôle d'accès du champ YEAR
est public, vous pouvez donc l'appeler (s'il n'est pas public, vous ne pouvez pas utiliser lecld.get (cld.YEAR) ci-dessus
).
Quoi qu'il en soit, je vais le vérifier.
import java.util.*;
class CalendarTest {
public static void main(String args[])
{
Calendar cld = Calendar.getInstance();
System.out.println("Méthode getter YEAR →"+cld.get(cld.YEAR)+",Champ →"+cld.YEAR);
}
}
production
Méthode getter YEAR → 2019,Champ → 1
Hmm ,? Il semble que le champ YEAR contienne l'entier 1 au lieu de 2019. Il semble que vous puissiez faire diverses spéculations, mais vérifions diverses choses.
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+")méthode getter →"+cld.get(cld.YEAR)+",Champ →"+cld.YEAR);
}
}
}
production
YEAR(2015)méthode getter → 2015,Champ → 1
YEAR(2016)méthode getter → 2016,Champ → 1
YEAR(2017)méthode getter → 2017,Champ → 1
YEAR(2018)méthode getter → 2018,Champ → 1
YEAR(2019)méthode getter → 2019,Champ → 1
Eh bien, il semble que le champ YEAR
ait toujours un entier de 1.
Ainsi, quand j'ai vérifié les autres champs, j'ai trouvé que le champ MONTH
était toujours 2 et le champ DAY_OF_MONTH
était toujours 5.
J'ai pensé, j'ai vérifié la référence de l'API, et ... Encore une fois, chaque champ a été déclaré constant comme de type «final». Manque de confirmation,
Pour le moment, j'ai trouvé que je devais utiliser la méthode get comme le suggère le titre. Le champ est-il déclaré comme un nombre constant comme un numéro de série?
Alors, que renvoie la méthode getter à la place du champ? J'ai vérifié l'intérieur de la classe Calendar. Les méthodes getter et setter ressemblaient à ceci.
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();
}
}
}
En ignorant les détails, il existe un champ constant tel que «YEAR» comme indice (index) du tableau appelé «champs», et cela ressemble à attribuer ou à récupérer une valeur à l'élément spécifié par le champ.
N'est-il pas normal de mettre une valeur dans chaque champ normalement (comme public int YEAR = 2001
)? Je ne pouvais pas me débarrasser de ce sentiment.
Je ne suis pas sûr des avantages des méthodes getter et setter. (Après tout, je ne comprends pas l'encapsulation ou l'orientation des objets.
Cependant, il semble facile de gérer que chacun d'entre eux n'a pas d'éléments séparés, mais est regroupé comme {[année], [mois], [jour], ...} dans un tableau. Je l'ai senti ^^
J'étudie Java, je ne sais pas comment faire, et c'est dur de progresser ...
Recommended Posts