منتديات اهل الحق
مرحبا بكم في منتدياتنا منتديات اهل الحق و أرجو من زائرنا العزيز أن يجد كل ما يبحث عنه من مواضيع و برامج ......وشكراا...
منتديات اهل الحق
مرحبا بكم في منتدياتنا منتديات اهل الحق و أرجو من زائرنا العزيز أن يجد كل ما يبحث عنه من مواضيع و برامج ......وشكراا...
منتديات اهل الحق
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.


الرئيسيةالرئيسية  أحدث الصورأحدث الصور  دخولدخول  التسجيلالتسجيل  
آيـــــات الشفاء في القرآن الكريم إن هذه الآيات تجتمع في كل آية فيها كلمة شفاء و تقرأ بترتيب المصحف فقد قال العلماء أن في هذا استعانة بكلام الله على الشفاء و خصوصا بالنسبة للأمراض التي لا تقدر عليها أسباب البشر...وهـــم:- الآية 14 من سورة التوبة: قَاتِلُوهُمْ يُعَذِّبْهُمُ اللّهُ بِأَيْدِيكُمْ وَيُخْزِهِمْ وَيَنصُرْكُمْ عَلَيْهِمْ وَيَشْفِ صُدُورَ قَوْمٍ مُّؤْمِنِينَ... صدق الله العظيم الآية 57 في سورة يونس : يَا أَيُّهَا النَّاسُ قَدْ جَاءتْكُم مَّوْعِظَةٌ مِّن رَّبِّكُمْ وَشفَاء لِّمَا فِي الصُّدُورِ وَهُدًى وَرَحْمَةٌ لِّلْمُؤْمِنِينَ... صدق الله العظيم الآية 69 من سورة النحل : وَاللّهُ خَلَقَكُمْ ثُمَّ يَتَوَفَّاكُمْ وَمِنكُم مَّن يُرَدُّ إِلَى أَرْذَلِ الْعُمُرِ لِكَيْ لاَ يَعْلَمَ بَعْدَ عِلْمٍ شَيْئًا إِنَّ اللّهَ عَلِيمٌ قَدِيرٌ... صدق الله العظيم الآية 82 من سورة الإسراء : وَنُنَزِّلُ مِنَ الْقُرْآنِ مَا هُوَ شِفَاء وَرَحْمَةٌ لِّلْمُؤْمِنِينَ وَلاَ يَزِيدُ الظَّالِمِينَ إَلاَّ خَسَارًا... صدق الله العظيم الآية 80 من سورة الشعراء : وَإِذَا مَرِضْتُ فَهُوَ يَشْفِينِ... صدق الله العظيم الآية 44 من سورة فصلت : وَلَوْ جَعَلْنَاهُ قُرْآنًا أَعْجَمِيًّا لَّقَالُوا لَوْلَا فُصِّلَتْ آيَاتُهُ أَأَعْجَمِيٌّ وَعَرَبِيٌّ قُلْ هُوَ لِلَّذِينَ آمَنُوا هُدًى وَشفَاء وَالَّذِينَ لَا يُؤْمِنُونَ فِي آذَانِهِمْ وَقْرٌ وَهُوَ عَلَيْهِمْ عَمًى أُوْلَئِكَ يُنَادَوْنَ مِن مَّكَانٍ بَعِيدٍ...||

 

 تعلم 0000000000000JAVA

اذهب الى الأسفل 
كاتب الموضوعرسالة





التقييم : 3
نقاط : 360576
تاريخ التسجيل : 01/01/1970

تعلم 0000000000000JAVA Empty
مُساهمةموضوع: تعلم 0000000000000JAVA   تعلم 0000000000000JAVA I_icon_minitimeالثلاثاء فبراير 19, 2013 3:39 pm

throw, try, catch,...
Pourquoi traiter des exceptions dès maintenant ? Parce qu'en Java,
contrairement au C et au C++, les exceptions et leur traitement font
partie intégrante du langage et sont utilisées systématiquement pour
signaler toute erreur survenue pendant l'exécution d'une méthode
(débordement d'indice d'un tableau, erreur d'accès à un fichier,...). De
nombreuses méthodes sont susceptibles de déclencher (throw) des
exceptions et donc il est impératif de savoir comment les traiter ou
passer outre.
Une fois acquis le principe de cette forme de traitement d'erreur, vous
pourrez utiliser les classes d'exceptions Java existantes ou créer vos
propres classes pour traiter les erreurs qui peuvent survenir dans vos
méthodes.

La gestion d'erreur par exceptions permet d'écrire de manière plus
claire (donc plus maintenable) un programme, en isolant le traitement
d'erreur de la suite d'instructions qui est exécutée si aucune erreur ne
survient. Généralement, dans les langages ne disposant pas des
exceptions (comme le C), les fonctions susceptibles de poser problème
renvoient des valeurs que vous devez traiter immédiatement pour vérifier
si aucune erreur n'est survenue.


La gestion des erreurs se fait grâce aux exceptions en Java. Donc, il
n'existe pas de variables telles que errno... Les exceptions sont d'un
abord plus difficile mais une fois compris le principe, la programmation
des erreurs se fait plus simplement et "proprement".


Les exceptions font partie du noyau du langage Java et leur gestion est obligatoire.



Syntaxe
En Java, cinq mots-clé servent à traiter les exceptions :

L'instruction throw exception1; permet de déclencher l'exception
exception1. exception1 doit être une référence sur un objet d'une classe
d'exception. Toutes les classes d'exception sont de la classe Throwable
ou de ses dérivées (les classes Error, Exception, RuntimeException et
leur dérivées). Une exception peut être déclenchée par le système ou
n'importe où dans une méthode.
Le bloc suivant l'instruction try permet d'encadrer les séries
d'instructions où une ou plusieurs exceptions sont susceptibles d'être
déclenchées. Les instructions de ce bloc représentent le traitement
normal de votre programme. Il peut donc comporter des instructions
déclenchant ou non des exceptions et éventuellement des instructions
throw.
Le bloc de l'instruction try doit être suivi d'une ou plusieurs
instructions catch, et chacun de ces catch doit être suivi d'un bloc
d'instructions. Chaque catch spécifie quelle classe d'exception il est
capable d'intercepter, quand une exception est déclenchée dans le bloc
du try précédent le catch. Un catch capable de traiter la classe
ClasseException ou une des classes dérivées de ClasseException respecte
la syntaxe suivante :
try
BlocInstructionsTry
catch (ClasseException exceptionInterceptee)
BlocInstructions
Quand une exception exception1 de classe ClasseException est déclenchée
dans le bloc BlocInstructionsTry, le contrôle passe au premier catch
suivant BlocInstructionsTry qui traite la classe d'exception
ClasseException. Ce catch reçoit en paramètre l'exception déclenchée.
Si aucun de ces catch n'est capable d'intercepter exception1, le
contrôle est rendu au premier catch capable d'intercepter une exception
de classe ClasseException, parmi les méthodes mémorisées dans la pile
d'exécution et exécutant un try ... catch. Si aucun catch n'est
rencontré, la Machine Virtuelle Java indique l'exception qui est
survenue et arrête le thread dans laquelle elle est survenue (ce qui
généralement bloque le programme).
Le bloc instructions d'un catch peut éventuellement redéclencher
l'exception interceptée exceptionInterceptee pour la propager dans la
pile d'exécution, grâce à l'instruction throw exceptionInterceptee;.

Le bloc d'instructions du dernier catch peut être optionnellement suivi
de l'instruction finally, suivi lui aussi d'un bloc d'instructions
spécifiant les instructions qu'il faut toujours exécuter à la suite du
bloc try si aucune exception n'a été déclenchée ou à la suite du
traitement d'un catch.
Dans la déclaration d'une méthode methode1 (), le mot-clé throws permet
de déclarer la liste des classes d'exceptions que methode1 () est
susceptible de déclencher. methode1 () peut déclencher des exceptions
dans les deux situations suivantes :
Elle appelle une ou plusieurs instructions throw exception1; et
n'intercepte pas toutes ces exceptions avec l'instruction catch.
Elle appelle d'autres méthodes susceptibles de déclencher des exceptions et n'intercepte pas toutes ces exceptions.
Seules les classes d'exceptions RuntimeException, Error et toutes leurs
classes dérivées, ne sont pas obligées d'être citées après throws.
Ce type de déclaration permet d'être sûr qu'une exception déclenchée par
une méthode sera toujours traitée ou ignorée sciemment par le
programmeur.


Chacune des instructions try, catch et finally doivent être suivi d'un
bloc { ... } même si ce bloc ne comporte qu'une seule d'instruction
(Désolé, les afficionados du code compact en seront pour leurs frais !).





Voici un exemple de traitement local d'une exception déclenchée grâce à
throw dans un bloc try et interceptée par un des catch qui suivent :

class Classe0
{
// ...
void methode1 ()
{
try
{
// ...
throw new Exception ();
}
catch (Exception exception1)
{
// Que faire en cas d'exception ?
}
}
}
Une méthode qui est susceptible de déclencher une exception peut s'écrire ainsi :

class Classe1
{
// ...
void methode1 () throws ClasseException
{
// ...
// En cas d'erreur, déclenchement d'une exception
throw new ClasseException ();
// ...
}
}
ClasseException est soit une classe prédéfinie dérivée de la classe
Throwable, soit une classe dérivée d'une de ces classes créé par vous.

Quand vous appelez methode1 (), vous devez soit inclure l'appel à cette
méthode dans un try ... catch, soit déclarer que la méthode qui appelle
methode1 () est susceptible de déclencher une exception de la classe
ClasseException, comme dans l'exemple suivant :

class Classe2
{
Classe1 objet1 = new Classe1 ();
// ...
void methodeX ()
{
try
{
objet1.methode1 ();
// ...
}
catch (ClasseException exception1)
{
// Que faire en cas de problème ?
}
// ... Eventuellement d'autres catch (...)
finally
{
// Le bloc finally est optionnel
// Que faire après que le bloc try ou
// qu'un bloc catch aient été exécutés ?
}
}

void methodeY () throws ClasseException
{
objet1.methode1 ();
// ...
}
}
Le bloc finally est toujours exécuté, même si l'instruction return est
exécutée dans les blocs try et catch : il sert à regrouper les
instructions qu'il faut exécuter pour laisser dans un état correct votre
programme qu'une exception est été déclenchée ou non. Par exemple, si
le bloc try traite des accès à un fichier (ouverture,
lecture/écriture,...), il est logique de fermer ce fichier dans le bloc
finally, pour qu'il soit toujours finalement fermé.
Si une exception exception1 est déclenchée dans un bloc try et qu'aucun
catch qui suit try n'intercepte exception1, alors le bloc finally est
exécuté avant que le système ne continue à propager l'exception et
trouve (ou non) un catch traitant les exceptions de la classe de
exception1.
Si une exception exception2 est déclenchée dans un bloc catch, alors le
bloc finally est aussi exécuté avant que le système ne continue à
propager cette exception et trouve (ou non) un catch traitant les
exceptions de la classe de exception2.



figure 9. Chemin parcouru lors du traitement d'exceptions
La figure précédente illustre les chemins différents par lesquels peut
passer le contrôle dans les méthodes methodeX () et methodeY (), suivant
qu'une exception dans methode1 () est déclenchée (chemins vert et
jaune) ou non (chemins rouge et bleu).


Afin de bien comprendre la gestion des erreurs avec les exceptions,
voici un programme C typique traduit en Java où vous pourrez faire le
parallèle entre constantes numériques façon C, et exception façon Java
(à recopier dans un fichier EssaiException.java compilé avec
l'instruction javac EssaiException.java, pour ensuite l'exécuter avec
java ou Java Runner, grâce à l'instruction java EssaiException) :

/* Déclaration des constantes d'erreur */
#define ERR_OK 0
#define ERR_A_EGAL_B 1








int uneMethode (int a, int b)

{
if (a == b)
return ERR_A_EGAL_B;
else
{
printf ("%d et %d OK !\n", a, b);
return ERR_OK;
}
}

int main ()

{
int erreur;
if ((erreur = uneMethode (1, 2))
== ERR_OK)
printf ("Pas d'erreur\n");
else
if (erreur == ERR_A_EGAL_B)
printf ("Erreur\n");
}

// Déclaration d'une classe d'exception
class AEgalBException extends Exception
{
public String toString ()
{
return "A égal à B !";
}
}

public class EssaiException
{
static void uneMethode (int a, int b)
throws AEgalBException
{
if (a == b)
throw new AEgalBException ();
else
System.out.println
(a + " et " + b + " OK !");
}



public static void main
(String [ ] args)
{
try
{
uneMethode (1, 2);
System.out.println ("Pas d'erreur");
}
catch (AEgalBException e)
{
System.out.println ("Erreur " + e);
}
}
}






Voici un autre exemple d'application dont la méthode newObject () permet
de créer un objet en connaissant le nom de sa classe. Cette méthode
simplifie le traitement des exceptions que peuvent déclencher les
méthodes forName () et newInstance () de la classe Class en renvoyant
une exception de classe IllegalArgumentException qu'il n'est pas
obligatoire d'intercepter (à recopier dans un fichier
InstantiationAvecNom.java compilé avec l'instruction javac
InstantiationAvecNom.java pour ensuite l'exécuter avec java ou Java
Runner, grâce à l'instruction java InstantiationAvecNom) :

public class InstantiationAvecNom
{
// Methode transformant toutes les exceptions qui peuvent survenir
// pendant l'instanciation d'une classe en une exception IllegalArgumentException.
// nomClasse doit indiquer un nom de classe avec son package
public static Object newObject (String nomClasse)
{
try
{
return Class.forName (nomClasse).newInstance ();
}
catch (ClassNotFoundException e)
{
throw new IllegalArgumentException (
"La classe " + nomClasse + " n'existe pas");
}
catch (InstantiationException e)
{
throw new IllegalArgumentException (
"La classe " + nomClasse + " est abstract"
+ " ou n'a pas de constructeur accessible par d\u00e9faut");
}
catch (IllegalAccessException e)
{
throw new IllegalArgumentException (
"La classe " + nomClasse + " n'est pas public");
}
}

public static void main (String [ ] args)
{
// Essai avec différentes classes
String nomsClasses [] = {"java.lang.Object", // Ok
"java.lang.String", // Ok
"java.lang.Integer", // Pas de constructeur par défaut
"java.lang.Runnable"}; // Interface (= classe abstract)

for (int i = 0; i < nomsClasses.length; i++)
try
{
System.out.println (nomsClasses [i] + " : " + newObject (nomsClasses [i]));
}
catch (IllegalArgumentException e)
{
System.out.println (e);
System.out.println ("La classe " + nomsClasses [i]
+ " ne peut etre instancie par Class.forName (""
+ nomsClasses [i] + "").newInstance ();");
}
}
}

Autres exemples
Applets Chrono, ObservateurCalcul, EchoClient, PaperBoardClient,
PlayApplet, CalculetteSimple, BoutonsNavigation, AnimationFleche,
ScrollText et Horloge.
Applications LectureFichier, NumerotationLigne, ConcatenationFichiers,
TestProtocole, HelloFromNet, EchoServer et PaperBoardServer.

Avantages des exceptions
Bien que d'un abord plus compliqué qu'une gestion d'erreur avec des
constantes numériques, les exceptions comportent de nombreux avantages
que vous percevrez à l'usage :

Chaque exception est une instance d'une classe : cette classe peut
comporter toute sorte de méthodes et de champs, qui permettent une
gestion d'erreur bien plus riche qu'une simple constante numérique. De
plus, vous pouvez créer une hiérarchie de classes d'exceptions, si
besoin est.
Une méthode methode1 () est obligée de déclarer la liste des classes
d'exceptions qu'elle est susceptible de déclencher, grâce à la clause
throws. Ceci oblige les utilisateurs de methode1 () de prendre en compte
ces exceptions, soit en les traitant dans un try ... catch (voir
methodeX ()), soit en les ajoutant à la liste des classes d'exceptions
déclenchées par leur méthode (voir methodeY ()). Cette obligation peut
paraître lourde à priori, mais elle assure une gestion correcte des
erreurs qui peuvent survenir dans un programme. (Qui peut affirmer qu'il
a toujours géré toutes les erreurs dans un programme C ?...).
Le bloc d'instructions d'un try représente la suite des instructions qui
sont censées se dérouler s'il n'y a pas d'erreur. Quand vous retournez
des codes d'erreurs, vous devez les tester tout de suite pour traiter
les cas d'erreurs éventuelles : ceci peut nuire à la lisibilité du code.

Quand une exception est déclenchée, le système recherche dans la pile
d'exécution la première méthode qui traite cette exception dans un bloc
catch. Comme dans l'exemple qui suit, ceci permet éventuellement de
centraliser vos traitements d'exception dans une méthode
methodePrincipale () au lieu de traiter toutes les exceptions qui
peuvent survenir dans chacune des méthodes methodeI () où pourrait
survenir une exception.
class UneClasse
{
private void methodeQuiDeclencheUneException () throws Exception
{
throw new Exception ();
}

private void methode1 () throws Exception
{
methodeQuiDeclencheUneException ();
}

private void methode2 () throws Exception
{
methode1 ();
methodeQuiDeclencheUneException ();
}

private void methode3 () throws Exception
{
methode1 ();
}

public void methodePrincipale ()
{
try
{
methode2 ();
methode3 ();
}
catch (Exception exception)
{
// Que faire en cas d'exception
}
}
}

L'équivalent de la clause catch (...) du C++ est catch (Throwable
exception). En effet, toutes les classes d'exceptions Java héritent de
la classe Throwable.


