[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren

Einführung

Dieser Beitrag ist der Artikel zum 25. Tag des Java-Adventskalenders 2018. Obwohl ich ein Anfänger bin, habe ich mich vorerst im leeren Raum mit dem Geist "Es ist sinnvoll, daran teilzunehmen!" Registriert.

Trotz des letzten Tages tut mir der dünne Inhalt leid, aber wie ein Anfänger ist es Zeit für Hello World!

Führen Sie Java aus, ohne zu kompilieren! ??

Ich habe ein Gerücht von Java11 gehört, dass Java ausgeführt werden kann, ohne mit Java zu kompilieren, also werde ich Hello World ausprobieren. Es scheint jedoch, dass es Einschränkungen gibt, beispielsweise nur, wenn eine Quelldatei fertig ist, also werde ich das auch versuchen.

Umgebung

OS:Windows 10 Java:Oracle Open JDK 11 Konsole: Eingabeaufforderung

Zuallererst nur gewöhnliche Hello World

HelloJDK11.java

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

Versuche zu rennen

>java HelloJDK11.java
HelloWorld!

Herzlichen Glückwunsch, ich konnte es ausführen, ohne es zu kompilieren.

HelloJDK11.class wurde nicht in dem Verzeichnis erstellt, in dem HelloJDK11.java vorhanden ist.

Versuchen Sie, mit Javac zu kompilieren

>javac HelloJDK11.java

>java HelloJDK11
HelloWorld!

Wie üblich wurde HelloJDK11.class erstellt.

Jedoch,,,

>java HelloJDK11.java
Error:Klasse im Pfad der Anwendungsklasse gefunden: HelloJDK11

Wenn die Klassendatei im Klassenpfad vorhanden ist, führt die Ausführung der Java-Datei mit dem Befehl java anscheinend zu einem Fehler. Nach dem Löschen der Klassendatei kann diese mit Java HelloJDK11.java erneut ausgeführt werden.

Führen Sie für alle Fälle einen Methodenaufruf durch

public class HelloJDK11 {

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

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

Lauf

>java HelloJDK11.java
HelloWorld!
CalledMethod!

Der Methodenaufruf war auch in Ordnung.

Aliase den Java-Dateinamen und den Klassennamen

HelloJDK11.java

public class SorryJDK11 {

    public static void main(String[] args) {

~ Wie zuvor, also weggelassen ~

}

javaファイル名:HelloJDK11.java Klassenname: SorryJDK11

Ausführen und kompilieren

>java HelloJDK11.java
HelloWorld!
CalledMethod!

>javac HelloJDK11.java
HelloJDK11.java:1:Error:Klasse SorryJDK11 ist öffentlich und Datei SorryJDK11.Muss in Java deklariert werden
public class SorryJDK11 {
       ^
1 Fehler

Wenn der Java-Dateiname und der Klassenname nicht übereinstimmen,

Ich kann es nicht kompilieren, aber es scheint, dass es als Java-Datei ausgeführt werden kann.

Schreiben Sie eine Personenklasse und versuchen Sie es neu

HelloJDK11.java

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

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

Lauf

> java HelloJDK11.java
Suzuki

Es gab keine Probleme.

Teilen Sie die Personenklasse in separate Dateien auf

Teilen Sie HelloJDK11.java in zwei Dateien, HelloJDK11.java und Person.java.

>java HelloJDK11.java
HelloJDK11.java:7:Error:Symbol kann nicht gefunden werden
                Person suzuki = new Person("Suzuki");
                ^
Symbol:Klasse Person
Ort:Klasse HelloJDK11
HelloJDK11.java:7:Error:Symbol kann nicht gefunden werden
                Person suzuki = new Person("Suzuki");
                                    ^
Symbol:Klasse Person
Ort:Klasse HelloJDK11
2 Fehler
Error:Kompilierung fehlgeschlagen

Ein Kompilierungsfehler ist aufgetreten!

Zu Beginn erwähnte Einschränkungen

Laut "Es muss in einer Quelldatei ausgefüllt werden." Ein Kompilierungsfehler ist aufgetreten.

Wenn Sie vorerst mit javac kompilieren,
>javac HelloJDK11.java

Zwei Dateien, HelloJDK11.class und Person.class, wurden erstellt und konnten mit dem Befehl java ausgeführt werden.

Zusammenfassung

Als ich für Neulinge trainierte, erinnere ich mich, dass es jedes Mal schwierig war, Javac und Java zu verwenden. Daher war ich an der Operation interessiert, die dieses Mal ohne Java in Java 11 ausgeführt werden kann, und habe einen Artikel verfasst.

Laut JEP 330 scheint es nicht der Zweck zu sein, Java ohne Kompilierung wie eine Skriptsprache ausführen zu lassen.

Der Zweck besteht darin, Befehle in Java-Dateien als shevan (#! / Bin / sh in der ersten Zeile der Shell) auszuführen. ./HelloJDK11 Es scheint, dass es so ausgeführt werden kann. (Ich werde es das nächste Mal versuchen.)

Recommended Posts

[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe versucht, TCP / IP + BIO mit JAVA zu implementieren
Ich habe versucht, Sterling Sort mit Java Collector zu implementieren
Ich habe versucht, UDP mit Java zu kommunizieren
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Ich habe jetzt versucht, Java 8 zusammenzufassen
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Ich habe versucht, mit Web Assembly zu beginnen
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Ich habe versucht, eine Android-Anwendung mit MVC zu erstellen (Java)
Ich habe versucht, die Federbeinkonfiguration mit Coggle zu verwalten
Ich habe versucht, Anmeldeinformationen mit JMX zu verwalten
Java Ich habe versucht, einen einfachen Block zu brechen
Ich möchte Java8 für jeden mit Index verwenden
Ich habe versucht, neunundneunzig in Java auszugeben
Ich habe versucht, Alexa-Fähigkeiten mit Java zu erstellen
Ich habe versucht, node-jt400 (ausführen)
[Java] Ich habe versucht, über den Verbindungspool eine Verbindung mit Servlet (Tomcat) & MySQL & Java herzustellen
Ich habe versucht, was ich mit Stream leise versuchen wollte.
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
Ich habe versucht, die Firebase-Push-Benachrichtigung in Java zu implementieren
[Java] Ich habe versucht, Paizas B-Rang-Problem zu lösen
Ich habe versucht, SQS mit AWS Java SDK zu betreiben
# 2 [Anmerkung] Ich habe versucht, neunundneunzig mit Java zu berechnen.
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Ich habe versucht, mit Spring Data JPA zu beginnen
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich habe versucht, Animationen mit der Blazor + Canvas-API zu zeichnen
Ich habe versucht, mit OCR eine PDF-Datei mit Java zu verarbeiten
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
[Java] Ich habe versucht, die Yahoo API-Produktsuche zu implementieren
Ich habe versucht, Java Silver in 2 Wochen zu bestehen, ohne Java zu kennen
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
~ Ich habe jetzt versucht, funktionale Programmierung mit Java zu lernen ~
Ich habe nc (netcat) normalerweise mit JAVA gemacht
Ich habe versucht herauszufinden, was sich in Java 9 geändert hat
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
[Swift] Ich habe versucht, mit UICollectionView eine Instagram-ähnliche Benutzeroberfläche mit nur Code ohne Storyboard zu implementieren
[Azure] Ich habe versucht, eine kostenlose Java-App zu erstellen ~ Mit FTP verbinden ~ [Anfänger]
Ich habe DI mit Ruby versucht
Java zum Spielen mit Function
Ich habe Drools (Java, InputStream) ausprobiert.
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Ich habe versucht, Java REPL zu verwenden
Ich habe UPSERT mit PostgreSQL ausprobiert.
Ich habe BIND mit Docker ausprobiert
Ich habe versucht, yum-cron zu verifizieren
Ich habe versucht, Metaprogrammierung mit Java