Ok, résumé des bases en Java :
Une classe est un "moule" d'après lequel sont formé tous les "objets". Réciproquement, tous les objets sont des "instances" de la classe.
Le mot clé "this" désigne l'instance en cours.
Le mot clé "static", devant une méthode, précise que cette méthode ne fait pas partie de chaque objet, mais est une méthode globale, pour tous les objets de cette classe.
Employer this dans une méthode static, c'est désigner l'instance en cours alors que justement, il n'y a pas d'instance en cours. Un peut comme de demander où sont les roues non d'une voiture, mais de l'usine qui fabrique les voitures! La dernière fois que j'ai vérifié, les usines ne sont pas montées sur roues!
Le problème n'est donc pas la syntaxe, mais bien votre modélisation : il ne s'agit pas d'une faute de langage, mais plutôt d'une phrase insensée.
La bonne méthode :
Dans la méthode main, il n'y a pas d'instance en cours. Hors, vous en voulez une. Le plus simple consiste à déplacer tout le code actuellement contenu dans main vers une méthode non statique. Dans la méthode main, créez une instance (via new) puis appelez la méthode contenant le code de l'application.
Exemple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
// les imports
public class Application {
// les variables
static Application applicationInstance;
private Application() {
// initialisation
}
public static void main(String[] args) {
Application.applicationInstance = new Application();
Application.applicationInstance.runApplication(args);
}
private void runApplication(String[] args) {
// code applicatif
}
private void finalize() {
// fin de l'application, libération des ressources et tout ça
}
} |
runApplication peut contenir autant d'appels à this que vous voulez. Remarquez que le constructeur, le destructeur et la méthode runApplication de la classe application sont privés : il n'y a que la classe Application qui ait le droit de se lancer elle-même, lors de l'appel à main.