Tabla de Contenidos

Java

Sintaxis básica

Declaración de variables

int i;
int i = 3;
int i = 3, j = 4;
int k = i + j;

Arrays

double cuentas[] = new double [2];		// cuentas[0]
double cuentas[] = {0.1, 34.3};			// cuentas[0]
double cuentas[][] = new double[2][100];	// cuentas[0][0]
double cuentas[];
double cuentas[][] = {{3.0, 2.3}, {34.3, 1}};	// cuenta[0][0]

Los arrays multidimensionales son arrays de arrays, por lo que podemos acceder de forma a sus arrays internos:

double array[][] = new double[2][];
array[0] = new double[30];
array[1] = new double[54];

Tienen una propiedad length.

Valores numéricos

int value;
value = 16;		// decimal
value = 020;		// octal
value = 0x10;		// hexadecimal
float var = 0.5f;
double var = 0.5d;	// o double var = 0.5; Ya que por defecto son doubles.

Carácteres

Operadores

--	decremento
-	resta
!	no lógico
!= 	distinto
%	módulo
%= 	asignación del módulo
&	AND a nivel de bit
&&	AND lógico
&= 	asignación del AND
*	multipicación
*=	asignación de la multiplicación
/	división
/=	asignación de la división
?:	if-then-else
^	Xor a nivel de bit
^=	asignación de Xor
|=	asignación de OR
+=	asignación de suma
<<=	asignación de desplazamiento a la izquierda
<=	menor o igual que
-=	asignación de resta
>>=	asignación de desplazamiento a la derecha
>>>=	asignación de desplazamiento a la derecha con relleno de ceros

Sentencias

switch (byte/char/short/int)
{
	case valor:
		break;
	default:
}
for (int i=0, iDoble =0; i<=10; i++, iDoble = i * 2);
for (int i=0; i < array.length; sum += arra[i++]);
for (; temp > 0; ); <- Se convierte en un while
for (int i=0; i<10; i++)
{
	if (i==0) continue;
	...
}

Strings

\'	'
\"	"
\\	\
\n	Nueva línea
\t	Tablulador

Bucle ForEach

Los demás bucles son idénticos a C#. Este tiene la siguiente sintaxis:

String[] strArray = {"alto", "bajo", "mediano"};
for(String car : strstrArray)
	System.out.println(car);

Propiedades de una clase

Palabra clave 'this'

Como ya sabemos, podemos usar esta palabra, dentro de una clase, para acceder al propio objeto: this.propiedad; this.metodo(parametro);. Pero también podemos usarla dentro de los constructores para llamar a otros constructores: this(), pero para hacer esto debe de ser la primera línea del compilador.

	constructor (int i)
	{
		this(i, 2);
	}

Estaticos

	static
	{
		... Inicializaciones estáticas ...
	}

Hemos de recordar que no es necesario un objeto para llamar a un método estático, pero sí que se pueden llamar desde un objeto.

Método finalize

Podemos añadir a nuestra clase un método llamado finalize, este método hace de destructor, es decir, cuando el objeto es destruido se llama a este método. En este método es recomendable poner a null todas las referencias.

Herencia

Tabla de modificadores de acceso

A	Propia clase
B	Derivada en el mismo paquete
C	Derivada en otro paquete
D	Otra clase en el mismo paquete
E	Otra clase en otro paquete
F	Modificador: Sin especificar
-----------------------------------------------
	private	F 	protected	public
A	x	x	x		x
B		x	x		x
C			x		x
D		x			x
E					x

Sobreescritura

Clases Abstractas

Clausula final

Otros elementos del lenguaje

Clase System.lang.Object

Es de esta clase de la que toda clase hereda en java (clase 'object' de C#). Tiene algunos métodos que pueden sernos de utilidad:

Paquetes

Antes de hacer los 'import' podemos indicar que el archivo de código en el que estamos trabajando corresponde a un paquete en concreto, para ello usaremos la palabra 'package <nombre de paquete>;'.Con los 'import' lo que hacemos realmente son accesos directos a los paquetes ya creados.

Enumeraciones

Podemos crear enumeraciones como en C#, aunque cambia algo:

Interfaces

Clases internas anónimas

Podemos crear clases dentro de otras, eso ya lo sabemos, pero podemos ampliar la definición de una:

	class App
	{
		private App ()
		{
			new App2 ()
			{
			  public void print()
			  {
				 System.out.println("Clase interna anónima");
			  }
			}.print();
		}
	}
 
	class App2
	{
		private int i = 3;
	}

Excepciones

Aserciones

Clases interesantes

La clase Math

En esta clase encontraremos algunos métodos para otras operaciones matemáticas:

java.io.File

Nos permite obtener información de un fichero\directorio (saber tipo, fecha de creación, su ruta completa, todos sus directorios\ficheros, si se puede leer\escribir…). Y operar con él (crear un nuevo fichero, directorio, borrar…).

java.io.BufferedReader

Esta clase te permite realizar una gestión más sencilla de streams de entrada mediante métodos como readline que devuelven strings de líneas, nos puede servir para introducción por teclado, lectura de un fichero…

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("mujeres.txt")));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

java.lang.System

Esta clase contiene métodos de control y utilidades de la máquina de java, no necesita instanciarse… Mira sus métodos:

java.lang.Runtime

Interfaces interesantes

java.util.Enumeration

El uso de esta interface es una forma de recorrer fácilmente un grupo de elementos. Únicamente contiene dos métodos: 'nextElement' que devuelve el siguiente elemento y 'hasMoreElements' que indica si contiene más elementos a parte de los ya dados.

while (e.hasMoreElements())
	System.out.println(e.nextElement());

java.lang.Comparable

Interface usada para comparar objetos y, poder así, ordenarlos. Contiene un método llamado compareTo, a este método se le pasa un Object (B) y este es comparado con el objeto donde se llama a dicho método (A). Devuelve un int.

Una forma de implementar esto de forma sencilla, es, si se han de comparar varios ints restarlos y devolver el resultado.

Concretamente...

Colecciones

java.util.Vector

Array dinámico. Se le declara indicandole una dimensión que ocupará en memoria, y se le introducen elementos, si esa dimensión es rebasada actuará ampliandola según hallamos indicado.

java.util.Stack

Representa un Vector en forma de pila (tipo FIFO, primero en entrar, primero en salir). Contiene los siguientes métodos:

Clase abstracta java.util.Dictionary

Usada para derivar clases que ordenen sus elementos mediante clave\valor, esto es que no se relaciona el elemento por un índice sino por otro objeto. Una subclase de esta sería Hashtable.
Los métodos que implementa son:

Otras anotaciones sobre collections

Streams

java.io.FileInputStream

Nos permite leer un fichero pasado por su constructor, sus métodos:

java.io.FileOutputStream

Multitarea