Défi d'expliquer Hello World de Java en se référant aux spécifications du langage

Cet article est un article du projet spécial de Schoo "Calendrier de l'avent Schoo 2016" à la fin de 2016. Je suis assistant chez Schoo, spécialisé dans le business plan.

Cette fois, je vais expliquer Hello World de Java en référence aux spécifications du langage. C'est une histoire comme pourquoi "public static void main (String [] args) {...}".

class Test {
	public static void main(String[] args) {
		System.out.println("Hello World");
	}
}

Pourquoi public static void main (String [] args) {...} est par conception

La méthode main doit être déclarée comme public, static, void. Il doit également prendre un argument, qui est un tableau de chaînes. Source: Spécification du langage Java 3e édition 12.1.4 Démarrage de Test.main P.277 </ cite>

Il n'y a pas d'autre choix que d'obéir parce que ça dit quelque chose comme ça. Aucun langage de programmation ne peut démarrer sans un point de départ appelé point d'entrée. Bien que cela varie en fonction de la langue, les spécifications du point d'entrée sont fixes, et dans le cas de Java, c'est le cas.

Il est normal de terminer avec ceci, mais compte tenu de la raison de cela, vous pouvez voir différents mondes Java, alors veuillez rester en contact.

classe

Tout d'abord, parlons de la partie déclaration de classe.

class Test {
    …
}

Il est déclaré qu'il existe un mot-clé "classe" et qu'il s'agit d'une classe appelée "Test".

Puisque Java est basé sur l'orientation objet, nous pouvons imaginer que le bloc de construction de base est une classe. Cela ne traite pas la méthode main () comme une exception, donc chaque fois que vous exécutez la méthode main (), elle appartient à une classe.

Le nom de la classe peut être n'importe quoi tant qu'il ne viole pas les règles. Après tout, il n'y a aucune restriction sur le nom de la classe lors de l'exécution de la méthode main () car il sera spécifié lors de la saisie de la commande java. Au contraire, le nom de la classe peut être n'importe quoi, il est donc permis d'écrire la méthode main () dans n'importe quelle classe. Certaines personnes comprennent parfois mal qu'elles doivent faire partie du projet, mais vous pouvez écrire dans n'importe quelle classe. Par exemple, lors de l'écriture temporaire du code de test. (JUnit est meilleur)

De plus, certaines personnes peuvent penser qu'il n'y a pas de «public», mais ce n'est pas une obligation.

Allons un peu plus loin dans la déclaration de classe ici.

Une déclaration de classe est une déclaration d'un nouveau type de référence. Il existe deux types de déclarations de classe: les déclarations de classe normales et les déclarations d'énumération. Source: Spécification du langage Java 3e édition 8.1 Déclaration de classe P.194 </ cite>

La partie qui "déclare un nouveau type de référence" est la plus importante, et si vous ne comprenez pas qu'une classe est un type de référence, vous ne pouvez probablement pas comprendre le polymorphisme. De plus, puisqu'il s'agit d'une "classe" ou "enum", enum est en fait une classe spéciale. Même si l'énumération semble être un concept différent de la classe, il faut supprimer qu'elle présente diverses caractéristiques de classe.

Méthode

Vient ensuite la partie déclaration de méthode.

public static void main(String[] args) {
    …
}

Les spécifications de la méthode elle-même ressemblent à ceci.

La méthode déclare du code exécutable qui peut être appelé en passant un certain nombre d'arguments comme valeurs. Source: Spécification du langage Java 3e édition 8.4 Déclaration de méthode P.186 </ cite>

Modificateur d'accès

Le modificateur d'accès doit être "public".

Je peux imaginer pourquoi il doit être «public». Étant donné que la JVM exécute la méthode main () de la classe spécifiée par l'argument, "public" convient parfaitement étant donné qu'il est évidemment démarré de l'extérieur. Il semble que la désignation «publique» soit nécessaire.

Il existe des modificateurs d'accès «public», «(non spécifié)», «protected» et «private» pour les méthodes, et il est souhaitable de contrôler le masquage des informations du comportement en les sélectionnant.

static

Doit être «statique». Étant donné que c'est comme qui instancie la méthode main (), il est inévitable que la méthode main () soit une méthode statique.

Les méthodes déclarées statiques sont appelées méthodes de classe. Les méthodes de classe sont toujours appelées sans référence à un objet particulier. Source: Java Language Specification 3e édition 8.4.3.2 méthode statique P.193 </ cite>

En tant que méthode de création d'une instance en Java, «nouveau» ou «créer par réflexion» peut être envisagé. Cependant, on suppose que ceux-ci sont effectués par l'objet initialement instancié. Alors que se passe-t-il dans l'état initial où aucune instance n'existe encore?

Par conséquent, la statique existe en Java. Il est statique qu'il puisse être "toujours lancé sans référence à un objet particulier" comme décrit dans la spécification. Par conséquent, il est nécessaire d'avoir une méthode statique qui puisse être lancée telle quelle pour qu'un certain type de démarrage puisse être effectué lorsqu'il n'y a aucun objet que n'importe qui peut recommencer.

Si vous pouvez comprendre cela, vous devriez être en mesure de comprendre le modèle de mémoire de Java. Les classes Java sont essentiellement des dessins de conception d'objets qui sont instanciés et développés en mémoire au nouveau timing (bien qu'il y ait réflexion). Cependant, en dehors de cela, la statique existe également.

Ce concept statique est quelque peu difficile à expliquer aux débutants du programme. Quand j'essaye de transmettre le concept de "nouveau", je dis "certaines choses sont statiques" ... De plus, une personne expérimentée en langage fonctionnel est abusive pour rendre tout statique.

Type de retour

Le type de retour doit être "void". La méthode main () en Java ne renvoie rien.

Dans le type de retour de la méthode, déclarez la valeur si la méthode correspondante renvoie une valeur, et décrivez void dans le cas contraire. Source: Spécification du langage Java 3e édition 8.4.5 Méthode de retour P.196 </ cite>

Cela ne semble rien renvoyer, donc c'est nul. Si vous voulez vraiment retourner un code retour, il existe une méthode comme System.exit ().

Nom de la méthode

Le nom de la méthode doit être "main". C'est une règle, donc je n'ai pas d'autre choix que d'y obéir.

Si vous faites une erreur comme "mein" de temps en temps, vous n'obtiendrez pas d'erreur de compilation et vous ne pourrez pas démarrer. Les gens qui y sont habitués sont bons, mais les débutants ont tendance à faire des erreurs et à devenir accro, surtout s'ils ne le font qu'avec le bloc-notes.

Le nom normal de la méthode peut être n'importe quoi tant qu'il ne viole pas la convention.

argument

"De plus, vous devez recevoir un argument qui est un tableau de chaînes." "String [] args" est obligatoire. Il doit être présent et aucun autre argument ne peut être accepté. Par ailleurs, il est possible d'écrire "String ... args".

Ceci est nécessaire pour obtenir des informations au démarrage. Il est bon de supposer que vous souhaitez spécifier le mode de l'application.

à la fin

Sur cette base, je vais expliquer aux débutants. Je souhaite que la version japonaise de la version Java SE 8 de la spécification de langage soit publiée.

Recommended Posts

Défi d'expliquer Hello World de Java en se référant aux spécifications du langage
Revenant au début, Java-Kisama s'est moqué de Hello World-
12 Correspond à l'instruction while
À propos de la langue à apprendre à partir de maintenant
J'ai essayé d'expliquer la méthode