<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Squarespace V5 Site Server v5.13.594-SNAPSHOT-1 (http://www.squarespace.com) on Fri, 01 May 2026 07:06:04 GMT--><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>Certificación</title><link>http://www.javahispano.org/certificacion/</link><description></description><lastBuildDate>Sun, 11 Jun 2017 06:43:22 +0000</lastBuildDate><copyright></copyright><language>es-ES</language><generator>Squarespace V5 Site Server v5.13.594-SNAPSHOT-1 (http://www.squarespace.com)</generator><item><title>Interfaces, clases abstractas, métodos por defecto</title><category>OCA 8</category><category>OCJA</category><dc:creator>jcarmonaloeches</dc:creator><pubDate>Sun, 11 Jun 2017 06:42:35 +0000</pubDate><link>http://www.javahispano.org/certificacion/2017/6/11/interfaces-clases-abstractas-metodos-por-defecto.html</link><guid isPermaLink="false">923743:11512029:35924067</guid><description><![CDATA[<p>¿Compilaría y ejecutaría el siguiente código?
Si no compila, ¿por qué razón?
Si ejecuta, ¿cuál sería la salida?</p>


<pre class="brush:java">


package prueba;

interface Interfaz1 {
	int VARIABLE = 10;

	void test1();

	default void test2() {
		System.out.println("Método por defecto de Interfaz1");
	}
}

interface Interfaz2 {
	static public final int VARIABLE = 20;

	abstract public void test1();

	public default void test2() {
		System.out.println("Método por defecto de Interfaz2");
	}
}

abstract class Clase1 implements Interfaz1, Interfaz2 {

	int variable;

	public void test1() {
		System.out.println("Método test1 de Clase1");
		return;
	}

	public void test2() {
		System.out.println("Método por defecto de Clase1");
	}

}

class Clase2 extends Clase1 {

	public static void main(String args[]) {

		Clase1 clase2 = new Clase2();
		System.out.println(clase2.variable);
		clase2.test1();
		clase2.test2();

		((Interfaz1) clase2).test1();
		((Interfaz2) clase2).test2();

	}

}


</pre>]]></description><wfw:commentRss>http://www.javahispano.org/certificacion/rss-comments-entry-35924067.xml</wfw:commentRss></item><item><title>Sobreescribiendo métodos.</title><category>OCA 8</category><category>OCJA</category><category>ocjp</category><dc:creator>jcarmonaloeches</dc:creator><pubDate>Sun, 11 Jun 2017 06:18:33 +0000</pubDate><link>http://www.javahispano.org/certificacion/2017/6/11/sobreescribiendo-metodos.html</link><guid isPermaLink="false">923743:11512029:35924066</guid><description><![CDATA[<p>¿Compilaría y ejecutaría el siguiente código?
Si no compila, ¿por qué razón?
Si ejecuta, ¿cuál sería la salida?</p>


<pre class="brush:java">
package pruebas.ocp;

import java.io.FileNotFoundException;
import java.io.IOException;

public class Padre {
	protected void hola() throws IOException {
		System.out.println("Hola, soy el Padre");
	};
}

class Hijo extends Padre {

	public void hola() throws FileNotFoundException {
		System.out.println("Hola, soy el Hijo");
	};

	public static void main(String args[]) {
		Padre padre = new Padre();
		try {
			padre.hola();
		} catch (IOException e) {
			System.out.println("Exception " + e.getMessage());
		}

		Hijo hijo = new Hijo();

		try {
			hijo.hola();
		} catch (FileNotFoundException e) {
			System.out.println("Exception " + e.getMessage());
		}

		Padre mixto = new Hijo();

		try {
			mixto.hola();
		} catch (IOException e) {
			System.out.println("Exception " + e.getMessage());
		}

	}
}

</pre>]]></description><wfw:commentRss>http://www.javahispano.org/certificacion/rss-comments-entry-35924066.xml</wfw:commentRss></item><item><title>Gestión de excepciones.</title><category>OCA 8</category><category>OCJP 8</category><dc:creator>jcarmonaloeches</dc:creator><pubDate>Sun, 21 May 2017 06:57:12 +0000</pubDate><link>http://www.javahispano.org/certificacion/2017/5/21/gestion-de-excepciones.html</link><guid isPermaLink="false">923743:11512029:35913811</guid><description><![CDATA[<p>¿Compilaría y ejecutaría el siguiente código?
Si no compila, ¿por qué razón?
Si ejecuta, ¿cuál sería la salida?</p>


