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
|  ^


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow