Test.java

import java.lang.reflect.*;
public class Test {
  public static void main(String[] args) throws Exception {
    // Récupération de la classe Date à partir de son nom
    Class classDate = Class.forName("java.util.Date");
    // Création d'une nouvelle instance, comme avec un new
    Object myDate = classDate.newInstance();
    // Récupération de la méthode toString() de la classe Date
    // La méthode getMethod() a comme premier paramètre le nom de la
    // méthode à récupérer, et comme second le tableau des types de ses
    // paramètres. Passer null comme second argument revient à passer
    // un tableau vide.
    Method myOutput = classDate.getMethod("toString",null);
    // Appel de la méthode toString() sur myDate sans arguments
    System.out.println((String) myOutput.invoke(myDate,null));
    /* Maintenant, on veut créer la date correspondant à un entier 
       long de valeur 0, comme pour le constructeur Date(long date). */
    // Tableau des classes des paramètres du constructeur
    Class[] classParamArray = {long.class};
    // Récupération du constructeur qui prend ces paramètres
    Constructor init = classDate.getConstructor(classParamArray);
    // Tableau des valeurs à passer en argument du constructeur.
    Object[] initParamArray = {new Long(0)};
    // Création de l'instance, comme avec un new Date(0)
    Object dateZero = init.newInstance(initParamArray);
    // Appel de la méthode d'affichage sur dateZero
    System.out.println((String) myOutput.invoke(dateZero,null));
  }
}