<pre class="brush:java">
package pruebasExcepciones;

public class Pruebas {

	public static void pruebasExcepciones() {

		try {

			System.out.println(" 1) try ");
			lanzaExcepcion();

		} catch (Exception e) {

			System.out.println(" 2) catch ");
			throw e;

		} finally {
			System.out.println(" 3) finnaly ");
		}

	}

	public static void main(String[] args) {

		try {
			pruebasExcepciones();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		System.out.println(" 4) main ");

	}

	public static void lanzaExcepcion() {
		throw new ArrayIndexOutOfBoundsException();
	}

}

</pre>]]></description><wfw:commentRss>http://www.javahispano.org/certificacion/rss-comments-entry-35913811.xml</wfw:commentRss></item><item><title>Más ejemplos sobre constructores</title><category>constructores</category><category>ocjp</category><dc:creator>jcarmonaloeches</dc:creator><pubDate>Thu, 09 Apr 2015 08:43:25 +0000</pubDate><link>http://www.javahispano.org/certificacion/2015/4/9/mas-ejemplos-sobre-constructores.html</link><guid isPermaLink="false">923743:11512029:35300572</guid><description><![CDATA[<p>¿Compilaría y ejecutaría el siguiente código?
Si no compila, ¿por qué razón?
Si ejecuta, ¿cuál sería la salida?</p>

<strong>Clase constructores1.Pruebas</strong>

<pre class="brush:java">
package constructores1;


public class Pruebas {

	private String s = "publico";
	
	protected Pruebas() {
		this.s = "protected";  
    }

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Pruebas [s=" + s + "]";
	}
	

}

</pre>

<strong>Clase constructores2.Pruebas</strong>

<pre class="brush:java">
package constructores2;


public class Pruebas {

	private String s = "publico";
	
	protected Pruebas() {
		this.s = "protected";  
    }

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Pruebas4 [s=" + s + "]";
	}
	

}
</pre>

<strong>Clase Principal</strong>
<pre class="brush:java">

package constructores;

public class Principal {

	public static void main(String args[]){
		constructores1.Pruebas pruebas1 = new constructores1.Pruebas();
		System.out.println(pruebas1.toString());
		
		constructores1.Pruebas pruebas2 = new constructores2.Pruebas();
		System.out.println(pruebas2.toString());
		
	}
}
</pre>]]></description><wfw:commentRss>http://www.javahispano.org/certificacion/rss-comments-entry-35300572.xml</wfw:commentRss></item><item><title>Ejemplos sobre constructores</title><category>constructores</category><category>ocjp</category><dc:creator>jcarmonaloeches</dc:creator><pubDate>Thu, 09 Apr 2015 08:16:35 +0000</pubDate><link>http://www.javahispano.org/certificacion/2015/4/9/ejemplos-sobre-constructores.html</link><guid isPermaLink="false">923743:11512029:35300565</guid><description><![CDATA[<p>¿Compilarían los siguientes ejemplos?</p>

<b> Ejemplo 1 </b>

<pre class="brush:java">
package constructores;

public class Pruebas1 {

	public Pruebas1(){
		
	};
	
	private Pruebas1(){
		
	};
	
	
}
</pre>

<b> Ejemplo 2 </b>

<pre class="brush:java">
package constructores;

public class Pruebas2 {

	private Pruebas2(){
		
	};
	
	
}
</pre>]]></description><wfw:commentRss>http://www.javahispano.org/certificacion/rss-comments-entry-35300565.xml</wfw:commentRss></item><item><title>¿Error en la utilidad References de Eclipse utilizando implementaciones e interfaces?</title><category>eclipse search references</category><dc:creator>jcarmonaloeches</dc:creator><pubDate>Thu, 09 Apr 2015 06:33:19 +0000</pubDate><link>http://www.javahispano.org/certificacion/2015/4/9/error-en-la-utilidad-references-de-eclipse-utilizando-implem.html</link><guid isPermaLink="false">923743:11512029:35300529</guid><description><![CDATA[<p> Buenos días. Realizando un ejercicio donde pretendía buscar métodos pertenecientes a la implementación de una interfaz en Eclipse me encontré con un caso curioso </p>
<p> El código de ejemplo es el siguiente (son diferentes clases):</p>

