Tabla de Contenidos

Xtra

Elementos del lenguaje

Enumeraciones

protected static enum roboType  { Alpha, Beta, RobotDeCaramelo };
protected void config (roboType tipo) {
	switch (tipo) {
	case Alpha:
		System.out.println("hola");
		break;
	case Beta:
		break;
	case RobotDeCaramelo:
		break;
	}
}

Tips de código

Orden de operandos

i = 5;
v[i++] = 3;	// Coloca 3 en v[5] e incrementa i en 1.
v[++i] = 3;	// Incrementa i en 1 y, por lo tanto, coloca 3 en v[6].

Constructores

Desde un constructor podemos llamar a otro, sí y sólo sí esta llamada se hace en la primera línea del constructor.

public class Clase {
	...
	public Clase () {
		this(10);
		...
	}
	public Clase (int i) {
		...

Asignar e igualar

int i = 5;
int j = 100 * (i = 2);
System.out.println(i);  // 2
System.out.println(j);  // 200

Crear un objeto de interface sin objeto de clase

Podemos crear un nuevo objeto a partir de una interface, pero, como bien sabemos, necesitamos tener codificados los métodos de esta. Para ello, en el momento de crear el objeto los podemos codificar.
Teniendo la siguiente interface:

public interface Recorder {
	public void record (String messsage);
}

Podemos hacer lo siguiente:

public static void main(String[] args) {
	Recorder r = new Recorder() {
		public void record (String message) {
			System.out.println(message);
		}
	};
	r.record("Hello world!");
}

Clonar un array

Un objeto cualquiera tiene un método llamado clone que devuelve un object. Con este object podemos hacer un cast y volcarlo sobre un objeto del tipo del de orígen, ahora el destino tendrá un nuevo objeto idéntico al inical.

	int[] a = {3,4,5,1,4};
	int[] b = (int[])a.clone();

Listado de excepciones

Otros

Redireccionando la entrada\salida

Podemos indicar una entrada (texto que se introducirá) a un programa Java de consola mediante: java Program < fichero
O podemos indicar que imprima sus salidas en un fichero: java Program > fichero
O las dos a la vez: java Program < ficheroIn > ficheroOut

Archivos .jar

En un .jar correctamente formado, es decir, debe tener indicada cual es la clase que se va a lanzar, para ello ha de existir un fichero de texto que sea: META-INF\MANIFEST.MF con el nombre indicado de la forma siguiente:

	Manifest-Version: 1.0
	Main-Class: pck.newFrame

Donde pck.newFrame es la clase donde está el main.

Leer de un JAR una imágen

Debemos coger el resource que acompaña a la clase como un stream, luego, mediante ImageIO podemos leer ese stream y pasarlo a imágen.

	java.io.InputStream is = this.getClass().getResourceAsStream("Carita.png");
	Image img = javax.imageio.ImageIO.read(is);

Lanzar una clase dentro de un jar

Para lanzar un Main dentro de una clase que está dentro de un .jar que hace referencia a otro:

java -cp "lucene-demos-2.9.4.jar:lucene-core-2.9.4.jar" org.apache.lucene.demo.IndexFiles texts/

Es decir (y si estás en windows pon ; en vez de :):

java -cp "your_jar.jar:lib/referenced_jar.jar" com.your.main.Main

Notas

	Prueba p = new Prueba();
	if (p instanceof java.awt.Frame)
		System.out.println("hola");
	int[][] matriz = new int[30][10];
	int files = matriz[0].length;

Y nos devolverá 10, el total de celdas que le tocan a cada una de las otras. Ahora sólo debemos coger y dividir 10 entre matriz.length (que te devolverá el total de celdas de la matriz 300), y 300 / 10… 30!