Au travail, j'ai eu l'opportunité d'enseigner Java (Servlet) à ceux qui travaillaient en langage C depuis longtemps, et on m'a fait réfléchir aux fonctionnalités de Java et aux parties difficiles à comprendre, voici donc un article d'introduction sur Java. Je vais le résumer.
Cet article n'est pas destiné aux "débutants en programmation", mais aux "personnes qui travaillent normalement en langage C". Par conséquent, nous ne parlerons pas de programmation générale (comme "Qu'est-ce qu'une variable?"). En outre, omettez le contenu qui apparaît immédiatement lorsque vous recherchez sur Google, comme la grammaire Java. Seulement si vous avez un bon site de référence, il suffit de mettre un lien.
J'espère que cet article vous aidera à comprendre les caractéristiques et les parties déroutantes du langage Java.
Tout d'abord, construisons l'environnement. Il n'est pas rare qu'une machine propre ne puisse même pas compiler ou même exécuter Java. Tout d'abord, je vais expliquer les éléments requis pour écrire et exécuter Java.
Quand il s'agit de "télécharger et installer Java", JDK et JRE sont les premières sources de confusion. Vous ne pouvez télécharger que le JRE séparément, ou si vous téléchargez le JDK, il y a un répertoire JRE dedans, ce qui est également une cause de difficulté à comprendre.
Alors, jetons un bref coup d'œil ici.
JDK (Java Development Kit) Comme son nom l'indique, il s'agit d'un kit de développement Java. Utilisé lors du codage. Comprend des compilateurs, des débogueurs, des outils d'analyse des performances et plus encore. C'est une bonne idée de se rappeler que vous en avez besoin avant la compilation du code source. (Strictement parlant, JDK fait référence à celui qui inclut JRE décrit plus loin, mais dans le sens de mémorisation, c'est "jusqu'à ce que le code source soit compilé")
JRE (Java Runtime Environment) Comme son nom l'indique, il s'agit d'un environnement d'exécution Java. Java absorbe les différences environnementales telles que le système d'exploitation de la machine à exécuter par la machine virtuelle Java décrite plus loin. Le JRE contient des éléments tels que des fichiers pour exécuter cette JVM. Gardez à l'esprit que vous avez besoin d'un JRE pour exécuter le Java compilé.
Il n'y a donc rien de savoir ce que représentent le JDK et le JRE. Si vous gardez cela à l'esprit, la construction de l'environnement devrait se dérouler sans heurts.
Lorsque j'ouvre la page Oracle Java pour télécharger le JDK, des éléments tels que Java SE, Java EE et Java FX sont alignés. , Je me demande lequel choisir.
Je voudrais dire "Java est Java!", Mais en fait, même si vous dites Java en un mot, le type dont vous avez besoin dépend du but. Cette section décrit ces différences.
Java SE (Java Standard Edition) Un JDK qui contient les API Java les plus basiques. Utilisez cette option lors du développement d'applications exécutées sur la console, les applications Windows, etc.
Java EE (Java Enterprise Edition) EE est SE avec des API pour le développement de programmes Servlet. Sélectionnez cette option si vous souhaitez développer une application serveur avec Servlet ou JSP.
Java FX En fait, je n'ai pas du tout touché JavaFX, donc je ne peux pas expliquer les détails, mais [Présentation de JavaFX] d'Oracle (http://docs.oracle.com/javase/8/javafx/get-started-tutorial/ Selon jfx-overview.htm # JFXST7840), il s'agit d'un groupe de packages permettant de développer des applications GUI riches utilisant des graphiques et des supports audio.
Il semble l'utiliser si vous souhaitez développer une application GUI qui utilise principalement des images, des animations et des sons.
Donc, une fois que vous connaissez "EE si vous faites Servlet, SE si vous ne le faites pas", cela semble bon.
Jusqu'à présent, les articles suivants sont faciles à comprendre sur les différences par JDK / JRE, SE / EE / FX.
Différences par rapport à la signification des JDK, JRE, SE, EE, etc. de Java
~~ Pour une raison quelconque, Java, par exemple, la version 1.8, s'appelle "Java 8". Il est facile de se méprendre sur le fait que la version principale de Java est «8» au début, mais en réalité, la version principale de Java est «1» et la version mineure est «8». ~~
(Corrigé le 08/12/2016) Java a "numéro de version" et "chaîne de version" comme mots pour indiquer la version. Par exemple, dans le cas de Java SE version 8, le numéro de version est "Java SE 8" et la chaîne de version correspondante est "1.8". Je suis. Au début, il est facile de se perdre dans l'utilisation correcte de cette notation, mais il est bon de se rappeler qu'il existe deux notations pour la même version.
Voir les liens ci-dessous pour plus d'informations. Java Platform, Standard Edition 8 Name and Version Oracle
(Corrigé jusqu'à présent. Merci d'avoir signalé @ budougumi0617!)
Autrement dit, «Java 1.8» et «Java 8» font référence à la même chose. Surtout dans l'IDE, cette notation est mélangée et déroutante, alors soyez prudent.
Contrairement au langage C, Java ne devient pas un fichier exécutable tel quel même si le code source est compilé. Qu'il s'agisse d'un programme console, d'un servlet ou d'Android, vous avez besoin d'une VM (machine virtuelle) appelée JVM pour exécuter Java. Vous n'avez pas à réfléchir trop à une machine virtuelle. L'exécution elle-même exécute simplement la commande java avec la classe compilée comme argument.
Par exemple, le flux de compilation et d'exécution d'un fichier source appelé HelloWorld.java est le suivant.
#Compilation des fichiers source
$ javac HelloWorld.java
#Afficher les fichiers dans le répertoire (.le fichier de classe a été généré)
$ ls
HelloWorld.java HelloWorld.class
#Courir (.la classe n'est pas attachée)
$ java HelloWorld
Hello World!
Le langage C sera le langage machine une fois compilé, mais Java ne sortira qu'un fichier au format .class qui peut être lu par la JVM. Vous pouvez penser à un fichier .class comme une simple conversion d'un fichier .java, qui est un fichier texte, en fichier binaire.
La raison de suivre une telle procédure est que la machine virtuelle Java comble les différences dans l'environnement d'exécution tel que le système d'exploitation, comme expliqué précédemment dans la section JRE. Le langage C doit être compilé pour l'environnement dans lequel la personne qui a écrit le code source veut l'exécuter, mais Java n'est pas obligé de le faire. Compilez le code source sans vous soucier de l'environnement d'exécution, et exécutez-le sur la JVM installée sur chaque machine en fonction de chaque situation. Les programmeurs n'ont pas à se soucier de la machine sur laquelle leur programme fonctionnera. Pour cette raison, Java est considéré comme un langage indépendant de la plate-forme.
Au fait, tous les langages appelés "langages JVM" tels que Scala et Kotlin ont la particularité de devenir des fichiers .class lorsqu'ils sont compilés et exécutés par cette JVM. Puisque l'environnement d'exécution final est JVM, il y a un avantage qu'il est facile de le mélanger avec Java (il est facile de réutiliser le code source une fois écrit en Java).
Le développement Java le plus couramment utilisé est Eclipse. Il existe d'autres options telles que IntelliJ et NetBeans, mais IntelliJ est payant, NetBeans est un peu mineur qu'Eclipse et la quantité de plugins et d'informations est petite, il est donc préférable de commencer avec Eclipse pour le moment.
Étant donné qu'Eclipse est open source, tout le monde peut le télécharger gratuitement sur le site officiel. Si vous utilisez Windows, Pleiades localisation japonaise et divers plug-ins pratiques et JDK6,7,8 & Tomcat6,7,8 sont inclus, " Le package All in One est disponible. Le téléchargement prendra un certain temps, mais si vous le supprimez pour le moment, vous aurez tout ce dont vous avez besoin pour le développement Java et Servlet, donc utiliser All in One est également une bonne option. Veuillez l'utiliser correctement selon les circonstances du PC de développement.
En passant, si vous avez le temps d'étudier, nous vous recommandons d'écrire un programme simple en utilisant uniquement un éditeur de texte sans utiliser d'IDE et de l'exécuter sur la ligne de commande. Vous pouvez bien comprendre la syntaxe Java, le flux d'exécution et le mécanisme de compilation.
Écrivons le code dès que l'environnement est prêt. La grammaire de base et la méthode d'écriture sont laissées aux Tutoriels Java, etc., et ici nous expliquerons principalement les différences avec les coutumes et les idées du langage C. ..
En Java, vous devez toujours créer une classe.
Même s'il n'affiche que "Hello World!", Contrairement au langage C, où il suffit d'écrire la fonction int main (),
Créez un fichier HelloWorld.java, définissez la classe avec la classe HelloWorld (assurez-vous que le nom de la classe est le même que le nom du fichier .java), définissez la méthode main avec public static void main (String args []), et enfin Écrivez System.out.println ("Hello World!"); Dans et exécutez-le, et Hello World est enfin terminé.
Comme on le dit souvent, Java est un langage orienté objet. À l'exception des types primitifs tels que int et char, tout est défini comme une classe, avec des rôles et des comportements distincts.
En conséquence, la réutilisabilité du code source une fois écrit est améliorée, l'efficacité du développement est améliorée par plusieurs personnes et il est facile de créer et d'incorporer une bibliothèque open source.
Par conséquent, pour autant que je sache, la quantité de description requise pour HelloWorld est extrêmement importante par rapport aux autres langues, mais plus le système est grand, plus le mérite de la classification est grand. Plus d'informations sur la classe plus tard.
Lorsque vous faites des recherches sur Java, les mots «classe», «instance» et «objet» reviennent fréquemment et peuvent prêter à confusion. C'est un facteur très important pour comprendre Java, je vais donc le résumer brièvement ici.
Une classe n'est qu'une définition programmatique. Déclarez-la en tant que classe Food {} et définissez-y les variables membres et les méthodes. Si vous osez le comparer à la grammaire du langage C, est-ce une image dont la structure a une fonction?
En orientation objet, il est souhaitable qu'une classe soit une chose que les humains peuvent reconnaître. Classe alimentaire, classe FoodListView, classe CsvFileAccessor, etc., un objet en réalité, un écran sur l'application, programmatique Rassemblez ce qui peut être l'un des rôles en une seule classe.
Juste parce que c'est pratique, veillez à ne pas combiner les deux rôles en un seul, comme FoodAndListView (une classe qui définit les valeurs de la nourriture et contient et affiche cette liste). Si vous les assemblez, ce sera une classe qui ne pourra pas être réutilisée lorsqu'une requête ne nécessitant qu'un seul des concepts, comme "Je veux envoyer des données de classe Food au serveur", sortira.
En Java, le partage / la réutilisation des rôles est souvent priorisé par rapport à l'efficacité d'exécution du programme.
Les instances sont créées (l'espace mémoire est alloué) lorsqu'une nouvelle classe est créée pendant l'exécution du programme.
Pour les variables membres définies dans la classe, une zone de mémoire distincte est allouée pour chaque instance, par exemple, "Créez deux instances en créant deux fois la classe Food et définissez la variable de nom d'une instance sur" Ramen. Vous pouvez créer des instances avec des valeurs différentes en utilisant la classe Food comme modèle, comme "set" et "set" Curry "dans la variable de nom de l'autre instance".
Soyez un peu prudent lorsque vous utilisez le mot «objet». Parce que le mot "objet" dans Java Talk signifie "instance", "classe" ou un objet dans un sens plus vague, orienté objet. Et dans certains cas, l'intention est ambiguë.
Lorsque vous parlez du programme Java lui-même, il n'y a aucun problème si vous comprenez la différence entre "classe" et "instance", donc je pense que c'est une bonne idée de se souvenir de ces deux premiers. (Dans cet article également, je suis conscient de ne pas utiliser le mot "objet" autre que le terme "orienté objet".)
Comme expliqué jusqu'à présent, Java a des caractéristiques et des idées différentes du langage C. En d'autres termes, les éléments prioritaires lors de l'examen des compromis de codage tels que la lisibilité, l'efficacité d'exécution et l'extensibilité sont également différents du langage C.
Voici quelques points à garder à l'esprit lors du codage Java.
De plus, l'article est très instructif sur les précautions lors du codage Java. Veuillez le lire ensemble. (J'ai écrit cet article en faisant référence à cet article en partie)
En langage C, je pense qu'il est souvent utilisé pour éditer l'argument reçu par le pointeur dans la fonction et renvoyer le code de résultat d'exécution de la fonction comme valeur de retour. (Éléments de "Paramètres de sortie" et "Statut du traitement de retour" dans l'article ci-dessus)
Cependant, il vaut mieux ne pas créer une telle méthode en Java. En effet, l'appelant de la méthode doit comprendre comment l'instance passée en tant qu'argument est modifiée dans la méthode et si quelque chose est modifié ou non en premier lieu en examinant l'implémentation de la méthode.
Non limitées à Java, les méthodes qui modifient directement l'instance reçue en argument sont appelées méthodes "destructives" et ont tendance à être évitées. En gros, gardez à l'esprit que l'instance reçue en tant qu'argument n'est pas modifiée et que le résultat est toujours renvoyé comme valeur de retour de la méthode.
En C, les variables devaient être définies au début d'une fonction. Mais Java n'a pas de telles restrictions. Il est plutôt souhaitable de le définir de manière à ce qu'il ne puisse être référencé que dans la portée minimale nécessaire immédiatement avant son utilisation. Si la portée est limitée, les lecteurs ultérieurs du code source n'auront qu'à regarder la plage minimale nécessaire pour découvrir comment la variable est utilisée, minimisant ainsi la charge.
(PostScript 2016/08/12) Strictement parlant, c'était la spécification ANSI-C formulée en 1989 que la déclaration de variable devait être faite au début du bloc, et il semble qu'il n'y ait pas de telle restriction dans C99 formulé en 1999. En conséquence, il semble que «déclarer les variables juste avant utilisation», comme décrit comme une fonctionnalité de Java dans cet élément, soit également considéré en langage C. Merci @SaitoAtsushi pour l'avoir signalé! (Ajout jusqu'à présent)
Java a des conventions de dénomination claires, telles que les noms de méthodes et les noms de variables.
Le comportement du programme ne change pas car il enfreint la convention de dénomination, mais les développeurs Java lisent le code source en supposant que le programme est écrit selon cette convention de dénomination.
Si la description "Nourriture" apparaît dans le code source, elle est toujours considérée comme le nom de la classe, et si c'est "nourriture", elle est considérée comme le nom de la variable. Si vous l'écrivez contrairement à cela, cela empêchera les autres développeurs de comprendre le code source, et par conséquent, cela peut causer des bogues, alors soyez toujours conscient du codage.
Les gens disent souvent: «Java est facile car il n'a pas de pointeurs», mais je pense que c'est à moitié correct et à moitié mensonge.
Il n'y a certainement pas de pointeur en tant que syntaxe, vous ne pouvez donc pas manipuler le pointeur directement. Cependant, si vous créez une instance et la stockez dans une variable, ce que la variable indique est un pointeur vers l'instance, pas l'instance elle-même, et la passer en tant qu'argument de méthode signifie utiliser le pointeur en langage C comme argument. C'est presque la même chose que passer.
Si vous codez sans comprendre cela, par exemple, vous transmettez une instance à une méthode comme dans l'exemple suivant, et lorsque cette instance est modifiée dans la méthode, l'instance qui a appelé la méthode est modifiée. Vous ne pourrez pas comprendre le comportement.
Main.java
public static void main(String args[]) {
Food ramen = new Food("ramen"); // "ramen"Créer une instance Food avec le nom
FoodPrinter.printDecoratedName(ramen); //Je veux afficher le nom magnifiquement
System.out.println(ramen.getName()); // "ramen"ne pas"***** ramen *****"Est sortie
}
FoodPrinter.java
/**
*Une méthode qui sort le nom de la nourriture reçue en argument avec un peu de décoration
*/
public static void printDecoratedName(Food food) {
food.setName("***** " + food.getName() + " *****"); //Décoration
System.out.println(food.getName()); // -> ***** ramen *****
}
Si vous comprenez le concept de pointeurs, c'est bien sûr parce que vous ne faites que passer une référence comme celle-ci, mais si vous écrivez Java sans comprendre les pointeurs, c'est l'une des erreurs que vous faites souvent. ..
Parce que c'est Java, vous n'avez pas à penser aux pointeurs, mais comme c'est Java, vous devez savoir où dans la mémoire la variable avec laquelle vous avez affaire (quelle variable est la même que la mémoire) Je pense que c'est important.
Il y a encore des parties que je n'ai pas encore écrites, mais si j'en écris une, ça finira par là et l'article ne se terminera pas, donc je m'arrêterai ici.
J'étudie moi-même toujours Java, et j'ai appris le langage C pendant environ 3 mois dans la formation en entreprise, il y a donc une possibilité que le contenu soit incorrect ou déroutant. Si vous avez de tels points, veuillez nous le faire savoir dans les commentaires. Je voudrais en faire un article de référence pour ceux qui démarrent Java à partir de maintenant, y compris la discussion dans la section commentaires.
Je vous serais également reconnaissant de bien vouloir commenter les points peu clairs. Je voudrais écrire un autre article ou ajouter à cet article au besoin.
Recommended Posts