Notes de pré-introduction pour les apprenants JavaScript expérimentés de Java

Une connaissance de l'expérience JavaScript a dit qu'il voulait apprendre Java, j'ai donc rédigé une simple note de pré-introduction.

Lecteur supposé

Il est destiné à toute personne ayant appris ou écrit du code JavaScript qui fonctionne dans un navigateur Web ou dans un environnement NodeJS.

Je pense qu'il est efficace de lire le Java Primer et de se référer et d'imiter beaucoup de bon code pour apprendre correctement. Cependant, si vous avez des connaissances en JavaScript à ce stade, il peut être plus facile à comprendre si vous apprenez après avoir vérifié les différences avec Java. J'ai pensé, j'ai essayé de résumer ce mémo.

Si vous trouvez ce mémo trop simple ou trop détaillé, je vous recommande le grand site de synthèse Introduction to Java Code.

Environnement de développement

On suppose qu’une sorte d’environnement de développement intégré sera utilisée à cette époque. Pour le moment, je suppose que l'ancien [Eclipse (environnement de développement intégré)](https://ja.wikipedia.org/wiki/Eclipse_(%E7%B5%B1%E5%90%88%E9%96%) 8B% E7% 99% BA% E7% 92% B0% E5% A2% 83))). Il existe de nombreux livres et articles d'introduction, mais qu'en est-il des articles suivants, par exemple?

Cependant, que vous souhaitiez ou non apprendre par vous-même à l'avance, si vous écrivez du code de travail, il est préférable d'écouter l'environnement de travail et de faire correspondre l'environnement de développement et la version Java.

Essayez-le plus facilement

Si vous souhaitez simplement expérimenter le code Java, il est facile et pratique d'utiliser un service en ligne.

De plus, si vous disposez d'un environnement Docker, vous pouvez l'essayer sans installer l'environnement de développement Java en exécutant Docker Image, y compris l'environnement Java. Cette année, j'utilise également matériel docker-lambda et [matériel VSCode + Codewind (NodeJS mais Java est également possible)](https://qiita.com/ J'ai publié yamachan360 / items / 47fcdd3b1a116b7c2412), veuillez donc vous y référer si vous êtes intéressé.

Différence qui devient un point

Langage du compilateur

Java est le langage du compilateur et JavaScript est le langage de script. C'est certainement le cas, mais je pense que vous n'avez pas à vous en soucier trop pour les raisons suivantes.

Dans le cas de Java, je pense que savoir qu'un fichier intermédiaire appelé * .class est automatiquement créé lors de l'exécution est suffisant.

Java plus récent vous permet d'exécuter des fichiers * .java tels quels (il se compile secrètement dans les coulisses), vous vous demandez peut-être s'il s'agit plus d'un langage de compilation? est. Ce n'est pas grave si vous ne comprenez que le typage statique suivant, qui est dérivé de l'origine du langage de compilation.

Typage statique et dynamique

Java est un langage typé ** statique **, contrairement au JavaScript ** dynamique **. La vérification du type est stricte, donc si vous ne l'écrivez pas consciemment, vous serez surpris par des erreurs et des avertissements fréquents.

Les langages JavaScript expérimentés avec typage statique, tels que TypeScript, peuvent ignorer cette section.

Personnellement, j'aime la frappe dynamique car elle est plus facile à écrire. Cependant, dans les situations où vous ne pouvez pas facilement répéter l'implémentation et les tests, comme lors de la gestion de code au travail, les langages à typage statique semblent donc être plus faciles.

Les articles suivants sont recommandés.

  • Java, C, C #, VB.net, etc. sont "typés statiquement"
  • JavaScript, Python, Ruby, etc. sont "typés dynamiquement"

"Static" vérifie la structure au moment de la compilation. "Dynamic" vérifie la structure lors de l'exécution.

L'avantage du typage statique est que vous obtenez une erreur de compilation. Attaché à cela. Cela peut réduire considérablement les problèmes que vous ne voyez que lorsque vous l'exécutez. Je ne suis pas satisfait d'un système bâclé comme C, mais Java, Scala, OCaml, Haskell, etc. sont très utiles.

Il n'est pas nécessaire de comprendre tous les articles présentés, mais je pense qu'il suffit de les lire grossièrement et de ressentir "Hmm" grossièrement. Il est introduit en supposant qu'il sera relu une fois l'apprentissage progressé.

