IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

Class.forName et Class.newInstance


Sujet :

API standards et tierces Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 200
    Points : 67
    Points
    67
    Par défaut Class.forName et Class.newInstance
    Bonjour,
    Je ne vois pas trop la différence entre les méthodes forName et newInstance de la classe Class.
    Est-ce que si je fais:
    Class t = Class.forName("MaClasse");
    t.newInstance;
    Y'aura-il alors 2 instance de la classe "MaClasse" de chargé?

    D'avance merci.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par mafanta Voir le message
    Y'aura-il alors 2 instance de la classe "MaClasse" de chargé?
    Non, une seule. Déclenchée par t.newInstance()

    Citation Envoyé par mafanta Voir le message
    Bonjour,
    Je ne vois pas trop la différence entre les méthodes forName et newInstance de la classe Class.
    Elles n'ont pas de point commun, elles ne se ressemblent pas, ce qu'elles font n'ont rien à voir l'une avec l'autre.

    Class.newInstance() sert à créer une nouvelle instance de la classe demandée (en appelant son constructeur sans paramètre.)
    Pour ça, il faut un objet Class qui représente la classe demandée.

    Class.forName() est une méthode static qui permet d'obtenir l'objet Class qui représente la classe voulue.
    Sans Class.forName(), tu ne pourrais pas appeler newInstance(), puisque tu n'aurais pas de t sur lequel l'appeler.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 200
    Points : 67
    Points
    67
    Par défaut
    Merci thelvin.
    En fait apparemment pour le chargement de certains drivers jdbc on a juste besoin de:
    Class.forName("nom.de.la.classe");
    et pas
    Class.forName("nom.de.la.classe").newInstance();
    Alors pourquoi?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    C'est particulier, c'est typiquement quelque chose qui ne concerne que les drivers JDBC.

    Class.forName() a aussi pour effet de charger la classe, si elle n'était pas déjà chargée.
    (En fait c'est logique : une classe est chargée lors de sa première utilisation, et pas avant. Class.forName() demande l'utilisation de la classe, et donc, si elle n'était pas chargée, ça la charge.)

    Pour se servir d'un driver JDBC, on ne sait pas trop ce qu'il faut instancier ou pas, n'est-ce pas ? On configure la connexion avec un URL de connexion. Genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DriverManager.getConnection("jdbc:mysql://machine/base",login,password);
    "jdbc:mysql://machine/base" est ce qu'on appelle l'URL JDBC. On voit qu'elle indique MySQL... Mais comment sait-elle ce que c'est que MySQL et où trouver son driver ?
    Elle le sait parce que la classe du driver MySQL a été chargée avec Class.forName() et en a profité pour s'enregistrer dans le registre des drivers JDBC reconnus pas URL. Voilà.

    Il n'était pas utile de créer une instance de quoi que ce soit, il fallait seulement charger une classe.
    De nos jours, Java préfère utiliser des méthodes plus élégantes que celle-ci. Mais pour les drivers JDBC, on a toujours fait comme ça, et on continue.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. class pour table + class pour td = class td non fonctionnelle ?
    Par supergrey dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 28/05/2009, 08h13
  2. Recupérer une classe interne avec Class.forName
    Par Pragmateek dans le forum Général Java
    Réponses: 4
    Dernier message: 24/02/2008, 20h53
  3. Class.forName() sur nom de classe "court" ?
    Par Yannick_from_31 dans le forum Langage
    Réponses: 5
    Dernier message: 23/01/2008, 09h03
  4. Problème avec Class.forName
    Par steftanguy dans le forum JDBC
    Réponses: 4
    Dernier message: 14/08/2007, 16h24
  5. Pourquoi utiliser Class.forName().newInstance()
    Par menzlitsh dans le forum Langage
    Réponses: 4
    Dernier message: 27/07/2007, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo