jshell în Java

jshell este consola interactivă Java (REPL): scrii o expresie sau o instrucțiune și vezi imediat rezultatul, fără clasă și fără main.

Sintaxă
jshell                   # pornește sesiunea interactivă
jshell> 2 + 3
jshell> /vars            # variabilele definite
jshell> /methods         # metodele definite
jshell> /exit            # ieșire

Ce face jshell

jshell pornește o sesiune în care fiecare linie este evaluată imediat. Nu ai nevoie de clasă, main sau ; la final. Rezultatul fiecărei expresii este salvat automat într-o variabilă $1, $2… pe care o poți refolosi.

Poți declara variabile, metode și clase și le poți redefini oricând. Pachetele uzuale (java.util, java.io, java.util.stream și altele) sunt importate automat. Excepțiile sunt afișate, dar nu opresc sesiunea. Tasta Tab completează nume de clase și metode și afișează documentația.

Comenzile încep cu /: /vars, /methods, /list (tot ce ai scris), /edit, /save fisier.jsh, /open fisier.jsh, /help, /exit. Este ideal pentru a încerca rapid o metodă din bibliotecă sau pentru a învăța.

Exemple

Exemplul 1: O sesiune scurtă

Expresiile primesc nume automate ($1, $3). List merge fără import. Excepția este afișată, iar sesiunea continuă.

$ jshell
jshell> 2 + 3 * 4
jshell> var oras = "Iași"
jshell> oras.toUpperCase()
jshell> int patrat(int x) { return x * x; }
jshell> patrat(12)
jshell> List.of(3, 1, 2).stream().sorted().toList()
jshell> Math.sqrt(-1)
jshell> Integer.parseInt("abc")
jshell> /exit

Rezultat în terminal

|  Welcome to JShell -- Version 27
|  For an introduction type: /help intro

jshell> 2 + 3 * 4
$1 ==> 14

jshell> var oras = "Iași"
oras ==> "Iași"

jshell> oras.toUpperCase()
$3 ==> "IAȘI"

jshell> int patrat(int x) { return x * x; }
|  created method patrat(int)

jshell> patrat(12)
$5 ==> 144

jshell> List.of(3, 1, 2).stream().sorted().toList()
$6 ==> [1, 2, 3]

jshell> Math.sqrt(-1)
$7 ==> NaN

jshell> Integer.parseInt("abc")
|  Exception java.lang.NumberFormatException: For input string: "abc"
|        at NumberFormatException.forInputString (NumberFormatException.java:67)
|        at Integer.parseInt (Integer.java:529)
|        at Integer.parseInt (Integer.java:626)
|        at (#8:1)

jshell> /exit
|  Goodbye

Exemplul 2: /vars și /methods

În aceeași sesiune, /vars arată toate variabilele cu tipul lor, inclusiv cele automate, iar /methods metodele declarate.

jshell> /vars
jshell> /methods

Rezultat în terminal

jshell> /vars
|    int $1 = 14
|    String oras = "Iași"
|    String $3 = "IAȘI"
|    int $5 = 144
|    List<Integer> $6 = [1, 2, 3]
|    double $7 = NaN
|    int $8 = 0

jshell> /methods
|    int patrat(int)

Greșeli frecvente

  • Scrii o clasă întreagă cu main și aștepți să ruleze. În jshell, main nu se apelează automat; scrie direct instrucțiunile sau apelează-l tu: Main.main(new String[0]).
  • Uiți că redefinirea unei variabile sau metode o înlocuiește pe cea veche. Folosește /list ca să vezi ce e activ.
  • Folosești jshell pentru programe mari. E făcut pentru experimente; codul bun îl muți apoi într-un fișier .java (sau salvezi cu /save).

Comenzi înrudite

  • java (lansatorul): java pornește mașina virtuală Java și rulează un program: o clasă compilată, un fișier .jar sau direct un fișier sursă .java.
  • javac: javac este compilatorul Java: transformă fișierele .java în fișiere .class (bytecode) și raportează erorile și avertismentele.
  • var: Declară o variabilă locală al cărei tip este dedus de compilator din valoarea inițială; tipul rămâne fix.
  • main și structura unui program: Orice program Java pornește din metoda main a unei clase: public static void main(String[] args).