La clause throw; qui permet de redéclencher une exception traitée dans
un catch, a pour équivalent en Java throw exception;, où exception est
l'exception reçu en paramètre par le catch.


Java introduit le mot-clé throws qui permet de spécifier la liste des
classes d'exceptions que peut déclencher une méthode, et que doit
prendre en compte tout utilisateur de cette méthode (certains
compilateurs C++ utilisent throw).


Le traitement des exceptions en Java comporte une clause supplémentaire
et optionnelle par rapport au C++ : l'instruction finally. Cette
instruction permet de spécifier l'ensemble des instructions à exécuter
une fois terminé le bloc d'instructions d'un try ou d'un des catch,
qu'une exception ait été déclenchée ou non.



Soit methode1 () une méthode d'une classe Classe1, déclarant avec la
clause throws une liste d'exception ClasseExceptionI qu'elle est
susceptible de déclencher. Si methode1 () est outrepassée dans une
classe Classe2 dérivée de Classe1, alors cette méthode ne peut déclarer
que les exceptions ClasseExceptionI ou les exceptions dérivées de
ClasseExceptionI (interdiction de déclencher des exceptions dont les
classes ne sont pas liées à celles que peut déclencher la méthode
outrepassée).
Bien sûr, ceci ne s'applique que pour les classes d'exceptions
différentes de RuntimeException, Error et toutes leurs classes dérivées.
Voici un exemple vous montrant ceci :