Orientation objet

Également en JavaScript [Orienté objet](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF Le concept de% E3% 83% 88% E6% 8C% 87% E5% 90% 91) est is, Ce n'est pas une connaissance essentielle, et vous pouvez en fait écrire du code sans trop de conscience.

En Java, en revanche, l'orientation des objets est une partie fondamentale et possède un mécanisme plus complexe.

Pour le moment, il semble bon de comprendre Héritage, Interface comme une entrée. En particulier, l '** interface ** est quelque chose que JavaScript n'a pas, et dans un endroit calme, il est pris en charge.

Une interface définit uniquement les signatures (noms, arguments, types de retour) des méthodes nécessaires pour réaliser une fonction particulière. Il n'a pas le traitement lui-même.

En termes simples, il omet la partie du code qui est exécutée de la définition de classe. En d'autres termes, bien qu'il définisse les spécifications externes de la classe, le contenu réel du traitement n'est pas décrit. En langage C, il équivaut à un fichier d'en-tête (* .h).

De plus, Java a également des ** classes abstraites ** qui se trouvent quelque part entre les classes et les interfaces, ce qui donne l'impression d'être une classe "partiellement sans code".

Les interfaces et les classes abstraites ne peuvent pas être utilisées telles quelles, et il est nécessaire d'hériter (implémenter l'interface) et de définir une classe qui complète le code de traitement manquant. Cela semble difficile à dire, mais en fait, vous n'avez pas à vous inquiéter trop au début.

Par exemple, dans Eclipse, lors de la création d'une nouvelle classe, la génération automatique des méthodes est vérifiée par défaut comme indiqué ci-dessous, donc s'il existe une fonction (méthode) pour laquelle le code n'est pas implémenté, créez également automatiquement la partie définition. Je vais. Même si vous l'effacez accidentellement ou oubliez de l'implémenter, vous obtiendrez des avertissements et des erreurs, ce qui vous permettra de le savoir immédiatement. image.png

Surcharge de méthode

Lors de la lecture du code Java, vous ne savez peut-être pas quelle fonction (méthode) portant le même nom est appelée. Cela est dû à Method Overload.

En Java, vous pouvez également définir plusieurs méthodes qui ont le même nom mais des types d'arguments et des séquences différents. C'est ce qu'on appelle la surcharge de méthode.

Avec JavaScript, vous pouvez simplement regarder le nom de la fonction pour le trouver. Dans le cas de Java, si plusieurs fonctions (méthodes) avec le même nom sont définies, vous devez rechercher celle qui correspond au nombre d'arguments et au type (y compris la relation d'héritage).

Eh bien, dans un environnement de développement intégré, vous pouvez vérifier cette zone et passer à la source de référence, donc ce n'est pas trop de problèmes. Dans Eclipse, par exemple, vous pouvez appuyer sur F3 tout en appelant une fonction pour accéder au code qui la définit.

Comparaison de chaînes

La première chose dans laquelle les débutants Java se font prendre est l'erreur de "comparaison de code de caractère". Les exemples suivants sont célèbres.

	String str1 = "123";
	String str2 = "123";
	String str3 = "12" + "3";
	String str4 = "12";
	str4 += "3";

	System.out.println(str1 == str2); // true (1
	System.out.println(str1 == str3); // true (2
	System.out.println(str1 == str4); // false (3
	System.out.println(str1.equals(str4)); // true (4

En JavaScript, l'opération `` = à plusieurs reprises sur une chaîne est une comparaison de valeurs, donc tout ce qui précède est vrai.

En Java, = incorrectement est fondamentalement un jugement du "même objet", et la méthode ```equals est utilisée pour comparer les valeurs.

La partie délicate ici est que (1 et (2 peuvent aboutir à `` vrai '' dans de nombreux environnements, ce qui peut provoquer des bogues. C'est l'effet des optimisations Java au moment de la compilation.

En Java, les chaînes sont immuables et leurs valeurs ne changent pas pendant l'exécution du programme. Ensuite, s'il s'agit d'une chaîne de caractères avec la même valeur que "123", en interne, "Oh, même si vous n'en préparez pas deux sérieusement, vous devriez en préparer une et l'utiliser, non?" Nous allons optimiser (découper). Le résultat (1 est `` vrai ''.

Les compilateurs Java encore plus modernes sont assez intelligents pour penser que si votre code contient l'expression "12" + "3", vous finirez par utiliser la chaîne "123", non? Il remplacera l'expression par le résultat "123" sans permission. Le résultat est donc (2 est également `` vrai '' pour la même raison que (1).

Ce résultat est le résultat de la compilation avec Java8. Les versions ultérieures du compilateur Java plus intelligent (3 peuvent également être optimisées pour être `` vraies '' w

N'oubliez donc pas d'utiliser la fonction `ʻequals`` pour comparer les valeurs en Java!

C'est aussi un concept en JavaScript, mais c'est une bonne idée de vérifier la [classe wrapper] de Java (https://java-code.jp/category/wrapper) pour le moment.

À propos de l'extension de langue

Certaines personnes peuvent avoir l'impression que le langage Java est ancien et fossile. Java est relativement agressif dans l'adoption des dernières spécifications de langage, et en particulier, il est de plus en plus influencé par JavaScript. Ce qui suit comprend des impressions personnelles.

JavaScript est également fortement influencé par Java, c'est donc comme un enfant de Java. Et Java a à son tour implémenté le meilleur de JavaScript. Faites attention à la version Java car les fonctionnalités sont ajoutées dans l'ordre, voir [Historique des versions Java](https://ja.wikipedia.org/wiki/Java%E3%83%90%E3%83%] Voir BC% E3% 82% B8% E3% 83% A7% E3% 83% B3% E5% B1% A5% E6% AD% B4).

Cependant, Java met également l'accent sur la compatibilité avec le passé, et des réformes structurelles drastiques sont difficiles, de sorte que certaines parties sont des implémentations assez agressives. C'est bien pour simplement utiliser les nouvelles fonctionnalités, mais certaines parties sont assez ésotériques lorsque vous entrez dans la partie implémentation, donc même si vous êtes préoccupé par les détails, vous devez enregistrer l'exploration après la progression de l'apprentissage. C'est recommandé.

Exemple de dispositif de mise en œuvre

Java dispose également de Classe sans nom, qui peut être utilisée comme suit, par exemple.

Test02


import java.util.*;

public class Test02 {
	public static void main(String[] args) {
		new Thread(new Runnable() { //Ici
			public void run(){
				System.out.print("Runnable.run");
			}
		}).start();
	}
}

Afin de maintenir la compatibilité avec le passé, c'est-à-dire en raison d'un environnement d'exécution inconnu tel qu'une classe anonyme, le fichier de classe suivant est automatiquement généré au moment de la compilation. Bien qu'elle soit décrite comme une classe anonyme dans le code, elle reçoit en fait un nom (Test02 $ 1 cette fois) en interne. image.png

En passant, à partir de JavaSE 8, vous pouvez utiliser la nouvelle description expression Lambda, et vous pouvez écrire plus comme JavaScript.

Test02


	List<String> list = new ArrayList<>(Arrays.asList("aa", "bb"));
	list.replaceAll(str -> str.toUpperCase());
	System.out.println(list); // [AA, BB]

Expansion encore inconnue

Comme mentionné ci-dessus, le langage Java a été étendu, mais on dit qu'il n'est toujours pas familier, et certains éléments ne peuvent être vus que dans le domaine du développement Java avancé.

Comme pour l'expression lambda que j'ai mentionnée plus tôt, même si elle est écrite normalement en JavaScript, elle peut sembler étrange lorsqu'elle est utilisée dans le langage Java. Même s'il peut être utilisé en raison de la version. Lisez le code existant et demandez à vos développeurs seniors de vous en faire une idée. Entrez dans la ville et suivez la ville.

Personnellement, generics est souvent utilisé normalement, et je pense que seul du code très ancien n'est pas utilisé.

Je pense que l 'annotation est devenue assez courante, mais je pense qu'il y a encore peu d'exemples d'utilisation jusqu'à ce que vous définissiez votre propre annotation.

Stream API est un style d'écriture souvent utilisé en JavaScript, mais j'estime qu'il n'est pas encore activement utilisé dans le code Java. Eh bien, je pense que c'est plus un sujet de conception de bibliothèque qu'un langage ...

La bibliothèque est importante

Comme pour tout langage de développement, les différences entre les langages ne sont pas si grandes, et celles qui prennent plus de temps à apprendre sont la compréhension de la bibliothèque et la manière de bien l'utiliser.

Java possède de nombreuses bibliothèques standard. Tout d'abord, renvoyons aux spécifications officielles de l'API ci-dessous. Cependant, il est difficile de tout lire, c'est donc une bonne idée de vérifier les détails lors de l'utilisation de la classe et d'élargir progressivement votre compréhension.

java.lang est la bibliothèque standard et sera chargée automatiquement depuis le début sans aucune configuration. Si vous voulez le lire correctement, est-ce d'ici au début?

Pour JavaScript, NodeJS peut généralement trouver les fonctionnalités dont vous avez besoin en recherchant le site npm. Pour Java, c'est une bonne idée de rechercher d'abord le référentiel Maven (https://mvnrepository.com/). Les fichiers de bibliothèque compilés (jar) pour chaque version sont également disponibles.

Notez que NodeJS npm télécharge et configure en même temps, mais dans le cas de Java, vous devez faire attention à le trouver dans l'environnement d'exécution Java. Si vous exécutez sur la ligne de commande, vous devez définir le chemin de classe ou spécifier l'emplacement où vous l'avez placé avec l'option -cp ou -classpath. Dans le cas d'Eclipse, vérifiez le paramètre Java Build Path du projet et, s'il n'est pas trouvé, ajoutez-le. image.png Certains endroits célèbres tels que JUnit sont déjà préparés dans l'environnement Eclipse, il peut donc être judicieux d'appuyer d'abord sur le bouton Ajouter une bibliothèque ci-dessous. image.png

Commençons à apprendre

Premièrement, j'ai brièvement noté les points qui semblaient préoccupants. Maintenant, commencez à apprendre Java. Ma recommandation personnelle est également le site Introduction au code Java.

Si vous êtes nouveau dans la programmation et que vous souhaitez lire un livre d'introduction plus doux, Introduction à Java 3rd Edition Refreshing Series Peut-être bon.

Au contraire, si vous êtes confiant, après avoir compris sur le site Web ci-dessus, etc., il peut être bon d'étudier avec les livres suivants selon la version, en vue d'acquérir des qualifications.

Enjoy!

Jusqu'à présent, j'ai résumé ce que vous devez savoir lors de l'apprentissage de Java pour les utilisateurs JavaScript expérimentés. Ce serait formidable si le seuil pour se familiariser avec le langage Java était même légèrement abaissé.

Au contraire, je suis désolé si c'est déroutant. J'espère que vous pourrez sauter le texte et vous référer aux différents liens que j'ai introduits!

J'ai moi-même appris Java-> JavaScript, donc je pense qu'il y a de nombreux oublis. Je pense que la description ne suffit pas, mais je voudrais la corriger et l'ajouter s'il y a quelque chose que j'ai remarqué.

À la prochaine!

Recommended Posts

Notes de pré-introduction pour les apprenants JavaScript expérimentés de Java
[Pour les débutants] Résumé du constructeur java
Génériques Kotlin pour les développeurs Java
Implémentation de la méthode de clonage pour Java Record
note java
Liste des destinations de téléchargement pour Oracle Java
Fonctionnalités du framework Spring pour les développeurs Java
Récapitulatif des paramètres de l'environnement Java pour moi-même [mac]
Consulter le mémo de la copie de fichier de Java 1.7 ou version ultérieure
Une collection de questions simples pour les débutants Java
[Introduction à Java] Bases de l'arithmétique Java (pour les débutants)
Comment spécifier l'index de JavaScript pour l'instruction
Pour l'apprentissage JAVA (2018-03-16-01)
Génériques Java (Notes)
[Java] Note sur le tableau
IDE 2017 pour Java
Java et JavaScript
[Java] Notes d'étude
Notes de sérialisation Java
[Java] Présentation de Java
Java pour instruction
Obtenir une liste d'informations MBean pour les applications Java
[Pour les débutants] Comprendre rapidement les bases de Java 8 lambda
Introduction à Java pour les débutants Connaissance de base du langage Java ①
Liste des instructions Java fréquemment utilisées (pour les débutants et les débutants)
Liens pour chaque version (version japonaise) de l'API Java SE
Comment exécuter l'exemple WebCamCapture de NyARToolkit pour Java
Résumé des méthodes de lecture de fichiers pour chaque format de fichier Java