[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac

introduction

Cet article est l'article du 25ème jour du calendrier de l'avent Java 2018. Bien que je sois débutant, je me suis inscrit dans l'espace vide pour le moment avec l'esprit "C'est significatif de participer!"

Malgré le dernier jour, je suis désolé pour le contenu fin, mais comme un débutant, il est temps pour Hello World!

Exécutez java sans compiler! ??

J'ai entendu une rumeur de Java11 selon laquelle java peut être exécuté sans compiler avec javac, je vais donc essayer Hello World. Cependant, il semble qu'il existe des restrictions telles que uniquement lorsqu'un fichier source est terminé, je vais donc essayer cela également.

environnement

OS:Windows 10 Java:Oracle Open JDK 11 Console: invite de commande

Tout d'abord, seulement Hello World ordinaire

HelloJDK11.java

public class HelloJDK11 {
    public static void main(String[] args) {
        System.out.println("HelloWorld!");
    }
}

Essayez de courir

>java HelloJDK11.java
HelloWorld!

Félicitations, j'ai pu l'exécuter sans le compiler.

HelloJDK11.class n'a pas été créé dans le répertoire où se trouve HelloJDK11.java.

Essayez de compiler avec javac

>javac HelloJDK11.java

>java HelloJDK11
HelloWorld!

Comme d'habitude, HelloJDK11.class a été créé.

Pourtant,,,

>java HelloJDK11.java
Erreur:Classe trouvée dans le chemin de classe de l'application: HelloJDK11

Apparemment, si le fichier de classe existe sur le chemin de classe, l'exécution du fichier java avec la commande java entraînera une erreur. Après avoir supprimé le fichier de classe, il peut être exécuté à nouveau avec java HelloJDK11.java.

Faire un appel de méthode juste au cas où

public class HelloJDK11 {

    public static void main(String[] args) {
        System.out.println("HelloWorld!");
        callMethod();
    }

    private static void callMethod() {
        System.out.println("CalledMethod!");
    }
}

Courir

>java HelloJDK11.java
HelloWorld!
CalledMethod!

L'appel de méthode était bien aussi.

Aliase le nom du fichier java et le nom de la classe

HelloJDK11.java

public class SorryJDK11 {

    public static void main(String[] args) {

~ Comme avant, donc omis ~

}

javaファイル名:HelloJDK11.java Nom de la classe: SorryJDK11

Exécuter et compiler

>java HelloJDK11.java
HelloWorld!
CalledMethod!

>javac HelloJDK11.java
HelloJDK11.java:1:Erreur:La classe SorryJDK11 est publique et fichier SorryJDK11.Doit être déclaré en java
public class SorryJDK11 {
       ^
1 erreur

Si le nom du fichier java et le nom de la classe ne correspondent pas,

Je ne peux pas le compiler, mais il semble qu'il puisse être exécuté en tant que fichier java.

Écrivez une classe Person et essayez-en une nouvelle

HelloJDK11.java

public class HelloJDK11 {
    public static void main(String[] args) {
        Person suzuki = new Person("Suzuki");
        System.out.println(suzuki.getName());
    }
}

class Person {
    //champ
    private String name;
    //constructeur
    public Person(String name) {
        this.name = name;
    }
    //Getter
    public String getName() {
        return this.name;
    }
}

Courir

> java HelloJDK11.java
Suzuki

Il n'y a eu aucun problème.

Diviser la classe Person en fichiers séparés

Divisez HelloJDK11.java en deux fichiers, HelloJDK11.java et Person.java.

>java HelloJDK11.java
HelloJDK11.java:7:Erreur:Impossible de trouver le symbole
                Person suzuki = new Person("Suzuki");
                ^
symbole:Personne de classe
endroit:Classe HelloJDK11
HelloJDK11.java:7:Erreur:Impossible de trouver le symbole
                Person suzuki = new Person("Suzuki");
                                    ^
symbole:Personne de classe
endroit:Classe HelloJDK11
2 erreurs
Erreur:La compilation a échoué

Une erreur de compilation s'est produite!

Restrictions mentionnées au début

Selon "Il doit être rempli dans un fichier source." Une erreur de compilation s'est produite.

Pour le moment, si vous compilez avec javac,
>javac HelloJDK11.java

Deux fichiers, HelloJDK11.class et Person.class, ont été créés et peuvent être exécutés avec la commande java.

Résumé

Quand je m'entraînais pour les nouveaux arrivants, je me souviens qu'il était gênant de javac et java à chaque fois, donc j'étais intéressé par l'opération qui peut être exécutée sans javac dans Java 11 cette fois et j'ai fait un article.

Selon JEP 330, il semble que le but n'est pas de permettre à Java de fonctionner sans compilation comme un langage de script séparé.

Le but est d'exécuter des commandes dans des fichiers Java comme shevan (#! / Bin / sh sur la première ligne du shell). ./HelloJDK11 Il semble que cela puisse être exécuté comme ça. (Je vais l'essayer la prochaine fois.)

Recommended Posts

[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
J'ai essayé d'interagir avec Java
J'ai essayé de faire une authentification de base avec Java
J'ai essayé de casser le bloc avec java (1)
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
J'ai essayé d'implémenter Sterling Sort avec Java Collector
J'ai essayé la communication UDP avec Java
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé de résumer Java 8 maintenant
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
J'ai essayé de résumer les expressions Java lambda
J'ai essayé de démarrer avec Web Assembly
J'ai essayé d'utiliser OpenCV avec Java + Tomcat
J'ai essayé de créer une application Android avec MVC maintenant (Java)
J'ai essayé de gérer la configuration des jambes de force avec Coggle
J'ai essayé de gérer les informations de connexion avec JMX
java j'ai essayé de casser un simple bloc
Je veux utiliser java8 forEach avec index
J'ai essayé de sortir quatre-vingt-dix-neuf en Java
J'ai essayé de créer une compétence Alexa avec Java
J'ai essayé node-jt400 (exécuter)
[Java] J'ai essayé de me connecter en utilisant le pool de connexion avec Servlet (tomcat) & MySQL & Java
J'ai essayé ce que je voulais essayer avec Stream doucement.
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
J'ai essayé d'implémenter la notification push Firebase en Java
[Java] J'ai essayé de résoudre le problème de rang B de Paiza
J'ai essayé de faire fonctionner SQS en utilisant AWS Java SDK
# 2 [Note] J'ai essayé de calculer quatre-vingt-dix-neuf avec Java.
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
J'ai essayé de démarrer avec Spring Data JPA
J'ai essayé de créer une compétence Clova en Java
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé de dessiner une animation avec l'API Blazor + canvas
J'ai essayé OCR de traiter un fichier PDF avec Java
Je veux faire des transitions d'écran avec kotlin et java!
[Java] J'ai essayé de mettre en œuvre la recherche de produits de l'API Yahoo
J'ai essayé de passer Java Silver en 2 semaines sans connaître Java
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
~ J'ai essayé d'apprendre la programmation fonctionnelle avec Java maintenant ~
J'avais l'habitude de faire nc (netcat) avec JAVA normalement
J'ai essayé de découvrir ce qui avait changé dans Java 9
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
[Swift] J'ai essayé d'implémenter une interface utilisateur semblable à un profil Instagram avec UICollectionView avec juste du code sans storyboard
[Azure] J'ai essayé de créer une application Java gratuitement ~ Se connecter avec FTP ~ [Débutant]
J'ai essayé DI avec Ruby
Java pour jouer avec Function
J'ai essayé Drools (Java, InputStream)
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
J'ai essayé d'utiliser Java REPL
J'ai essayé UPSERT avec PostgreSQL.
J'ai essayé BIND avec Docker
J'ai essayé de vérifier yum-cron
J'ai essayé la métaprogrammation avec Java