abstract class Classe1
{
abstract Class chercherClasse (String nomClasse);
}

class Classe2 extends Classe1
{
// chercherClasse () est outrepassée
Class chercherClasse (String nomClasse)
{
try
{
if (nomClasse.equals (""))
throw new IllegalArgumentException ("Nom de classe vide");
return Class.forName (nomClasse);
}
catch (ClassNotFoundException e)
{
// nomClasse pas trouvée : la méthode forName () de la classe
// Class impose d'intercepter cette exception...
throw new IllegalArgumentException ("Nom de classe inconnu");
}
// IllegalArgumentException est une classe dérivée de
// RuntimeException donc il n'est pas obligatoire d'intercepter
// les exceptions de cette classe
}

// Vous auriez pu décider de ne pas intercepter l'exception de
// de class ClassNotFoundException et de déclarer par exemple :
/* Class chercherClasse (String nomClasse) throws ClassNotFoundException
{
return Class.forName (nomClasse);
}
*/
// Ceci génère une erreur car il n'est pas possible d'outrepasser
// chercherClasse () et de déclarer que cette méthode est susceptible de
// déclencher des exceptions que chercherClasse () de Classe1 ne déclare pas...
}
Par contre, une méthode methode1 () outrepassant celle d'une super
classe peut ne pas déclencher certaines des exceptions que la méthode
outrepassée a déclarées dans sa clause throws, comme par exemple :

class Classe1
{
void methode1 () throws Exception
{
// ...
throw new Exception ();
}
}

class Classe2 extends Classe1
{
void methode1 ()
{
// ...
}
}
Ceci peut être utile quand vous voulez outrepasser la méthode clone ()
de la classe Object dans une classe Classe1 pour permettre dans certains
cas, de cloner les objets de la classe Classe1 sans avoir à intercepter
l'exception CloneNotSupportedException :

class Classe1 implements Cloneable
{
// ...

// La méthode clone () de la classe Object peut déclencher
// une exception CloneNotSupportedException, mais ici
// dans Classe1 clone () ne le fait pas
public Object clone ()
{
try
{
Classe1 clone = (Classe1)super.clone ();
// ...
return clone;
}
catch (CloneNotSupportedException e)
{
// Ne peut survenir car cette classe implémente Cloneable
// mais obligation d'intercepter l'exception car la méthode clone ()
// de la classe Object déclare qu'elle peut déclencher une exception
// de classe CloneNotSupportedException
return null;
}
}
}

class Classe2
{
void methode (Classe1 objet1)
{
Classe1 objet2 = (Classe1)objet1.clone ();
// ...
}
}



