String java
Tous les programmeurs ont à un moment ou un autre – au moins régulièrement – à entrer leur code de trouver pourquoi les choses ne fonctionnent pas comme ils le devraient. Si certaines erreurs sont inévitables, d’autres sont récurrentes, de sorte qu’il est relativement facile à éviter, même sans beaucoup de pratique de la langue. Nous allons essayer de résumer ici les erreurs les plus fréquentes (et plus), ceux qui une fois énorme tendance au désespoir qu’il a commis …
1) Maj et d’autres erreurs encore syntaxeUne erreur très commune chez les débutants, c’est oublier que Java est un langage sensible (il reflète la différence entre une lettre majuscule et les minuscules même). Ainsi, il est possible d’avoir deux variables différentes appelées variables et variable (bien que cela est fortement déconseillé de la même façon, les classes en Java toujours commencer par une main = majuscule.button nouveau Button (); provoquer une erreur de compilation La forme correcte est..: Button main = nouveau bouton ();
Philosophie
Un langage orienté objet et familier
Le premier long métrage, le caractère orienté objet (OO) et familier, fait référence à une méthode de conception des programmes et la langue et le fait qu’un programme écrit en Java semble suffisamment solide pour un programme écrit en C.
Bien qu’il existe plusieurs interprétations de l’objet terme axée sur une idée-clé dans ce type de développement est que différents types de données doivent être directement liés aux différentes opérations qui peuvent être faites sur ces données. Par conséquent, les données (propriétés appelé) et le code de les manipuler (appelées méthodes) sont combinées en une seule unité appelée classe de l’objet. Le code est logiquement divisé en entités plus petites devient plus cohérent et plus facile à maintenir et plus facilement réutilisables, intrinsèquement modulaire.
D’autres mécanismes tels que l’héritage peut utiliser toutes les fonctionnalités d’une classe qui a été écrit dans ses propres programmes sans avoir à connaître son fonctionnement interne, nous ne voyons que l’interface (l’interface décrit les propriétés et les méthodes sans fournir le code associé). Java ne permet pas le concept d’héritage de classes multiples parent à moins qu’ils sont des interfaces.
Dans la version 1.5 de la langue ont été ajoutées des génériques, le mécanisme de polymorphisme semblable (mais différent) aux templates du C ou Objective Caml foncteurs. Les génériques peuvent exprimer des propriétés plus facile et plus sûre des objets comme des conteneurs (listes, la liste des arbres type …): est considéré comme générique pour le type d’objet dans la liste.
mécanisme de collecte des ordures (Garbage Collector)
Cet élément contribue à la robustesse et la performance des programmes, le garbage collector est appelé régulièrement et automatiquement lors de execution.On programme multi-processeurs et / ou multi-core il utilise plusieurs threads, même une faible priorité à minimiser les perturbations pour la prestation du programme. En outre, le programmeur peut-être besoin de proposer à exécuter le garbage collector en utilisant la méthode System.gc ().
Une plainte récurrente contre les langages tels que C est la lourde tâche d’avoir à programmer manuellement la gestion de la mémoire. En C, la mémoire allouée par le programme pour créer un objet est libéré lorsque la destruction de celui-ci (généralement avec un appel explicite à l’opérateur delete). Si le programmeur oublie de code désallocation, ce qui conduit à une ‘fuite de mémoire’ et le programme consomme de plus en plus. Pire encore, si un programme demande par erreur plusieurs fois désallocation, ou utilise une zone de mémoire après avoir demandé à ses désallocation, il sera très probablement devenir instable et crash.
En Java, la plupart de ces problèmes est empêché par l’espace mémoire des ordures collector.The requis pour chaque objet créé est affecté dans un segment de mémoire en anglais: mémoire de tas réservée à cet effet.Le programme peut alors accéder à chaque objet avec sa référence dans le tas. Quand il n’ya pas de référence supplémentaires pour atteindre un objet, le ramasse-miettes détruit automatiquement – comme il est devenu inaccessible – la libération de mémoire et d’empêcher ainsi toute fuite de mémoire.
Le garbage collector utilise un algorithme de scoring, puis relâchez en anglais: marque et de balayage pour gérer les cas complexes de référencement des objets les uns les autres ou des boucles de références (une liste à double chaînage par exemple). En pratique, il existe encore des cas où une erreur de programmation le garbage collector considère un objet est toujours utile lorsque le programme d’accès là-bas, mais dans l’ensemble, le garbage collector, il est plus facile et plus sûre la destruction d’objets en Java (en supprimant la nécessité de placer au bon endroit dans le code appelant l’opérateur delete).
Indépendance vis-à-vis de la plate-forme
L’indépendance vis-à-vis de la plate-forme, signifie que les programmes écrits en Java de travail si parfaitement similaire sur différentes architectures informatiques. Nous pouvons effectuer le développement sur une architecture donnée et exécutez l’application sur tous les autres.
Ce résultat est obtenu par les compilateurs qui compilent source Java code «moitié» pour obtenir un bytecode (plus précisément le bytecode Java, un langage machine spécifique à la plate-forme Java). Le code est ensuite interprété sur une machine virtuelle Java (JVM en anglais), un programme écrit spécifiquement pour la machine cible qui interprète et exécute le bytecode Java. En outre, les bibliothèques standard sont fournies afin d’accéder à certains éléments de la machine hôte (le graphisme, le multithreading, la programmation réseau, …) exactement les mêmes sur toutes les architectures. Notez que même si la phase explicitement au début de la compilation, le bytecode Java est interprété ou convertis à la volée en code natif par un compilateur Just-in-time (juste à temps, JIT).
Il existe également des compilateurs Java qui compilent Java directement en code objet natif pour la machine cible, comme GCJ, supprimant la phase intermédiaire du bytecode, mais le code final produit par ces compilateurs ne peut alors être exécuté sur une architecture unique.
La licence Java de Sun insiste sur le fait que toutes les implémentations doivent être compatibles.Cela a conduit à la plainte en justice contre Microsoft après que Sun a constaté que l’implémentation de Microsoft ne prend pas en charge les interfaces RMI et JNI et comportait des éléments spécifiques à certaines plates-formes par rapport à la plate-forme initiale de Sun. Dim. accordé des dommages et intérêts (20 millions) et l’acte de justice en outre renforcé les termes de la licence de Sun. En réponse, Microsoft a arrêté le support de Java sur ses plates-formes et, sur les versions récentes de Windows, Internet Explorer ne supporte pas les applets Java sans plug-ins supplémentaires. Toutefois, Sun offre gratuitement des environnements d’exécution Java pour les plates-formes Microsoft différents.
Les premières implémentations du langage utilisé une machine virtuelle interprétée à assurer la portabilité. Ces implémentations produit des programmes qui a eu lieu plus lentement que ceux écrits en C ou C, le langage a subi une réputation de mauvais résultats. Les implémentations de la dernière machine virtuelle Java (JVM) de produire des programmes beaucoup plus rapidement qu’auparavant, en util
isant différentes techniques.
La première technique est de compiler directement dans compilateur de code natif en tant que traditionnel, supprimant complètement la phase de bytecode. On obtient ainsi de bonnes performances, mais au détriment de la portabilité.Une autre technique appelée compilation juste-à-temps (just in time, JIT), traduit le byte-code en code natif au cours de la phase de lancement du programme. Certaines machines virtuelles plus sophistiquées utilisent une recompilation dynamique au cours de laquelle la machine virtuelle analyse le comportement du programme et de manière sélective recompiler recompilation parts.Dynamic peut obtenir de meilleurs résultats que la compilation statique car le compilateur dynamique peut optimiser en fonction de leur connaissance de l’environnement cible et classes sont utilisées . La compilation JIT et la recompilation dynamique permettent Java pour tirer avantage de la vitesse du code natif sans perdre la portabilité.
La portabilité est techniquement un objectif difficile à atteindre et le succès de Java dans ce domaine est mitigé. Certes, il est possible d’écrire des programmes pour la plate-forme Java qui fonctionnent bien sur de nombreuses machines cible le grand nombre de plates-formes avec de petites erreurs et des incohérences a conduit à une mauvaise utilisation du slogan de Sun ‘Write once, run anywhere’ (‘Write once, exécuter partout ‘) à’ écrire une fois, déboguer partout ‘(‘ Write once, debug everywhere»)!
L’indépendance de Java vis-à-vis de la plate-forme est néanmoins un succès avec les applications côté serveur comme les services web, les servlets et les Java Beans ainsi que les systèmes embarqués sur OSGi, utilisant Embedded Java Environnement.
l’exécution de code à distance sécurisé
La plate-forme Java a été l’un des premiers systèmes à offrir un soutien pour l’exécution de code à partir de sources éloignées. Une applet peut fonctionner dans le navigateur d’un utilisateur, l’exécution de code téléchargé depuis un serveur HTTP. Le code d’une applet s’exécute dans un espace très étroit, qui protège l’utilisateur de code erronées ou malveillantes. Cet espace est délimité par un objet appelé gestionnaire de sécurité. Un tel objet existe pour le code local, mais elle est inactive par défaut.
Le gestionnaire de sécurité (SecurityManager classe) de définir un certain nombre d’autorisations d’utiliser les ressources du système local (système de fichiers, réseau, système de propriétés, …). Jeux d’autorisations
applet Les éditeurs peuvent demander un certificat pour leur permettre de signer numériquement une applet comme sûre, leur donnant éventuellement (avec autorisation) la permission de quitter la région et des ressources à accès restreint sur le système local.
1) Maj et d’autres erreurs de syntaxe
Une erreur de syntaxe évidente et pourtant trop commun:oubli ou à la mauvaise du point-virgule (;). Oubliant le point-virgule à la fin d’une instruction ne peut être extrêmement grave: le compilateur spots directement l’erreur, ce qui rend la correction. Cependant, il peut arriver que nous mettons un point-virgule là où il ne prend pas. Par exemple, essayer de convertir une boucle do-while boucle while il se peut que vous oubliez d’effacer le célèbre personnage:
La position de la virgule est de donner effet à une boucle while ‘vide’, suivi d’un bloc d’instructions qui seront exécutées une seule fois. En outre, il est probable que la boucle sera infinie, puisque le code qui fera la condition est fausse ne fonctionnera pas correctement …
Enfin, la dernière cruauté évidente: ne jamais oublier de fermer la parenthèse (()), ([]), accolades ({}), guillemets () ou des apostrophes () a ouvert. Par exemple, en oubliant de fermer une parenthèse vous donnera une longue liste d’erreurs à la compilation. En ce qui évite une perte de temps et de frustration dans l’habitude de toujours commencer par ouvrir et de fermer son parenthèses (ou entre parenthèses ses accolades …), puis écrire le contenu.
2) Utilisation == Nevermind pas confondre ‘=’ avec ‘==’…Une erreur très commune est d’essayer de comparer deux chaînes avec l’opérateur ==. Il s’agit d’un problème de sémantique: les chaînes en Java sont des objets de la classe java.lang.String, cet opérateur appliqué à des objets qui ne teste pas l’égalité des références de variables, et non celles de leur contenu.
C’est une erreur subtile parce que le code se compile sans problème (le code est légal), mais n’est pas du tout ce que nous voulons … Dans la même veine (mais cette fois provoquer une erreur de compilation), ne pas utiliser le