<pre class="brush:java">

package test.interfacesEImplementaciones;

public interface InterfazDePrueba {
	void holaMundo();
}

package test.interfacesEImplementaciones;

public class ImplementacionDePrueba1 implements InterfazDePrueba{

	@Override
	public void holaMundo() {
		// TODO Auto-generated method stub
		
	}

}

package test.interfacesEImplementaciones;

public class ImplementacionDePrueba2 implements InterfazDePrueba{

	@Override
	public void holaMundo() {
		// TODO Auto-generated method stub
		
	}

}

package test.interfacesEImplementaciones;

public class Main {

	public static void main(String[] args) {
		InterfazDePrueba itfcs = new ImplementacionDePrueba1();
		itfcs.holaMundo();

	}

}

</pre>

<p> La prueba que hice es buscar referencias del método "holaMundo" de la clase ImplementacionDePrueba2.... y Eclipse me dijo que desde el método main (de la clase Main), era invocado... </p>
<p> ¿Sois capaces de determinar por qué Eclipse indica eso? </p> 
<p> Yo tengo mi teoría al respecto (de hecho, tengo dos), pero creo que sería positivo para todos dar más puntos de vista. </p>
<p> Saludos cordiales. </p>]]></description><wfw:commentRss>http://www.javahispano.org/certificacion/rss-comments-entry-35300529.xml</wfw:commentRss></item><item><title>Lambda Quick Start</title><category>OCJP 8</category><category>lambda expressions</category><dc:creator>jcarmonaloeches</dc:creator><pubDate>Wed, 08 Apr 2015 10:11:47 +0000</pubDate><link>http://www.javahispano.org/certificacion/2015/4/8/lambda-quick-start.html</link><guid isPermaLink="false">923743:11512029:35299252</guid><description><![CDATA[<p> Buenos días, dejamos un código explicativo sobre Lambda, nueva característica de Java 8.</p>

<pre class="brush:java">

package lambda;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.swing.JButton;

/**
 * Clase que utilizaremos en la parte de métodos de comparación con Lambda
 *
 * @author jaimecl
 *
 */
public class Persona {

	private String surName;

	public Persona(String surName) {
		super();
		this.surName = surName;
	}

	public String getSurName() {
		return surName;
	}

	public void setSurName(String surName) {
		this.surName = surName;
	}

	/* Método de impresión de valores */
	public void printName() {
		System.out.println("surName=" + surName + "]");
	}

	/* Método que creará una lista corta de Personas, a modo de datos de ejemplo */
	private static List<Persona> createShortList() {
		ArrayList<Persona> lista = new ArrayList<Persona>();
		lista.add(new Persona("Carmona"));
		lista.add(new Persona("Pérez"));
		return lista;

	}

