¡Esta es una revisión vieja del documento!
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
ArithmeticException Arithmetic error, such as divide-by-zero.
ArrayIndexOutOfBoundsException Array index is out-of-bounds.
ArrayStoreException Assignment to an array element of an incompatible type.
ClassCastException Invalid cast.
IllegalArgumentException Illegal argument used to invoke a method.
IllegalMonitorStateException Illegal monitor operation, such as waiting on an unlocked thread.
IllegalStateException Environment or application is in incorrect state.
IllegalThreadStateException Requested operation not compatible with current thread state.
IndexOutOfBoundsException Some type of index is out-of-bounds.
NegativeArraySizeException Array created with a negative size.
NullPointerException Invalid use of a null reference.
NumberFormatException Invalid conversion of a string to a numeric format.
SecurityException Attempt to violate security.
StringIndexOutOfBounds Attempt to index outside the bounds of a string.
UnsupportedOperationException An unsupported operation was encountered.
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
Otra forma de pillar un número aleatorio: Math.random().
Las excepciones derivadas de la clase RuntimeException no requieren de un try/catch obligatorio, algo contrario a las derivadas de Exception.
Para indicar el número de decimales utilizando el String.format haremos: %.2f, siendo .2 dos decimales y f un número float o double.
Podemos añadir dos clases a un mismo archivo, la clase principal (y pública) será la que tenga el nombre del archivo, la otra no debe tener ningún modificador.
Para la serialización usaremos las clases java.io.ObjectInputStream y java.io.ObjectOutputStream, con sus métodos writeObject y readObject.
Podemos hacer una conversión de forma cutre de, por ejemplo, int a String: String s = “” + iVar;
imports java.*; te incluye java.util… java.awt…
Una vez declaras un constructor con parámetros ya no hay constructor por defecto a no ser que lo declares.
Desde las estáticas puedes acceder a las privadas de esa clase.
El main debe de estar en la clase que se llama igual que el archivo.
El resultado de un substring empieza por la posición inicial indicada con una longitud igual = posFinal - posInicial
La palabra reservada 'is' en C# equivale a 'instanceof' de java. Te indica si un objeto indeterminado es una clase heredada (subclase) de otra:
Prueba p = new Prueba();
if (p instanceof java.awt.Frame)
System.out.println("hola");
Para la creación de constantes usaremos el modificador 'final': public static final double PI = 3.141;
Las variables de dentro clase se inicializan automáticamente con valores por defecto (int = 0, double = 0.0…) al crear el objeto.
Las clases necesarias para gestionar la hora pueden ser java.util GregorianCalendar, Calendar o Date. A esta última la puedes construir mediante un long, este long puede ser System.currentTimeMillis()
Para saber el tamaño de una matriz podemos ver el tamaño de la primera fila:
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!