A voir également:
- Classe interne static
- Stockage interne du téléphone - Accueil - Guide Android
- Erreur interne badoo - Forum Vos droits sur internet
- Ouvrez cette page. dans le code de la page, modifiez la couleur de fond de la classe .pix. un code de 4 chiffres doit apparaître dans la grille. lequel ? ✓ - Forum Programmation
- Ombre interne illustrator ✓ - Forum Illustrator
- Couper un morceau d'ombre portée - Illustrator ✓ - Forum Illustrator
7 réponses
En quel langage ? Qu'appelle tu une classe statique ?
En C/C++ une variable statique déclarée en dehors d'une fonction se comporte comme une variable globale mais cantonnée à ce fichier.
En C/C++ une variable déclarée statique dans une fonction garde sa valeur et n'est accessible que dans cette fonction. On peut s'en servir par exemple pour compter le nombre de fois que cette fonction a été appelée.
En C++ un membre de classe ou de structure classique est partagé par toutes les instances de la classe/structure. On peut par exemple compter le nombre d'instance de cette classe.
En C++ une méthode statique permet de déclarer une fonction avec un prototype homogène à une fonction déclarée en dehors de la classe de la méthode (elle n'est donc pas appliquée à this contrairement aux méthodes classiques), mais bénéficiant des permissions de cette méthode (entre autres l'accès aux variables privées et protégées).
Bonne chance
En C/C++ une variable statique déclarée en dehors d'une fonction se comporte comme une variable globale mais cantonnée à ce fichier.
En C/C++ une variable déclarée statique dans une fonction garde sa valeur et n'est accessible que dans cette fonction. On peut s'en servir par exemple pour compter le nombre de fois que cette fonction a été appelée.
En C++ un membre de classe ou de structure classique est partagé par toutes les instances de la classe/structure. On peut par exemple compter le nombre d'instance de cette classe.
En C++ une méthode statique permet de déclarer une fonction avec un prototype homogène à une fonction déclarée en dehors de la classe de la méthode (elle n'est donc pas appliquée à this contrairement aux méthodes classiques), mais bénéficiant des permissions de cette méthode (entre autres l'accès aux variables privées et protégées).
Bonne chance
AKAInfo, bonjour et bonjour aussi à mamiemando
Mamiemando t'as parlé du C++, si c'est de java dont tu parle, voici quelques précisions :
Une classe qi n'est pas une classe nterne ne peut pas etre déclarée static en java.
Cela s'explique assez facilement puisqu'une classe interne static en java signifie qu'on peut l'instancier sans avoir une instance de la classe parente (englobante)
On crée souvent des classes internes statiques pour décrire des paramètres complexes qui sont plus pratiques à passer qu'une ribanbelle d'argument aux fonctions.
Par exemple, si j'ai une classe Parseur, je peut déclarer une méthode parse(MesParametres p)
et déclarer une classe interne
public static MesParametres
{
private String nomfichier;
private String repertoiresortie;
private int typeParsing;
private int typeFichier;
public MesParametres()
{
}
public setNomFichier(String pnomfichier)
{
nomficier = pniomfichier;
}
.... les autres mutateurs
}
Si elle est de type package ou publique, d'autres classes pourront instancier des objet de ce type.
On est aussi obligé de déclarer une classe interne en statique dans le cas où une classe est une classe utilitaire (sans instance).
Il ne faut pas non plus oublier qu'une classe interne non statique est liée très étroitement à l'instance de la classe englobante, à tel point qu'elle voit les attributs et les méthodes de la classe parente comme si c'était les siens, alors que la classe interne statique n'aura accès qu'aux méthodes et membre statiques de la classe parente.
Pour ma part, je me sert souvent des classes non statiques, mais private pour déclarer des classes internes nommée de runnable pour une classe qui a besoin de lancer des thread.
Et je me sert des classes internes nommées statiques pour décrire des paramètres complexes.
par contre, je suis totalement allergique aux classes interne anonymes qui à mon sens sont une source de confusion et n'apportent rien d'autre qu'une complexité inutile. De plus c'est difficile à modéliser et donc à faire comprendre aux autres membres de l'équipe.
Mamiemando t'as parlé du C++, si c'est de java dont tu parle, voici quelques précisions :
Une classe qi n'est pas une classe nterne ne peut pas etre déclarée static en java.
Cela s'explique assez facilement puisqu'une classe interne static en java signifie qu'on peut l'instancier sans avoir une instance de la classe parente (englobante)
On crée souvent des classes internes statiques pour décrire des paramètres complexes qui sont plus pratiques à passer qu'une ribanbelle d'argument aux fonctions.
Par exemple, si j'ai une classe Parseur, je peut déclarer une méthode parse(MesParametres p)
et déclarer une classe interne
public static MesParametres
{
private String nomfichier;
private String repertoiresortie;
private int typeParsing;
private int typeFichier;
public MesParametres()
{
}
public setNomFichier(String pnomfichier)
{
nomficier = pniomfichier;
}
.... les autres mutateurs
}
Si elle est de type package ou publique, d'autres classes pourront instancier des objet de ce type.
On est aussi obligé de déclarer une classe interne en statique dans le cas où une classe est une classe utilitaire (sans instance).
Il ne faut pas non plus oublier qu'une classe interne non statique est liée très étroitement à l'instance de la classe englobante, à tel point qu'elle voit les attributs et les méthodes de la classe parente comme si c'était les siens, alors que la classe interne statique n'aura accès qu'aux méthodes et membre statiques de la classe parente.
Pour ma part, je me sert souvent des classes non statiques, mais private pour déclarer des classes internes nommée de runnable pour une classe qui a besoin de lancer des thread.
Et je me sert des classes internes nommées statiques pour décrire des paramètres complexes.
par contre, je suis totalement allergique aux classes interne anonymes qui à mon sens sont une source de confusion et n'apportent rien d'autre qu'une complexité inutile. De plus c'est difficile à modéliser et donc à faire comprendre aux autres membres de l'équipe.
re-bonjour AKA_nfo !
Je suis content que les explications fournies te conviennent.
Pour ce qui est des fichiers textes ou binaires, ceci n'est pas du tout spécifique java.
La plupart des langages fournissent des moyens d'accès, en lecture et en écriture à des fichiers de type texte et des fichiers de type binaires.
Il y a beaucoup de façon de différencier ces 2 types de fichiers, mais pour simplifier on peut les décrire comme suit (attention, ceci n'est pas exhaustif et pas très académique, c'est juste pour tenter d'expliquer simplement) :
Les fichiers textes :
Un fichier texte est une suite de lignes d'octets en principe humainement lisible au sens que chaque octet représente un caractère visualisable ou imprimable.
Les caractères sont généralement regroupés en lignes qui ne sont rien d'autres qu'une suite d'octets terminée par un ou 2 caractères spéciaux.
Pour les fichiers du monde Unix, le caractère de fin de ligne est le Line Feed, ou LF, ou \n dont le code ascii est 10 ou 0A ne hexadecimal.
Pour les fichiers du monde Dos/windows, les lignes se terminent par 2 caractères, le Carriage Return, ou CR ou \r de code ascii 13 ou 0D en hexa.
Généralement, un fichier ouvert en mode texte est lu ligne par ligne, du début à la fin. Si on écrit dedans,, soit on écrase le contenu initial, soit on écrit en fin de fichiers de nouvelles lignes, mais on n'écrit en principe pas au milieu.
L'API de lecture lit une ligne dans une chaine de caractère, en principe en éliminant les caractères de fin de ligne.
Lorsqu'on écrit dans un fichier texte, l'ajout des caractères de fin de ligne est automatique, on n'a pas besoin de les mettre dans la chaîne à écrire.
Pour résumer, quand je lis un fichier texte, je fais(en pseudo-langage) :
ouvre fichier en mode texte/lecture
while(laligne = readLine() != null)
{
traiter(laligne);
}
fermefichier();
Pour écrire dans un fichier texte
ouvrirficier en mode texte/apend ou en mode texte/truncate
Dans le 1er cas on ajoute les lignes à la fin du fichier, alors que dans le 2ième cas, on écrase l'ancien contenu.
for(int i = 0; i < monbuffer.length();++i)
{
writeLine(monbuffer[i]);
}
fermerFichier();
quelsquels exemples de fichiers textes :
fichier source .java, fichier HTML, ficher XML, fichier batch de dos ou .vbs, ou .js ou .cpp, .h etc...
Les fichier binaires :
Ils peuvent être vu comme des tableau d'octets de taille extensible, et conservés sur disque.
Les octets contenus ont de valeurs quelconques, et ne correspondent généralement pas à des caractères.
Par exemple, un fichier .class d'une classe java complée est un fichier binaire.
Mais il y en a plein d'autres : fichiers pdf, gig, jpg,png, .doc (word), .xls (Excel), et même les fichiers d'une base mysql par exemple.
Je ne rentrerais pas dans les raisons que peuvent pousser utiliser des fichiers binaires en lecture ou en écriture, mais je vais juste dire ce qui différe losqu'on veut lire ou écrire dedans.
Le principe est :
J'ouvre un fichier en lecture seule ou en lecture/écriture.
Je positionne (seek) le pointeur de fichier qui est une sorte de curseur qui peut se déplacer en avant ou en arrière à n'importe quel endroit du fichier, et je peux lire, ou écrire, à partir de cette position courante, entre 1 et un nombre quelconque d'octets, qui remplaceront les octets qui se trouvaient précédemment à cette place s'il y en avait, ou qui vont agrandir le fichier (donc le tableau) autant que nécessaire.
Mais ici, pas question de caractère de fin de ligne.
d'ailleurs, essaie d'ouvrir un fichier .class avec un éditeur comme notepad, et voit le résultat !
En général, l'API fourni un moyen de connaître la position du pointeur de fichier (le curseur), se qui permet, au cours des déplacement, de ne pas forcément mémoriser à chaque fois la position courante.
En java, RandomAccessFile est typiquement une classe qui permet de créer, de lire ou d'écrire dans un fichier binaire.
Si tu lis à peu près l'anglais technique, la doc java de sun est très claire sur le fonctionnement de cette classe
tu la trouveras ici :
https://docs.oracle.com/javase/1.5.0/docs/api/java/io/RandomAccessFile.html
Pour créer/ouvrir le fichier, il faut faire un new RandomAccessFile(file, mode)
ou file est soit un objet de type File, soit le nom d'un fichier, et mode une chaîne de caractère qui contiendra "r" pour lecture seule, "rw" en mode lecture/écriture.
Il existe autre modes qui imposent une synchronisation immédiate avec le fichier physique lors d'une écriture (sinon, on est en mode bufférisé, et le flush n'a lieu que si le buffer est plein ou que l'on ferme le fichier.
Il y a une méthode pour connaître la position du curseur : long getFilePointer()
une méthode pour se positionner sur une position (en octet) précise : seek(long position)
Une méthode pour lire un octet, int read(), ou une pour écrire un octet write(int b) ou de tableau de byte : write(byte[] b) et pein d'autres méthodes de lecture et écriture pour différents types de données.
Bon je m'arrête là, parce que je vais finir par t'embrouiller .
De toute façon, si je peux te donner un conseil, si tu apprend le java, lis dès que tu as un peu de temps la doc SUN en particulier la partie Guide to Features - Java Platform et fixe toi des petits programmes à faire sur un sujet donné, comme par exemple lire un fichier XML et le réécrire dans un nouveau fichier en ajoutant un entête personnalisé par exemple dans le nouveau fichier.
Lis aussi les tutoriaux de ce site et de developpez.com, ou s'ils te paraissent trop compliqués, le siteduzero.com
En espérant ne pas avoir été trop confus, et que cela puisse t'aider (et en aider d'autres) bon courage !
Je suis content que les explications fournies te conviennent.
Pour ce qui est des fichiers textes ou binaires, ceci n'est pas du tout spécifique java.
La plupart des langages fournissent des moyens d'accès, en lecture et en écriture à des fichiers de type texte et des fichiers de type binaires.
Il y a beaucoup de façon de différencier ces 2 types de fichiers, mais pour simplifier on peut les décrire comme suit (attention, ceci n'est pas exhaustif et pas très académique, c'est juste pour tenter d'expliquer simplement) :
Les fichiers textes :
Un fichier texte est une suite de lignes d'octets en principe humainement lisible au sens que chaque octet représente un caractère visualisable ou imprimable.
Les caractères sont généralement regroupés en lignes qui ne sont rien d'autres qu'une suite d'octets terminée par un ou 2 caractères spéciaux.
Pour les fichiers du monde Unix, le caractère de fin de ligne est le Line Feed, ou LF, ou \n dont le code ascii est 10 ou 0A ne hexadecimal.
Pour les fichiers du monde Dos/windows, les lignes se terminent par 2 caractères, le Carriage Return, ou CR ou \r de code ascii 13 ou 0D en hexa.
Généralement, un fichier ouvert en mode texte est lu ligne par ligne, du début à la fin. Si on écrit dedans,, soit on écrase le contenu initial, soit on écrit en fin de fichiers de nouvelles lignes, mais on n'écrit en principe pas au milieu.
L'API de lecture lit une ligne dans une chaine de caractère, en principe en éliminant les caractères de fin de ligne.
Lorsqu'on écrit dans un fichier texte, l'ajout des caractères de fin de ligne est automatique, on n'a pas besoin de les mettre dans la chaîne à écrire.
Pour résumer, quand je lis un fichier texte, je fais(en pseudo-langage) :
ouvre fichier en mode texte/lecture
while(laligne = readLine() != null)
{
traiter(laligne);
}
fermefichier();
Pour écrire dans un fichier texte
ouvrirficier en mode texte/apend ou en mode texte/truncate
Dans le 1er cas on ajoute les lignes à la fin du fichier, alors que dans le 2ième cas, on écrase l'ancien contenu.
for(int i = 0; i < monbuffer.length();++i)
{
writeLine(monbuffer[i]);
}
fermerFichier();
quelsquels exemples de fichiers textes :
fichier source .java, fichier HTML, ficher XML, fichier batch de dos ou .vbs, ou .js ou .cpp, .h etc...
Les fichier binaires :
Ils peuvent être vu comme des tableau d'octets de taille extensible, et conservés sur disque.
Les octets contenus ont de valeurs quelconques, et ne correspondent généralement pas à des caractères.
Par exemple, un fichier .class d'une classe java complée est un fichier binaire.
Mais il y en a plein d'autres : fichiers pdf, gig, jpg,png, .doc (word), .xls (Excel), et même les fichiers d'une base mysql par exemple.
Je ne rentrerais pas dans les raisons que peuvent pousser utiliser des fichiers binaires en lecture ou en écriture, mais je vais juste dire ce qui différe losqu'on veut lire ou écrire dedans.
Le principe est :
J'ouvre un fichier en lecture seule ou en lecture/écriture.
Je positionne (seek) le pointeur de fichier qui est une sorte de curseur qui peut se déplacer en avant ou en arrière à n'importe quel endroit du fichier, et je peux lire, ou écrire, à partir de cette position courante, entre 1 et un nombre quelconque d'octets, qui remplaceront les octets qui se trouvaient précédemment à cette place s'il y en avait, ou qui vont agrandir le fichier (donc le tableau) autant que nécessaire.
Mais ici, pas question de caractère de fin de ligne.
d'ailleurs, essaie d'ouvrir un fichier .class avec un éditeur comme notepad, et voit le résultat !
En général, l'API fourni un moyen de connaître la position du pointeur de fichier (le curseur), se qui permet, au cours des déplacement, de ne pas forcément mémoriser à chaque fois la position courante.
En java, RandomAccessFile est typiquement une classe qui permet de créer, de lire ou d'écrire dans un fichier binaire.
Si tu lis à peu près l'anglais technique, la doc java de sun est très claire sur le fonctionnement de cette classe
tu la trouveras ici :
https://docs.oracle.com/javase/1.5.0/docs/api/java/io/RandomAccessFile.html
Pour créer/ouvrir le fichier, il faut faire un new RandomAccessFile(file, mode)
ou file est soit un objet de type File, soit le nom d'un fichier, et mode une chaîne de caractère qui contiendra "r" pour lecture seule, "rw" en mode lecture/écriture.
Il existe autre modes qui imposent une synchronisation immédiate avec le fichier physique lors d'une écriture (sinon, on est en mode bufférisé, et le flush n'a lieu que si le buffer est plein ou que l'on ferme le fichier.
Il y a une méthode pour connaître la position du curseur : long getFilePointer()
une méthode pour se positionner sur une position (en octet) précise : seek(long position)
Une méthode pour lire un octet, int read(), ou une pour écrire un octet write(int b) ou de tableau de byte : write(byte[] b) et pein d'autres méthodes de lecture et écriture pour différents types de données.
Bon je m'arrête là, parce que je vais finir par t'embrouiller .
De toute façon, si je peux te donner un conseil, si tu apprend le java, lis dès que tu as un peu de temps la doc SUN en particulier la partie Guide to Features - Java Platform et fixe toi des petits programmes à faire sur un sujet donné, comme par exemple lire un fichier XML et le réécrire dans un nouveau fichier en ajoutant un entête personnalisé par exemple dans le nouveau fichier.
Lis aussi les tutoriaux de ce site et de developpez.com, ou s'ils te paraissent trop compliqués, le siteduzero.com
En espérant ne pas avoir été trop confus, et que cela puisse t'aider (et en aider d'autres) bon courage !
slt..désolé j'ai oublié de vous signaler que je parle de java ...merci a vous de m'eclairer...maintenant je je comprend l'utilité de déclarer une classe statique ...merci encor java4ever pour cette reponse détaillée.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
slt...j'ai une autre question toujour concernant le langage java ,,,pourquoi parfois on utilise des fichiers binaires au lieu des fichiers texte ,,,et si possible quelque explications concernant la classe RandomAccessFile ...merci d'avance