Java 11 kildekode til enkelt fil

1. Introduktion

JDK 11, som er implementeringen af ​​Java SE 11, udgivet i september 2018.

I denne vejledning dækker vi den nye Java 11-funktion til lancering af kildekodeprogrammer med en fil.

2. Før Java 11

Et enkeltfilsprogram er et, hvor programmet passer i en enkelt kildefil.

Før Java 11, selv for et enkeltfilsprogram, måtte vi følge en totrinsproces for at køre programmet.

For eksempel hvis en fil kaldes HelloWorld.java indeholder en klasse kaldet Hej Verden med en hoved () metode, vi bliver nødt til først at kompilere det:

$ javac HelloWorld.java

Dette ville generere en klassefil, der vi bliver nødt til at køre ved hjælp af kommandoen:

$ java HelloWorld Hej Java 11!

Sådanne programmer er standard i de tidlige faser af Java-læring eller når man skriver små hjælpeprogrammer. I denne sammenhæng er det lidt ceremonielt at skulle kompilere programmet, før det køres.

Men ville det ikke være dejligt at bare have en et-trins proces i stedet? Java 11 forsøger at løse dette ved at tillade os at køre sådanne programmer direkte fra kilden.

3. Start af kildekodeprogrammer med en fil

Fra og med Java 11 kan vi bruge følgende kommando til at udføre et enkeltfilsprogram:

$ java HelloWorld.java Hej Java 11!

Læg mærke til, hvordan vi sendte navnet på Java-kildekoden og ikke Java-klassen til java kommando.

JVM kompilerer kildefilen til hukommelsen og kører derefter den første offentlighed hoved () metode, den finder.

Vi får kompileringsfejl, hvis kildefilen indeholder fejl, men ellers kører den lige som om vi allerede havde kompileret den.

4. Kommandolinjevalg

Java-launcheren introducerede en ny kildefil-tilstand for at understøtte denne funktion. Kildefiltilstanden er aktiveret, hvis en af ​​følgende to betingelser er opfyldt:

  1. Det første element på kommandolinjen efterfulgt af JVM-indstillingerne er et filnavn med .java udvidelse
  2. Kommandolinjen indeholder -kilde version mulighed

Hvis filen ikke følger de almindelige navngivningskonventioner for Java-kildefiler, skal vi bruge -kilde mulighed. Vi vil tale mere om sådanne filer i det næste afsnit.

Eventuelle argumenter placeret efter navnet af kildefilen i den originale kommandolinje sendes til den kompilerede klasse, når den udføres.

For eksempel har vi en fil kaldet Tilføjelse.java der indeholder en Tilføjelse klasse. Denne klasse indeholder en hoved () metode, der beregner summen af ​​dens argumenter:

$ java tilføjelse. java 1 2 3

Vi kan også videregive valgmuligheder –Klasse-sti foran filnavnet:

$ java --class-path = / some-path Addition.java 1 2 3

Nu, Vi får en fejl, hvis der er en klasse på klassens sti med samme navn som den klasse, vi udfører.

Lad os for eksempel sige på et eller andet tidspunkt under udviklingen, vi kompilerede filen til stede i vores nuværende arbejdsmappe ved hjælp af javac:

$ javac HelloWorld.java

Vi har nu begge dele HelloWorld.java og HelloWorld.class til stede i den aktuelle arbejdsmappe:

$ ls HelloWorld.class HelloWorld.java

Men hvis vi prøver at bruge kildefiltilstand, får vi en fejl:

$ java HelloWorld.java-fejl: klasse fundet i programklassesti: HelloWorld

5. Shebang-filer

Det er almindeligt i Unix-afledte systemer, som macOS og Linux, at bruge "#!" direktiv til at køre en eksekverbar scriptfil.

For eksempel starter et shell-script typisk med:

#! / bin / sh

Vi kan derefter udføre scriptet:

$ ./some_script

Sådanne filer kaldes “shebang filer”.

Vi kan nu udføre Java-enkeltfilsprogrammer ved hjælp af den samme mekanisme.

Hvis vi tilføjer følgende til begyndelsen af ​​en fil:

#! / sti / til / java - kildeversion

Lad os f.eks. Tilføje følgende kode i en fil med navnet tilføje:

#! / usr / local / bin / java - kilde 11 importerer java.util.Arrays; public class Addition {public static void main (String [] args) {Integer sum = Arrays.stream (args) .mapToInt (Integer :: parseInt) .sum (); System.out.println (sum); }}

Og markér filen som eksekverbar:

$ chmod + x tilføj

Derefter kan vi udføre filen ligesom et script:

$ ./ tilføj 1 2 3 6

Vi kan også eksplicit bruge launcheren til at påkalde shebang-filen:

$ java - kilde 11 tilføj 1 2 3 6

Det -kilde option er påkrævet, selvom den allerede er til stede i filen. Shebang i filen ignoreres og behandles som en normal java-fil uden .java udvidelse.

Imidlertid, vi kan ikke behandle en .java fil som en shebang-fil, selvom den indeholder en gyldig shebang-fil. Følgende vil således resultere i en fejl:

$ ./Addition.java ./Addition.java:1: fejl: ulovligt tegn: '#' #! / Usr / local / bin / java - kilde 11 ^

En sidste ting at bemærke om shebang-filer er, at direktivet gør filen platformafhængig. Filen kan ikke bruges på platforme som Windows, som ikke understøtter den oprindeligt.

6. Konklusion

I denne artikel så vi den nye kildekodefunktion til en enkelt fil introduceret i Java 11.

Som sædvanligt kan kodeuddrag findes på GitHub.