{"id":1708,"date":"2018-02-03T19:05:30","date_gmt":"2018-02-04T00:05:30","guid":{"rendered":"https:\/\/manualjavaoracle.wordpress.com\/?p=1708"},"modified":"2018-03-06T13:22:21","modified_gmt":"2018-03-06T18:22:21","slug":"metodos-teoria","status":"publish","type":"post","link":"https:\/\/www.manualjava.net\/?p=1708","title":{"rendered":"M\u00e9todos &#8211; teor\u00eda"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-1713 alignnone\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/02\/java21.jpg\" alt=\"\" width=\"268\" height=\"112\" \/><\/p>\n<p><span style=\"color: #000000;\">Un m\u00e9todo es un grupo de sentencias que realizan una operaci\u00f3n o tarea espec\u00edfica. En la resoluci\u00f3n de problemas tanto por m\u00e9todos estructurados como por m\u00e9todos orientados a objetos, se recurre a un proceso de refinamiento sucesivo que implica la descomposici\u00f3n de un problema o proceso, en subproblemas o subprocesos m\u00e1s peque\u00f1os y de menor complejidad.<\/span><!--more--><\/p>\n<p><span style=\"color: #000000;\">Los m\u00e9todos se utilizan para capturar y representar los procesos y subprocesos. El programa principal (main) de Java es una secuencia de llamadas a m\u00e9todos que pueden llamar a otros m\u00e9todos.<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Definici\u00f3n de un m\u00e9todo (m\u00e9todo definido por el usuario)<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Un m\u00e9todo se representa por un nombre o identificador y un conjunto de tipos de operandos, denominados\u00a0<strong>par\u00e1metros\u00a0<\/strong>que se escriben encerrados entre par\u00e9ntesis separados por comas. Las sentencias que debe ejecutar el m\u00e9todo se especifica en un bloque, conocido como\u00a0<strong>cuerpo del m\u00e9todo.\u00a0<\/strong>Cada m\u00e9todo tiene un\u00a0<strong>tipo de valor de retorno\u00a0<\/strong>asociado.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Sintaxis<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 tipo_de_valor_de_retorno nombre_m\u00e9todo (lista_par\u00e1metros) <\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Sentencias\u00a0<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000000;\">Donde:<\/span><\/p>\n<ul>\n<li><span style=\"color: #000000;\"><strong>tipo_de_valor_de_retorno:\u00a0<\/strong>Indica el tipo de valor que se devuelve al m\u00e9todo invocador. Si un m\u00e9todo no devuelve ning\u00fan valor, se utiliza el tipo void, que se considera como un tipo de dato especial.<\/span><\/li>\n<li><span style=\"color: #000000;\"><strong>nombre_m\u00e9todo:\u00a0<\/strong>Es cualquier identificador v\u00e1lido.<\/span><\/li>\n<li><span style=\"color: #000000;\"><strong>lista_par\u00e1metros:\u00a0<\/strong>Es una lista separada por comas que contiene un conjunto de tipos de operandos que se pasar\u00e1n al m\u00e9todo. Si un m\u00e9todo no recibe par\u00e1metros la lista_par\u00e1metros se deja vac\u00eda.<\/span><\/li>\n<\/ul>\n<p><span style=\"color: #000000;\">Para que el compilador pueda compilar una llamada a un m\u00e9todo primero debe conocer la declaraci\u00f3n de ese m\u00e9todo. Las declaraciones de los m\u00e9todos normalmente aparecen antes del m\u00e9todo main() en un programa.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">En el siguiente ejemplo utilizamos la palabra reservada <strong>static<\/strong> para llamar al m\u00e9todo desde el m\u00e9todo main que es est\u00e1tico. El m\u00e9todo\u00a0<strong>mcd<\/strong> (m\u00e1ximo com\u00fan divisor de dos n\u00fameros).<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 public static int mcd(int a, int b){\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ m\u00e9todo llamado<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 int divisor=2,producto=1;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 while(divisor&lt;=a &amp;&amp; divisor&lt;=b)<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if(a%divisor==0 &amp;&amp; b%divisor==0)<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 producto = producto*divisor;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 a = a\/divisor;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 b = b\/divisor;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 else<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0divisor++;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return producto;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000000;\">Para\u00a0<strong>llamar a un m\u00e9todo\u00a0<\/strong>se utiliza el operador de llamada que es el nombre del m\u00e9todo con una lista de par\u00e1metros, solos los nombres.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 public static void main(String[] args) {\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ m\u00e9todo llamador<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Scanner entrada = new Scanner(System.in);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0int x, y, mcd;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0do{<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.print(\u00abIngresar primer numero: \u00ab); <\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0x = entrada.nextInt();<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.print(\u00abIngresar segundo numero: \u00ab); <\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0y = entrada.nextInt();<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0}while(x&lt;0 &amp;&amp; y&lt;0); <\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0mcd = mcd(x,y); <\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(\u00abEl maximo comun divisor de \u00ab+x+\u00bb y \u00ab+y+\u00bb \u00ab<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0+ \u00abes: \u00bb + mcd); <\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000000;\">La llamada de un m\u00e9todo realiza dos cosas: inicializa los par\u00e1metros del m\u00e9todo a partir de los par\u00e1metros correspondientes y transfiere el control al m\u00e9todo invocado. La ejecuci\u00f3n del m\u00e9todo\u00a0<strong>llamador\u00a0<\/strong>se detiene y comienza la ejecuci\u00f3n del m\u00e9todo\u00a0<strong>llamado.\u00a0<\/strong>La ejecuci\u00f3n del m\u00e9todo comienza con la definici\u00f3n e inicializaci\u00f3n de sus par\u00e1metros. En el caso de mcd, se crean las variables de tipo entero x e y, y se inicializa con los valores introducidos por la entrada System.out.print(). A continuaci\u00f3n, se ejecuta el bloque del bucle y termina cuando se encuentra una sentencia\u00a0<strong>return\u00a0<\/strong>que produce el resultado especificado en el. Despu\u00e9s de ejecutar\u00a0<strong>return<\/strong>, el m\u00e9todo llamador reanuda su ejecuci\u00f3n en el punto de llamada.<\/span><\/p>\n<p><span style=\"color: #000000;\">El tipo de valor de retorno de un m\u00e9todo<\/span><span style=\"color: #000000;\">\u00a0puede ser un tipo incorporado, como int o double, un tipo clase, o un tipo compuesto como String. Tambi\u00e9n puede ser void el tipo de valor de retorno, en cuyo caso significa que no se devuelve ning\u00fan valor.<\/span><\/p>\n<h2><strong><span style=\"color: #000000;\">La sentencia return<\/span><\/strong><\/h2>\n<p><span style=\"color: #000000;\">La sentencia return termina el m\u00e9todo que se est\u00e1 ejecutando actualmente y devuelve el control al m\u00e9todo que la llam\u00f3.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Sintaxis<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 return\u00a0<strong>expresi\u00f3n;<\/strong><\/span><\/p>\n<p><span style=\"color: #000000;\">Una sentencia return con expresi\u00f3n proporciona el resultado del m\u00e9todo. Cada retorno de un m\u00e9todo con un tipo distinto de void debe devolver un valor. El valor devuelto debe tener el mismo tipo que el tipo de valor de retorno del m\u00e9todo, o debe tener un tipo que pueda ser convertido impl\u00edcitamente a este tipo.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Calcular el importe total de un conjunto de art\u00edculos de un supermercado, cada precio ha de ser incrementado con las tasas de impuestos (IGV).<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0\u00a0public static double calcularPrecioTotal(int numero, double precio){<br \/>\n<\/span>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #000000;\">final double IGV = 0.16;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ 16% de impuesto<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 double subTotal;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 subTotal = precio*numero;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return (subTotal+subTotal*IGV);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Precauci\u00f3n<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Es recomendable el uso de return ya que ayuda a recordar el retorno en ese punto al m\u00e9todo llamador.<\/span><\/p>\n<p><span style=\"color: #000000;\">Un error t\u00edpico de programaci\u00f3n es olvidar incluir la sentencia return o situarla dentro de un bloque de c\u00f3digo o sentencias que no se realice. Si ninguna sentencia return se ejecuta, entonces el resultado que devuelve el m\u00e9todo es impredecible y puede originar que su programa falle o produzca resultados incorrectos. Por ejemplo, suponga que se sit\u00faa la sentencia return dentro de un bloque de c\u00f3digo que se ejecuta condicionalmente como:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0\u00a0if(Total&gt;=0.0)<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0return Total;<\/span><\/p>\n<p><span style=\"color: #000000;\">Si Total es menor que cero, no se ejecuta la sentencia return y el resultado del m\u00e9todo es un valor aleatorio.<\/span><\/p>\n<h2><strong><span style=\"color: #000000;\"><span style=\"color: #000000;\">M\u00e9todos static, campos static y la clase Math<\/span><\/span><\/strong><\/h2>\n<p><span style=\"color: #000000;\">Toda clase proporciona m\u00e9todos que realizan tareas comunes en objetos de esa clase. Por ejemplo, para introducir datos mediante el teclado, hemos llamado m\u00e9todos en un objeto\u00a0<strong>Scanner\u00a0<\/strong>que se inicializ\u00f3 en su constructor para obtener la entrada del flujo de entrada est\u00e1ndar (System.in).\u00a0 Aunque la mayor\u00eda de los m\u00e9todos se ejecutan en respuesta a las llamadas a m\u00e9todos en objetos espec\u00edficos, \u00e9ste no es siempre el caso. Algunas veces un m\u00e9todo realiza una tarea que no depende del contenido de ning\u00fan objeto. Dicho m\u00e9todo se aplica a la clase en la que est\u00e1 declarado como un todo, y se conoce como m\u00e9todo\u00a0<strong>static o m\u00e9todo de clase.\u00a0<\/strong>Es com\u00fan que las clases contengan m\u00e9todos\u00a0<strong>static\u00a0<\/strong>convenientes para realizar tareas comunes. Por ejemplo cuando utilizamos la clase Math para elevar un valor a una potencia. Para declarar un m\u00e9todo como static, coloque la palabra clave static antes del tipo de valor de retorno en la declaraci\u00f3n del m\u00e9todo. <\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Sintaxis<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 static tipo_de_valor_de_retorno nombre_m\u00e9todo (lista_par\u00e1metros) <\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 {<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Sentencias\u00a0<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000000;\">Puede llamar a cualquier m\u00e9todo static especificando el nombre de la clase en la que est\u00e1 declarado el m\u00e9todo, seguido de un punto (.) y del nombre del m\u00e9todo.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Sintaxis<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0NombreClase.nombreM\u00e9todo(argumentos)<\/span><\/p>\n<p><span style=\"color: #000000;\">Aqu\u00ed utilizaremos varios m\u00e9todos de la clase Math para presentar el concepto de los m\u00e9todos static. La clase Math cuenta con una colecci\u00f3n de m\u00e9todos que nos permiten realizar c\u00e1lculos matem\u00e1ticos comunes.<\/span><span style=\"color: #000080;\">\u00a0<a style=\"color: #000080;\" href=\"https:\/\/www.manualjava.net\/?p=885\">(Ver Funciones matem\u00e1ticas)<\/a><\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Calcular la ra\u00edz cuadrada de 900.0, con una llamada al siguiente m\u00e9todo static.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0Math.sqrt(900.0)<\/span><\/p>\n<p><span style=\"color: #000000;\">La expresi\u00f3n anterior se eval\u00faa como 30.0. El m\u00e9todo sqrt recibe un argumento de tipo double y devuelve un resultado del mismo tipo. Para reportar el valor de llamada anterior al m\u00e9todo en una ventana de consola, podr\u00edamos escribir la siguiente instrucci\u00f3n:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0System.out.println(Math.sqrt(900.0));<\/span><\/p>\n<p><span style=\"color: #000000;\">En esta expresi\u00f3n, el valor que devuelve sqrt se convierte en el argumento para el m\u00e9todo println. Observe que no hubo necesidad de crear un objeto Math antes de llamar al m\u00e9todo sqrt. Observe tambi\u00e9n que todos los m\u00e9todos de la clase Math son static; por lo tanto, cada uno se llama anteponiendo al nombre del m\u00e9todo el nombre de la clase Math y el separador punto (.).<\/span><\/p>\n<h2><span style=\"color: #000000;\">\u00bfPor qu\u00e9 el m\u00e9todo main se declara como static?<\/span><\/h2>\n<p><span style=\"color: #000000;\">\u00bfPor qu\u00e9 el main debe declararse como static? Cuando se ejecuta la M\u00e1quina Virtual de Java (JVM) con el comando java, la JVM trata de invocar al m\u00e9todo main de la clase que usted le espec\u00edfica; cuando no se han creado objetos de esa clase. Al declarar main como static, la JVM puede invocar a main sin tener que crear una instancia de la clase.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Sintaxis<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public static void main(String [] args){<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un m\u00e9todo es un grupo de sentencias que realizan una operaci\u00f3n o tarea espec\u00edfica. En la resoluci\u00f3n de problemas tanto por m\u00e9todos estructurados como por m\u00e9todos orientados a objetos, se recurre a un proceso de refinamiento sucesivo que implica la descomposici\u00f3n de un problema o proceso, en subproblemas o subprocesos m\u00e1s peque\u00f1os y de menor &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/www.manualjava.net\/?p=1708\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1713,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"_links":{"self":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/1708"}],"collection":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1708"}],"version-history":[{"count":19,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/1708\/revisions"}],"predecessor-version":[{"id":2707,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/1708\/revisions\/2707"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/media\/1713"}],"wp:attachment":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}