La classe java.lang.Throwable
Les classes d'exceptions Java se divisent en plusieurs catégories. Elles
héritent toutes de la classe Throwable décrite ci-dessous. Celle-ci
n'est pas habituellement utilisée directement, mais toutes les
exceptions héritent de ses méthodes, qui peuvent être intéressantes à
utiliser ou à outrepasser.

Constructeurs
public Throwable ()
public Throwable (String message)
Allocation d'un nouvel objet Throwable, l'un sans message et l'autre
avec message décrivant l'exception survenue. Une trace de l'état de la
pile est automatiquement sauvegardé.

Méthodes
public String getMessage ()
Renvoie le message détaillé associé à l'objet.

public void printStackTrace ()
public void printStackTrace (PrintStream s)
Imprime sur la sortie standard ou sur un stream, l'exception et la trace de l'exception dans la pile.
public Throwable fillInStackTrace ()
Réinitialise la trace de la pile d'exécution. Cette méthode est utile
uniquement quand vous voulez redéclencher une exception traitée par un
catch, de la manière throw exception.fillInStackTrace ().

public String toString ()
Méthode outrepassée de la classe Object, renvoyant une description sommaire de l'exception

Les exceptions Runtime
Les catégories des exceptions Runtime (classe java.lang.RuntimeException
et ses dérivées) et des classes d'erreurs (classe java.lang.Error et
ses dérivées) sont spéciales : contrairement aux autres classes
d'exceptions, un programme n'est pas obligé de traiter toutes les
instructions pouvant déclencher ce type d'exceptions dans un try ...
catch, et ceci essentiellement pour des raisons pratiques de
programmation. En effet, en consultant la liste suivante vous vous
rendrez compte que ces exceptions peuvent survenir très souvent dans un
programme : Si le compilateur Java obligeait à prévoir un traitement en
cas d'exception à chaque fois qu'une instruction peut déclencher une
exception Runtime, votre programme aurait beaucoup plus de traitement
d'exceptions que de code réellement utile.
De même, si vous voulez vous servir d'une de ces classes pour déclencher
avec throw une exception dans une méthode methode1 (), vous n'êtes pas
obligé de la déclarer dans la clause throws de methode1 ().
La classe RuntimeException dérive de la classe Exception. Voici la liste
des exceptions dérivant de RuntimeException, qui sont susceptibles
d'être déclenchées au cours de l'exécution d'un programme Java :

java.lang.ArithmeticException : Une exception est survenue sur une
opération arithmétique, comme une division d'un entier par zéro.
java.lang.ArrayStoreException : Tentative de stocker dans un tableau un
élément qui n'est pas du type des éléments du tableau ou castable dans
ce type.
java.lang.ClassCastException : Tentative de cast d'un objet dans un type incorrecte.
java.lang.IllegalArgumentException : Une méthode a été appelée avec un
mauvais argument ou invoquée sur un mauvais objet. Les classes suivantes
dérivent de cette classe d'exception :
java.lang.IllegalThreadStateException : Un thread était dans un état inadéquat pour l'opération requise.
java.lang.NumberFormatException : Tentative de convertir dans un type numérique une chaîne de caractères mal formattée.
java.lang.IllegalMonitorStateException : Le thread courant a tenté
d'attendre ou de prévenir d'autres threads, sur un objet non verrouillé
par ce thread. Cette exception est déclenchée par les méthodes wait ()
et notify () de la classe Object (voir aussi la synchronisation des
threads).
java.lang.IndexOutOfBoundsException : Un indice (sur un tableau, une
chaîne) ou un intervalle défini par deux indices ont dépassé les limites
inférieures ou supérieures. Les classes suivantes dérivent de cette
classe d'exception :
java.lang.ArrayIndexOutOfBoundsException pour les tableaux (indice négatif ou supérieur ou égal à la taille du tableau).
java.lang.StringIndexOutOfBoundsException pour les chaînes de caractères.
java.lang.NegativeArraySizeException : Tentative de créer un tableau ou une chaîne avec une taille négative.
java.lang.NullPointerException : Tentative d'utiliser une référence null
alors qu'une référence sur un objet valide était attendue.
java.lang.SecurityException : Tentative de violation de sécurité.
Le package java.util définit les exceptions suivantes signalant des opérations interdites :

