Java Language
JShell
Buscar..
Introducción
JShell es un REPL interactivo para Java agregado en JDK 9. Permite a los desarrolladores evaluar instantáneamente expresiones, probar clases y experimentar con el lenguaje Java. El acceso temprano para jdk 9 se puede obtener en: http://jdk.java.net/9/
Sintaxis
- $ jshell - Inicia el JShell REPL
- jshell> / <comando> - Ejecuta un comando JShell dado
- jshell> / exit - Salir de JShell
- jshell> / help - Ver una lista de comandos de JShell
- jshell> <java_expression> - Evalúa la expresión Java dada (punto y coma opcional)
- jshell> / vars O / métodos O / tipos: vea una lista de variables, métodos o clases, respectivamente.
- jshell> / open <archivo> - lee un archivo como entrada al shell
- jshell> / edit <identifier> - edita un fragmento en el editor de conjuntos
- jshell> / set editor <comando>: establece el comando que se usará para editar fragmentos de código usando / editar
- jshell> / drop <identifier> - borra un fragmento
- jshell> / reset - Restablece la JVM y borra todos los fragmentos
Observaciones
JShell requiere el Java 9 JDK, que actualmente se puede descargar (marzo de 2017) como instantáneas de acceso temprano desde jdk9.java.net . Si, cuando intenta ejecutar el comando jshell
, obtiene un error que comienza con Unable to locate an executable
, asegúrese de que JAVA_HOME
esté configurado correctamente.
Importaciones por defecto
Los siguientes paquetes se importan automáticamente cuando se inicia JShell:
import java.io.*
import java.math.*
import java.net.*
import java.nio.file.*
import java.util.*
import java.util.concurrent.*
import java.util.function.*
import java.util.prefs.*
import java.util.regex.*
import java.util.stream.*
Entrando y saliendo de JShell
A partir de JShell
Antes de intentar iniciar JShell, asegúrese de que la variable de entorno JAVA_HOME
apunta a una instalación JDK 9. Para iniciar JShell, ejecute el siguiente comando:
$ jshell
Si todo va bien, debería ver un indicador de jshell>
.
Saliendo de JShell
Para salir de JShell, ejecute el siguiente comando desde el indicador de JShell:
jshell> /exit
Expresiones
Dentro de JShell, puede evaluar expresiones de Java, con o sin punto y coma. Estos pueden ir desde expresiones y declaraciones básicas hasta expresiones más complejas:
jshell> 4+2
jshell> System.out.printf("I am %d years old.\n", 421)
Los bucles y los condicionales también están bien:
jshell> for (int i = 0; i<3; i++) {
...> System.out.println(i);
...> }
Es importante tener en cuenta que las expresiones dentro de los bloques deben tener punto y coma.
Variables
Puedes declarar variables locales dentro de JShell:
jshell> String s = "hi"
jshell> int i = s.length
Tenga en cuenta que las variables se pueden redeclar con diferentes tipos; Esto es perfectamente válido en JShell:
jshell> String var = "hi"
jshell> int var = 3
Para ver una lista de variables, ingrese /vars
en el indicador de JShell.
Métodos y Clases
Puedes definir métodos y clases dentro de JShell:
jshell> void speak() {
...> System.out.println("hello");
...> }
jshell> class MyClass {
...> void doNothing() {}
...> }
No se requieren modificadores de acceso. Al igual que con otros bloques, se requieren puntos y coma dentro de los cuerpos de los métodos. Tenga en cuenta que, al igual que con las variables, es posible redefinir los métodos y las clases. Para ver una lista de métodos o clases, ingrese /methods
o /types
en el indicador de JShell, respectivamente.
Editando Fragmentos
La unidad básica de código utilizada por JShell es el fragmento o la entrada de origen . Cada vez que declara una variable local o define un método o clase local, crea un fragmento de código cuyo nombre es el identificador de la variable / método / clase. En cualquier momento, puede editar un fragmento de código que haya creado con el comando /edit
. Por ejemplo, digamos que he creado la clase Foo
con una sola bar
método:
jshell> class Foo {
...> void bar() {
...> }
...> }
Ahora, quiero rellenar el cuerpo de mi método. En lugar de reescribir toda la clase, puedo editarla:
jshell> /edit Foo
De forma predeterminada, aparecerá un editor de swing con las funciones más básicas posibles. Sin embargo, puedes cambiar el editor que JShell usa:
jshell> /set editor emacs
jshell> /set editor vi
jshell> /set editor nano
jshell> /set editor -default
Tenga en cuenta que si la nueva versión del fragmento de código contiene errores de sintaxis, es posible que no se guarde. Del mismo modo, un fragmento de código solo se crea si la declaración / definición original es sintácticamente correcta; lo siguiente no funciona:
jshell> String st = String 3
//error omitted
jshell> /edit st
| No such snippet: st
Sin embargo, los fragmentos de código pueden compilarse y, por lo tanto, ser editables a pesar de ciertos errores de tiempo de compilación, como los tipos que no coinciden, los siguientes trabajos:
jshell> int i = "hello"
//error omitted
jshell> /edit i
Finalmente, los fragmentos de código se pueden eliminar con el comando /drop
:
jshell> int i = 13
jshell> /drop i
jshell> System.out.println(i)
| Error:
| cannot find symbol
| symbol: variable i
| System.out.println(i)
|
Para eliminar todos los fragmentos de código, restableciendo así el estado de la JVM, use \reset
:
jshell> int i = 2
jshell> String s = "hi"
jshell> /reset
| Resetting state.
jshell> i
| Error:
| cannot find symbol
| symbol: variable i
| i
| ^
jshell> s
| Error:
| cannot find symbol
| symbol: variable s
| s
| ^