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,mainnu 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
/listca 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).