java.util.EmptyStackException : Tentative d'accéder à un élément dans une pile vide (classe java.util.Stack).
java.util.NoSuchElementException : Cette exception est déclenchée par
les implémentations de la méthode nextElement () de l'interface
java.util.Enumeration quand il n'y a plus d'éléments à énumérer.

Il n'est pas obligatoire de traiter les exceptions des classes
RuntimeException, Error et leur dérivées dans un try ... catch, et ceci
qu'elles soient citées ou non dans la clause throws, des méthodes
invoquées. En fait, quand ce type d'exception est cité, ce n'est que
pour information.





A la lecture de la liste précédente, vous pouvez voir que la Machine
Virtuelle Java gère de manière fine les erreurs courantes qui peuvent
survenir dans un programme. Au cours de la mise au point d'un programme,
ce type d'erreur survient souvent : par défaut, l'exception déclenchée
sera interceptée par la Machine Virtuelle qui va inscrire à l'écran
l'exception en question ainsi que l'état de la pile d'exécution au
moment de son déclenchement. Grâce à ces informations, vous retrouverez
généralement très rapidement d'où provient l'erreur sans avoir à lancer
un debugger.
Globalement, vous verrez qu'à l'usage cette fonctionnalité vous permet
de corriger beaucoup plus vite vos programmes et que vous vous servirez
beaucoup moins souvent du debugger que dans d'autres langages.



Les classes d'erreurs
Les classes d'erreurs dérivent de la classe Error, qui dérive elle-même
de la classe Throwable. Elles sont généralement provoquée par la Machine
Virtuelle Java à l'exécution, suite à un problème sur le chargement ou
l'utilisation des classes, ou sur la Machine Virtuelle elle-même. Elles
sont intéressantes à analyser quand elles sont déclenchées par un
programme. Voici la liste de ces erreurs :

java.lang.LinkageError : Cette classe est la super classe des classes
d'erreurs déclenchées quand le lien vers une classe est impossible
(classe ou méthode inexistante, fichier .class corrompu,...). Ces
erreurs surviennent la plupart du temps quand la Machine Virtuelle Java
continue à utiliser un ancien fichier .class d'une classe qui a changé.
Dans ce cas, vérifiez les trois points suivants et recompilez la classe
si nécessaire :
Les dates du fichier .class et du fichier source .java.
Le répertoire de provenance du fichier .class en consultant le CLASSPATH utilisé.
L'unicité du fichier .class : peut-être avez-vous changé votre
arborescence de développement en laissant d'anciens fichiers .class
utilisés par inadvertance ?


java.lang.ClassCircularityError : Une référence circulaire a été détectée dans la hiérarchie d'une classe.
java.lang.ClassFormatError : Une classe n'est pas au bon format. Cette
erreur peut être déclenchée par la méthode defineClass () de la classe
ClassLoader.
java.lang.IncompatibleClassChangeError : Cette classe est la super
classe des classes d'erreurs déclenchées quand la Machine Virtuelle Java
utilise un champ ou une méthode qui a été changée ou supprimée d'une
classe. Comme le compilateur interdit ces erreurs, elles ne peuvent
survenir que si la Machine Virtuelle utilise des fichiers .class qui ne
sont pas à jour (voir aussi la super classe LinkageError).

java.lang.AbstractMethodError : Tentative d'appeler une méthode abstract.
java.lang.IllegalAccessError : Tentative d'accéder un champ ou une méthode inaccessible (elle est devenue private par exemple).
java.lang.InstantiationError : Tentative d'instancier une classe abstract ou une interface.
java.lang.NoSuchFieldError : Tentative d'accéder un champ qui n'existe pas.
java.lang.NoSuchMethodError : Tentative d'accéder une méthode qui n'existe pas.
java.lang.NoClassDefFoundError : La classe requise n'a pas été trouvée
par la Machine Virtuelle Java. Cette erreur survient le plus souvent
parce que la classe n'a pas été retrouvée avec le CLASSPATH utilisé.
java.lang.UnsatisfiedLinkError : Une méthode native n'a pas été trouvée par la Machine Virtuelle Java.
java.lang.VerifyError : La classe est incohérente.
java.lang.ThreadDeath : Cette erreur est déclenchée par la méthode stop () sans paramètre de la classe Thread.
java.lang.VirtualMachineError : Cette classe est la super classe des
classes d'erreurs déclenchées quand la Machine Virtuelle Java n'est plus
en mesure de fonctionner.
java.lang.InternalError : Cette erreur est déclenchée suite à un état incohérent de la Machine Virtuelle.
java.lang.OutOfMemoryError : La Machine Virtuelle n'a pas assez de
mémoire pour instancier un nouvel objet même après que le Garbage
Collector soit intervenu.
java.lang.StackOverflowError : Un débordement de pile est survenu, par
exemple suite à un appel récursif dans une méthode sans condition
d'arrêt.
java.lang.UnknownError : Cette erreur n'est pas utilisée.


java.awt.AWTError : Une erreur est survenue pendant l'utilisation d'AWT
(le système de gestion de l'interface utilisateur). Cette erreur est
utilisée en cas d'erreur d'initialisation du toolkit AWT (pas de DISPLAY
sous X11 par exemple) ou de l'impression.
Les autres exceptions
Vous devez obligatoirement prendre en compte les exceptions dont la
classe dérive de java.lang.Exception (sauf RuntimeException et ses
classes dérivées), soit en les traitant dans un try ... catch, soit,
grâce à la clause throws, en les ajoutant à la liste des classes
d'exception susceptibles d'être renvoyées par une méthode. La classe
Exception dérive de la classe Throwable. Les classes d'exceptions qui
suivent sont déclenchées par certaines méthodes de la bibliothèque Java :


java.lang.ClassNotFoundException : Une classe ou une interface d'un
certain nom n'a pas été trouvée. Cette exception peut être déclenchée
par les méthodes forName () de la classe Class, et les méthodes
findSystemClass () et loadClass () de la classe ClassLoader.
java.lang.CloneNotSupportedException : La méthode clone () de la classe
Object a été appelée sur un objet dont la classe n'implémente pas
l'interface Cloneable.
java.lang.IllegalAccessException : Tentative de charger une classe dont
le nom est correct, mais qui n'est pas public, ou qui se trouve dans un
package différent ou dont le constructeur par défaut n'est pas
accessible (s'il est private par exemple). Cette exception peut être
déclenchée par la méthode forName () de la classe Class.
java.lang.InstantiationException : La classe spécifiée en paramètre de
newInstance () est abstract, un tableau ou une interface, ceci
interdisant la création d'un nouvel objet.
java.lang.InterruptedException : Le thread courant était en attente et
un autre thread a interrompue son attente grâce la méthode interrupt ()
de la classe Thread.
Les packages java.io et java.net définissent les exceptions suivantes
qui permettent de vérifier les erreurs d'entrées-sorties. Ces classes
dérivent toutes de la classe java.io.IOException (qui dérive elle-même
de la classe Exception) :

java.io.EOFException : La fin de fichier a été rencontrée pendant une opération de lecture.
java.io.FileNotFoundException : Fichier inexistant dans le système de fichiers.
java.io.InterruptedIOException : Le thread courant était en attente de
la fin d'une opération d'entrée-sortie, et un autre thread a interrompue
son attente grâce la méthode interrupt () de la classe Thread.
java.io.UTFDataFormatException : Erreur de conversion d'une chaîne au format UTF-8 (ou inversement).


java.net.MalformedURLException : Une chaîne de caractères décrivant un
URL était mal formattée ou indiquait un protocole inconnu.
java.net.ProtocolException : Erreur sur le protocole réseau.
java.net.SocketException : Une opération sur un socket ne s'est pas déroulé correctement.
java.net.UnknownHostException : L'hôte (host) d'un réseau n'a pu être atteint.
java.net.UnknownServiceException : La connection réseau ne supporte pas ce service.
Le package java.awt définit l'exception suivante :

java.awt.AWTException : Utilisée pour certaines erreurs dans AWT.
Pour le traitement d'erreur de vos programmes, vous pouvez déclencher
vous-même des exceptions en utilisant les classes d'exceptions
existantes (comme par exemple IllegalArgumentException) ou des nouvelles
classes d'exceptions.
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
تعلم 0000000000000JAVA
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
» تعلم اللغة الانجليزية,تعلم اللغة الفرنسية,تعلم اللغة الاسبانية بدروس عربية مبسطة
»  تعلم asp/asp.net بكل سهولة
» تعلم البرمجة بالعربي وبدون تعلم أي لغة برمجة
»  تعلم لغة العصر ... تعلم اللغة الانجليزية!!!!!!!
» الآن حمل كتاب تعلم صنع الستايل و كتاب تعلم صنع الثيم

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتديات اهل الحق :: منتديات الإبداع و التصميم :: منتدى لغات البرمجة-
انتقل الى: