JShell es una herramienta que se instala con el Java Development Kit (JDK) y es muy útil para probar código Java, sin necesidad de hacer un programa completo y tener que compilarlo.
Para arrancar JShell tendrás que abrir un terminal y teclear:
jshell
Si todo va bien, deberías ver una pantalla similar a la de la siguiente figura:

Si quieres salir de la aplicación, tienes que teclear:
/exit
Nota: si al teclear jshell, no aparece el prompt de la aplicación, puede significar que no tienes instalado el JDK o que no tienes configurada correctamente la variable PATH del sistema.
Utilización como calculadora
Un posibilidad que ofrece JShell y que puede ser útil en determinadas circunstancias es utilizarlo como calculadora. Puedes realizar operaciones matemáticas y tendrás acceso a los métodos de la clase Math y al uso de variables.
Por ejemplo, trata de hacer en tu consola las operaciones que aparecen en la siguiente figura u otras similares:

Observa que, tras cada operación, aparece el signo del dólar ($) seguido de un número. Son variables que quedan guardadas en la memoria y pueden ser invocadas a posteriori. Observa la siguiente serie de operaciones, en la que se reutiliza uno de los resultados obtenidos:

Variables Java
También podemos definir y utilizar variables Java, pero en ese caso habrá que declarar y asignar las variables con su tipo de dato, como lo haríamos dentro de un programa:

Como detalle, puedes ver que estas instrucciones Java no las terminamos en punto y coma. En jshell no es necesario terminar las instrucciones sueltas en punto y coma (Cuando definamos clases, sí que hay que respetar la sintaxis Java).
En cualquier momento puedes consultar la lista de variables que hay en memoria tecleando la orden /vars:

Si quieres borrar totalmente el contenido de la memoria puedes teclear la orden /reset.
Probar código
Es cómodo probar código sin tener que teclear una clase completa, compilarla y ejecutarla. Además, para ver la salida por pantalla de las instrucciones, no necesitamos usar métodos System.out.println():

Probar funciones
Puedes teclear el código de una función y utilizar la función posteriormente.

Las funciones que hayas definido quedan guardadas en memoria. Puedes obtener el listado de las funciones que hayas definido en la sesión utilizando la orden /methods. Si tecleas /reset se borrará la memoria completa, incluyendo variables y funciones.
Clases y objetos
Puedes crear clases y objetos:

Podrías crear también, no solo clases, sino interfaces o enumeraciones. Para listar los tipos de datos que hayas definido en la sesión tienes que teclear la orden /types.
Una vez definido un tipo de datos, puedes crear funciones que lo utilicen, sin necesidad de incluir la función como método del tipo:

Guardar el trabajo
La orden /list sirve para ver las instrucciones que has tecleado. La orden /save, seguida de un nombre de fichero, sirve para guardar dichas órdenes en un fichero y poderlas reutilizar a posteriori. Podrías cargar el fichero en JShell al abrirlo o utilizando la orden /open.
Cargar ficheros
Podemos cargar ficheros existentes utilizando la orden /open. Imagina que tienes un fichero llamado Punto.java, en el directorio en el que has abierto JShell, con el siguiente contenido:
public class Punto {
public int x, y;
public Punto(int x, int y) {
this.x = x;
this.y = y;
}
public double dist(Punto p) {
return Math.sqrt(x*p.x + y*p.y);
}
public double distOrigen() {
return Math.sqrt(x*x + y*y);
}
}
Puedes abrir el fichero y utilizar sus definiciones:

Puedes cargar un fichero en memoria en el momento de abrir JShell tecleando su nombre a continuación de jshell:
jshell Punto.java
El fichero puede ser una clase .java o un fichero de órdenes guardadas previamente con /save. En ambos casos, las ordenes contenidas en el fichero se ejecutarán como si las tecleases dentro del terminal.
Edición en consola
Puedes usar las teclas de flecha arriba/abajo, para editar instrucciones anteriores y moverte dentro de ellas para cambiar su contenido. Esto permite modificar instrucciones anteriores que hayamos utilizado para definir tipos de datos o funciones.
Las instrucciones multilínea aparecerán de una sola vez y podrás moverte dentro de ellas para editarlas.
Cuando se necesita modificar un método ya definido, JShell ofrece el comando /edit seguido del nombre del método. Este comando abre una pequeña ventana de edición gráfica integrada en la que puede modificarse el código y confirmar los cambios con el botón Accept:
/edit grad2rad
El editor integrado de JShell es una ventana gráfica propia de la herramienta, independiente del editor del sistema operativo. Funciona sin ninguna configuración adicional en Windows, macOS y en Linux con entorno gráfico de escritorio.

💡El editor de JShell se puede utilizar también para editar clases o interfaces. La condición para editar una función o una clase es que tienen que estar definidas previamente.
Un truco útil para crear una clase es definirla vacía en JShell y luego editarla en el editor para completar atributos y métodos de manera más cómoda. Algo parecido se puede hacer con las funciones y los interfaces.
Resumen de órdenes
La tabla siguiente muestra un resumen de las órdenes que hemos mostrado en el artículo.
| Instrucción | Explicación |
| /exit | Cierra la consola JSHELL |
| CTRL + L | Limpia la pantalla |
| /vars | Lista las variables en memoria |
| /methods | Lista las funciones en memoria |
| /types | Lista los tipos de datos definidos |
| /list | Lista las órdenes tecleadas con anterioridad |
| /reset | Limpia la memoria de la sesión actual |
| /open nombre_fichero | Abre un fichero y carga sus definiciones |
| /save nombre_fichero | Guarda las ordenes en un fichero |
| /edit identificador | Abre un editor para editar el contenido de una función, un método o un interface |
Santiago Higuera, 12 de marzo de 2026