Java 11 kildekode for én fil

1. Introduksjon

JDK 11, som er implementeringen av Java SE 11, utgitt i september 2018.

I denne opplæringen vil vi dekke den nye Java 11-funksjonen for å starte kildekodeprogrammer med en fil.

2. Før Java 11

Et enkeltfilsprogram er et program der programmet passer i en enkelt kildefil.

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

For eksempel hvis en fil heter HelloWorld.java inneholder en klasse som heter Hei Verden med en hoved() metode, vi må først kompilere det:

$ javac HelloWorld.java

Dette ville generere en klassefil som vi må kjøre med kommandoen:

$ java HelloWorld Hello Java 11!

Slike programmer er standard i de tidlige stadiene av Java-læring eller når du skriver små verktøy. I denne sammenhengen er det litt seremonielt å måtte kompilere programmet før du kjører det.

Men ville det ikke vært bra å bare ha en ett-trinns prosess i stedet? Java 11 prøver å løse dette ved å la oss kjøre slike programmer direkte fra kilden.

3. Starte kildekodeprogrammer for én fil

Fra og med Java 11 kan vi bruke følgende kommando til å utføre et enkeltfilsprogram:

$ java HelloWorld.java Hei Java 11!

Legg merke til hvordan vi passerte navnet på Java-kildekoden og ikke Java-klassen til java kommando.

JVM kompilerer kildefilen til minnet og kjører deretter den første publikummet hoved() metoden den finner.

Vi får kompileringsfeil hvis kildefilen inneholder feil, men ellers vil den kjøre akkurat som om vi allerede hadde samlet den.

4. Kommandolinjealternativer

Java-lanseringen introduserte en ny kildefil-modus for å støtte denne funksjonen. Kildefilmodus er aktivert hvis en av følgende to betingelser er oppfylt:

  1. Det første elementet på kommandolinjen etterfulgt av JVM-alternativene er et filnavn med .java Utvidelse
  2. Kommandolinjen inneholder -kilde versjonsalternativ

Hvis filen ikke følger standard navngivningskonvensjoner for Java-kildefiler, må vi bruke -kilde alternativ. Vi snakker mer om slike filer i neste avsnitt.

Eventuelle argumenter plassert etter navnet av kildefilen i den opprinnelige kommandolinjen sendes til den kompilerte klassen når den kjøres.

For eksempel har vi en fil som heter Tillegg.java som inneholder en Addisjon klasse. Denne klassen inneholder en hoved() metode som beregner summen av argumentene:

$ java tillegg.java 1 2 3

Vi kan også passere alternativer som –Klasse-sti før filnavnet:

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

Nå, vi får en feil hvis det er en klasse på applikasjonsklassen med samme navn som klassen vi kjører.

La oss for eksempel si at vi på et tidspunkt under utviklingen samlet filen som er tilstede i vår nåværende arbeidskatalog ved hjelp av javac:

$ javac HelloWorld.java

Vi har nå begge deler HelloWorld.java og HelloWorld.class til stede i gjeldende arbeidskatalog:

$ ls HelloWorld.class HelloWorld.java

Men hvis vi prøver å bruke kildefilmodus, får vi en feil:

$ java HelloWorld.java-feil: klasse funnet på programklassesti: HelloWorld

5. Shebang Files

Det er vanlig i Unix-avledede systemer, som macOS og Linux, å bruke "#!" direktivet om å kjøre en kjørbar skriptfil.

For eksempel starter et skallskript vanligvis med:

#! / bin / sh

Vi kan da utføre skriptet:

$ ./some_script

Slike filer kalles "shebang-filer".

Vi kan nå utføre Java-enkeltfilsprogrammer ved hjelp av den samme mekanismen.

Hvis vi legger til følgende i begynnelsen av en fil:

#! / sti / til / java - kildeversjon

La oss for eksempel legge til følgende kode i en fil som heter legge til:

#! / 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 merk filen som kjørbar:

$ chmod + x add

Deretter kan vi kjøre filen akkurat som et skript:

$ ./ legg til 1 2 3 6

Vi kan også eksplisitt bruke lanseringen til å påkalle shebang-filen:

$ java - kilde 11 legg til 1 2 3 6

De -kilde alternativet er nødvendig selv om det allerede er tilstede i filen. Shebang i filen ignoreres og behandles som en vanlig java-fil uten .java Utvidelse.

derimot, vi kan ikke behandle en .java filen som en shebang-fil, selv om den inneholder en gyldig shebang-fil. Dermed vil følgende resultere i en feil:

$ ./Addition.java ./Addition.java:1: feil: ulovlig karakter: '#' #! / Usr / local / bin / java - kilde 11 ^

En siste ting å merke seg om shebang-filer er at direktivet gjør filen plattformavhengig. Filen kan ikke brukes på plattformer som Windows, som ikke støtter den naturlig.

6. Konklusjon

I denne artikkelen så vi den nye kildekodefunksjonen for én fil introdusert i Java 11.

Som vanlig kan du finne kodebiter på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found