	/**
	 * Método principal
	 *
	 * @param args
	 */
	public static void main(String args) {

		/*
		 * Empezamos con clases anónimas: utilizadas en un sólo punto del código
		 * No hay necesidad de tener que definir una clase única que sea
		 * referenciada sólo una vez
		 */
		JButton testButton = new JButton("Test Button");
		testButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				System.out.println("Click Detected by Anon Class");
			}
		});

		/*
		 * Java8 define como interfaz funcional aquella clase que define un sólo
		 * método. Las expresiones Lambda pueden ser aplicadas sobre dichas
		 * interfaces La sintaxis es la siguiente argumento -> cuerpo. (int x,
		 * int y) -> x + y
		 * 
		 * () -> 42
		 * 
		 * (String s) -> { System.out.println(s); }
		 */

		/* A continuación, vemos cómo definir Lambda Runnable */

		/* Manera antigua, con una clase anónima */
		new Runnable() {
			@Override
			public void run() {
				System.out.println("JavaHispaneros, ¡manera anónima!");
			}
		}.run();

		// Con Lambda, la interfaz runnable tiene un sólo método, por lo tanto,
		// podemos redefinirlo de la siguiente manera.
		Runnable r2 = () -> System.out
				.println("JavaHispaneros, ¡esto es Lambda!");

		/* A continuación, vemos un ejemplo de ordenación de listas */
		List<Persona> personList = Persona.createShortList();

		/*
		 * Ordenación con clases anónimas. Dentro del método sort, que espera
		 * una interfaz de tipo Comparator, hacemos una redefinición
		 */

		Collections.sort(personList, new Comparator<Persona>() {
			public int compare(Persona p1, Persona p2) {
				return p1.getSurName().compareTo(p2.getSurName());
			}
		});

		// Ordenación ascendente, en este caso, haciendo uso de expresiones
		// lambda

		/*
		 * El método sort de Collections espera un único método, con dos
		 * parámetros. Por lo tanto, utilizamos la sintaxis lambda para definir
		 * el método de comparación
		 */
		Collections.sort(personList, (Persona p1, Persona p2) -> p1
				.getSurName().compareTo(p2.getSurName()));

		// Mismo caso, ejerciendo la ordenación descendente.
		Collections.sort(personList,
				(p1, p2) -> p2.getSurName().compareTo(p1.getSurName()));

		/* Otro caso para listeners */
		JButton botonMetodoAnonimo = new JButton("Botón con método anónimo");
		botonMetodoAnonimo.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent ae) {
				System.out.println("Click detectado por clase anónima");
			}
		});

		/*
		 * De nuevo, vemos que addActionListener acepta una clase que implemente
		 * la interfaz listener, que define un método único, por lo tanto,
		 * acepta expresiones lambda Recordamos la sintaxis: nombre de variable
		 * en parámetro -> acción a realizar Choca ver que en la parte de
		 * parámetros no existe el tipo de parámetro que es
		 */

		JButton botonMetodoLambda = new JButton("Botón con método lambda");
		botonMetodoLambda.addActionListener(e -> System.out
				.println("Click Detected by Lambda Listner"));

	}
}


</pre>]]></description><wfw:commentRss>http://www.javahispano.org/certificacion/rss-comments-entry-35299252.xml</wfw:commentRss></item><item><title>Definición de métodos</title><category>OCJP 8</category><category>lambda expresions</category><dc:creator>jcarmonaloeches</dc:creator><pubDate>Sat, 07 Feb 2015 21:46:14 +0000</pubDate><link>http://www.javahispano.org/certificacion/2015/2/7/definicion-de-metodos.html</link><guid isPermaLink="false">923743:11512029:35220385</guid><description><![CDATA[<p> Que tal compañer@s. ¿Sabéis indicar si el siguiente código compila, y si no es el caso, por qué motivo? ¿Qué lineas se podrían eliminar para que compilase? </p>

<pre class="brush:java">
package scjp;

public class DefinicionDeMetodos {

	private void sayHello() {
		
	}
	
	private void sayHello(int a) {
		
	}
	
	public void sayHello() {
		
	}

	public void sayHello(int a) {
		
	}
	
	private void sayHello() throws Exception{
		
	}
	
	private void sayHello(int a) throws Exception{
		
	}

}
</pre>]]></description><wfw:commentRss>http://www.javahispano.org/certificacion/rss-comments-entry-35220385.xml</wfw:commentRss></item><item><title>Duda sobre ArrayList y Vector.</title><category>ocjp</category><category>ocjp</category><dc:creator>jcarmonaloeches</dc:creator><pubDate>Mon, 14 Jul 2014 08:23:47 +0000</pubDate><link>http://www.javahispano.org/certificacion/2014/7/14/duda-sobre-arraylist-y-vector.html</link><guid isPermaLink="false">923743:11512029:34919157</guid><description><![CDATA[<b> Duda sobre ArrayList y Vector. </b>
<p> Buenos d&iacute;s. Pensaba que tanto Vector como ArrayList se diferenciaban en que sus m&eacute;todos eran (o no eran) thread-safe. Sali&oacute; el debate en mi trabajo, y quise comprobarlo por mi mismo. Desarroll&eacute; el siguiente c&oacute;digo. ¿Alguien puede indicarme la salida del mismo e intentar explicar la diferencia real, en un ejemplo pr&aacute;ctico, entre Vector y ArrayList? Muchas gracias </p>

<pre class="brush:java">
import java.util.ArrayList;
import java.util.List;

public class Principal implements Runnable {

	private List<String> lista = new ArrayList<String>();
	private static List<Principal> hilos = new ArrayList<Principal>();

	private int i = 0;

	private final int MAX_VAL = 1000;
	private final static int MAX_VAL_STATIC = 1000;
	private final static int MAX_HILOS = 1000;
	private final static int TIEMPO_ESPERA_MS = 1000;

	public Principal(List<String> lista) {
		this.lista = lista;

	}

	public static void main(String[] args) throws InterruptedException {

		Long inicio = System.currentTimeMillis();
		
		List<String> lista = new ArrayList<String>();

		System.out.println("Iniciando hilos....");
		for (int i = 0; i < MAX_HILOS; i++) {
			Principal p = new Principal(lista);
			hilos.add(p);
		}

		System.out.println("OK");

		System.out.println("Ejecutando hilos....");
		for (Principal hilo : hilos) {
			hilo.run();
		}
		System.out.println("OK");

		System.out.println("Esperando finalización");

		boolean finalizado = true;
		do {
			Thread.sleep(TIEMPO_ESPERA_MS);

			for (Principal hilo : hilos) {
				if (hilo.i < MAX_VAL_STATIC) {
					finalizado = false;
				}
			}

		} while (!finalizado);

		System.out.println("OK");

		System.out.println("EL TAMAÑO DE LA LISTA ES: " + lista.size());
		Long total = System.currentTimeMillis() - inicio;
	}

	public int getI() {
		return i;
	}

	public void setI(int i) {
		this.i = i;
	}

	@Override
	public void run() {
		while (i < MAX_VAL) {
			lista.add("" + i);
			i++;
		}
	}

}

</pre>]]></description><wfw:commentRss>http://www.javahispano.org/certificacion/rss-comments-entry-34919157.xml</wfw:commentRss></item><item><title>Date-Time API (JAVA 8)</title><category>Date Time</category><category>ocjp</category><dc:creator>jcarmonaloeches</dc:creator><pubDate>Mon, 28 Apr 2014 21:51:27 +0000</pubDate><link>http://www.javahispano.org/certificacion/2014/4/28/date-time-api-java-8.html</link><guid isPermaLink="false">923743:11512029:34783061</guid><description><![CDATA[<p>Java 8 presenta un cambio profundo con respecto al manejo de fechas, aqu&iacute; dejamos unos ejercicios para medir el nivel de los que est&eacute;n interesados.</p>
<p><strong>DATE-TIME API</strong></p>
<p><strong>PREGUNTAS <br /></strong></p>
<p>1) &iquest;Qu&eacute; clase utilizar&iacute;as para almacenar tu cumplea&ntilde;os en a&ntilde;os, meses, d&iacute;as, segundos y nanosegundos?</p>
<p>2) Dada una fecha aleatoria, &iquest;c&oacute;mo obtendr&iacute;as el jueves pasado?</p>
<p>3) &iquest;Qu&eacute; diferencia existe entre ZoneId y ZoneOffset?</p>
<p>4) &iquest;C&oacute;mo convertir&iacute;as Instant a ZonedDateTime? &iquest;C&oacute;mo convertir&iacute;as ZonedDateTime a Instant?</p>
<p><strong>EJERCICIOS</strong></p>
<p>1) Escribe un programa que, para un a&ntilde;o dado, reporta el n&ordm; de d&iacute;as de cada mes dentro del a&ntilde;o.</p>
<p>2) Escribe un programa que, para un mes del a&ntilde;o actual, lista todos los lunes del mes.</p>
<p>3) Escribe un ejemplo que chequea si una fecha se corresponde a viernes 13.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;"></div>]]></description><wfw:commentRss>http://www.javahispano.org/certificacion/rss-comments-entry-34783061.xml</wfw:commentRss></item></channel></rss>