Está en la página 1de 46

Programacin.Aclaraciones de clase. IES Velsquez.

Curso 12_13

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13..............................................1


31 / 31 19 de marzo de 2013...............................................................................................................1
Casting................................................................................................................................................17
Clase Math..........................................................................................................................................19
La clase Math nos proporciona algunas de las funciones matemticas trigonomtricas,
logartmicas y otras de utilidad. Todos los mtodos de esta clase son static, por lo que no
hace falta crear una instancia para poder utilizarlos.....................................................................19
System . out . p r i n t l n ( St r ing . format ( " El seno de %2.2 f es %1.3 f " , Math . PI.............19
/4 , Math . s i n (Math . PI /4) ) ) ;........................................................................................................19
2 System . out . p r i n t l n ( St r ing . format ( " La ra__z c u a d r a d a de 2 es %1.4 f " ,........19
Math . s q r t ( 2 ) ) ) ;..........................................................................................................................19
3 System . out . p r i n t l n ( St r ing . format ( " El l o g a r i t m o n a t u r a l de %1.3 f es......19
%1.3 f " , Math .E, Math . l o g (Math .E) ) ) ;....................................................................................19
Clase Object........................................................................................................................................20
notify() que son crticos cuando se escriben programas Java con mltiples thread...............21
notifyAll()que son crticos cuando se escriben programas Java con mltiples thread............21
wait() (tres versiones) que son crticos cuando se escriben programas Java con mltiples
thread...................................................................................................................................................21
EJEMPLO VISTO EN CLASE.............................................................................................................21
package claseObjects;......................................................................................................................21
class Pajaro { // *** atributos o propiedades ****.............................................................................21
private static int numpajaros = 0;....................................................................................................21
private char color; // propiedad o atributo color............................................................................21
private int edad; // propiedad o atributo edad................................................................................21
// *** mtodos de la clase ****...........................................................................................................21
static void nuevopajaro() {...............................................................................................................21
numpajaros++;..................................................................................................................................21
};..........................................................................................................................................................21
Pajaro() {.............................................................................................................................................21
color = 'v';..........................................................................................................................................21
edad = 0;............................................................................................................................................21
nuevopajaro();..................................................................................................................................21
}...........................................................................................................................................................21
Pajaro(char c, int e) {........................................................................................................................21
color = c;...........................................................................................................................................21
edad = e;............................................................................................................................................21
nuevopajaro();..................................................................................................................................21
}...........................................................................................................................................................21
static void muestrapajaros() {..........................................................................................................22
1 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

System.out.println(numpajaros);...................................................................................................22
};..........................................................................................................................................................22
public static void main(String[] args) {...........................................................................................22
Pajaro p1, p2;....................................................................................................................................22
Integer a=0; //envoltorio de int........................................................................................................22
int [] array = {2,3,4};.........................................................................................................................22
p1 = new Pajaro();............................................................................................................................22
p2 = new Pajaro('a', 3);.....................................................................................................................22
............................................................................................................................................................22
System.out.println(" USO DE EQUALS");......................................................................................22
if (p1.equals(p2))...............................................................................................................................22
System.out.println(" antes de asignar p1 = p2? => S");..........................................................22
else.....................................................................................................................................................22
System.out.println("antes de asignar p1 = p2? => NO");.........................................................22
p1=p2;................................................................................................................................................22
if (p1.equals(p2))...............................................................................................................................22
System.out.println(" antes de asignar p1 = p2? => S");..........................................................22
else.....................................................................................................................................................22
System.out.println("antes de asignar p1 = p2? => NO");.........................................................22
// p1.muestrapajaros();......................................................................................................................22
// p2.muestrapajaros();......................................................................................................................22
// System.out.println(p2.edad);........................................................................................................22
............................................................................................................................................................22
............................................................................................................................................................22
System.out.println(" USO DE TOSTRING SIN SOBREESCRIBIR");............................................22
System.out.println("Objetos: "+p2.toString()+" traduccin: nombre objeto@direccinhash\n
entero: "+ a.toString()+......................................................................................................................22
"\n array: "+ array.toString()+ "\n elemento del array: "+array [1]);..........................................22
}...........................................................................................................................................................22
}............................................................................................................................................................22
Clase Random....................................................................................................................................23
Documentacin sobre la clase random...........................................................................................23
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html...........................................23
Aclaraciones sobre la clase random y con ejemplo......................................................................23
http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/clases1/azar.htm..........................23
Constructores.....................................................................................................................................24
En Java existe un constructor por defecto, que hereda de la clase Object, y que inicializa sus
miembros y reserva memoria principal suficiente para poder trabajar con l. .........................24
2 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Podemos definir un constructor especfico que debe cumplir las siguientes reglas:...............24
Debe tener el mismo nombre de la clase que construye..............................................................24
Puede haber ms de uno. Esto se conoce como sobrecarga del mtodo y el nico requisito
ser que tenga distinto nmero y/o tipo de parmetros...............................................................24
Nunca puede devolver ningn valor................................................................................................24
No puede ser declarado con ningn modificador de acceso. Por regla general se declaran
como pblicos....................................................................................................................................24
Ejemplos de contructores. ...............................................................................................................24
public class CambioBase {...............................................................................................................24
private int num; ...............................................................................................................................24
private int base;.................................................................................................................................24
CambioBase() {//cosntructor sin parmetros................................................................................24
setNum();...........................................................................................................................................24
setBase();..........................................................................................................................................24
}...........................................................................................................................................................24
CambioBase(int num, int base) {//constructor con parmetros..................................................24
this.num = num;...............................................................................................................................24
this.base = base;..............................................................................................................................24
}...........................................................................................................................................................24
.............................................................................................................................................................24
void setNum() {//colocar valores en atributos privados...............................................................24
do {.....................................................................................................................................................24
this.num = Teclado.leeN("Deme nmero en base 10 a convertir");...........................................24
} while (this.num < 0);......................................................................................................................24
}...........................................................................................................................................................24
.............................................................................................................................................................24
void setBase() {.................................................................................................................................24
do {.....................................................................................................................................................24
this.base = Teclado.leeN("Deme base a la que convertir");.......................................................24
} while (this.base < 0);......................................................................................................................24
}...........................................................................................................................................................24
Convenciones de nombres...............................................................................................................25
SUN recomienda un estilo de codificacin que es seguido en el API de Java y en estos
apuntes que consiste en:..................................................................................................................25
Los nombre de paquetes siempre en minsculas.........................................................................25
Utilizar nombres descriptivos para las clases, evitando los nombres muy largos....................25
Si el nombre tiene varias palabras ponerlas todas juntas (sin separar con - o _) y poner la
primera letra de cada palabra en maysculas. Por ejemplo: InstrumentoMusical.....................25

3 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Para los nombres de clases poner la primera letra en maysculas y las dems en minsculas.
Por ejemplo: Empleado.....................................................................................................................25
Para los nombres de miembros (atributos y mtodos) seguir la misma norma, pero con la
primera letra de la primera palabra en minsculas. Por ejemplo: registrarOyente....................25
Los nombres de los mtodos deben ser verbos............................................................................25
Para las constantes (datos con el modificador final) usar nombres en maysculas, separando
las palabras con _..............................................................................................................................25
Comentarios (^+/)...............................................................................................................................26
En Java existen comentarios de lnea con // y bloques de comentario que comienzan con /* y
terminan con */. Por ejemplo:...........................................................................................................26
// Comentario de una linea
/* comienzo de comentario
continua comentario
fin de comentario */.........................................................................................................................26
Comentarios para documentacin...................................................................................................27
El JDK proporciona una herramienta para generar pginas HTML de documentacin a partir
de los comentarios incluidos en el cdigo fuente. El nombre de la herramienta es javadoc.
Para que javadoc pueda generar los textos HTML es necesario que se sigan unas normas de
documentacin en el fuente, que son las siguientes:...................................................................27
Los comentarios de documentacin deben empezar con /** y terminar con */. ........................27
Se pueden incorporar comentarios de documentacin a nivel de clase, a nivel de variable
(dato miembro) y a nivel de mtodo................................................................................................27
Se genera la documentacin para miembros public y protected.................................................27
Se pueden usar tags para documentar ciertos aspectos concretos como listas de parmetros
o valores devueltos. Los tags se indican a continuacin.............................................................27
Tipo de tag..........................................................................................................................................27
Formato...............................................................................................................................................27
Descripcin.........................................................................................................................................27
Todos...................................................................................................................................................27
@see....................................................................................................................................................27
Permite crear una referencia a la documentacin de otra clase o mtodo.................................27
Clases..................................................................................................................................................27
@version ............................................................................................................................................27
Comentario con datos indicativos del nmero de versin...........................................................27
Clases..................................................................................................................................................27
@author...............................................................................................................................................27
Nombre del autor................................................................................................................................27
Clases..................................................................................................................................................27
@since.................................................................................................................................................27
Fecha desde la que est presente la clase.....................................................................................27
Mtodos...............................................................................................................................................27
4 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

@param...............................................................................................................................................27
Parmetros que recibe el mtodo....................................................................................................27
Mtodos...............................................................................................................................................27
@return................................................................................................................................................27
Significado del dato devuelto por el mtodo..................................................................................27
Mtodos...............................................................................................................................................27
@throws..............................................................................................................................................27
Comentario sobre las excepciones que lanza................................................................................27
Mtodos...............................................................................................................................................27
@deprecated.......................................................................................................................................27
Indicacin de que el mtodo es obsoleto........................................................................................27
Toda la documentacin del API de Java est creada usando esta tcnica y la herramienta
javadoc................................................................................................................................................27
Una clase comentada (^+shift+F).....................................................................................................27
import java.util.*;
/** Un programa Java simple.
* Envia un saludo y dice que da es hoy.
* @author Antonio Bel
* @version 1
*/
public class HolaATodos {
/** Unico punto de entrada.
* @param args Array de Strings.
* @return No devuelve ningun valor.
* @throws No dispara ninguna excepcion.
*/
public static void main(String [ ] args) {
System.out.println("Hola a todos");
System.out.println(new Date());
}............................................................................................................................................................27
}............................................................................................................................................................28
Constantes. Final...............................................................................................................................29
public final class String ....................................................................................................................29
extends Object ...................................................................................................................................29
class Empleado {................................................................................................................................31
String nombre;...................................................................................................................................31
int numEmpleado, sueldo;...............................................................................................................31
//int sueldo;........................................................................................................................................31
Empleado(){}......................................................................................................................................31
Empleado (String nombre, int sueldo){..........................................................................................31
this.nombre=nombre;......................................................................................................................31
5 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

this.sueldo=sueldo;.........................................................................................................................31
numEmpleado= contador; ..............................................................................................................31
}...........................................................................................................................................................31
static private int contador = 0;.........................................................................................................31
public void aumentarSueldo(int porcentaje) {...............................................................................31
sueldo += (sueldo * porcentaje / 100); ..........................................................................................31
}...........................................................................................................................................................31
protected void lee(){..........................................................................................................................31
nombre = Teclado.leeCadena("deme nombre:");.........................................................................31
do{......................................................................................................................................................31
sueldo = Teclado.leeN("deme sueldo");.......................................................................................31
}while (sueldo <= 0 ); ......................................................................................................................31
numEmpleado=++contador;...........................................................................................................31
}........................................................................................................................................................31
public String toString() {...................................................................................................................31
return "Num. empleado " + numEmpleado + " Nombre: " + nombre+ " Sueldo: " + sueldo;. .31
}...........................................................................................................................................................31
}............................................................................................................................................................31
class Ejecutivo extends Empleado {................................................................................................31
int presupuesto;.............................................................................................................................31
public Ejecutivo(String nombre, int sueldo , int presupuesto) {...............................................31
super (nombre,sueldo);...................................................................................................................31
this.presupuesto=presupuesto;.....................................................................................................31
}...........................................................................................................................................................31
void asignarPresupuesto(int p) {.....................................................................................................31
presupuesto = p; .....................................................................................................................31
}........................................................................................................................................................31
public String toString() {................................................................................................................31
String s = super.toString();........................................................................................................31
s = s + " Presupuesto: " + presupuesto;.................................................................................31
return s;.......................................................................................................................................31
}}.......................................................................................................................................................31
public class HerenciaExposicion {...................................................................................................31
public static void main(String[] args) {...........................................................................................31
//Ejecutivo jefe = new Ejecutivo(); .................................................................................................31
Ejecutivo jefe = new Ejecutivo( "Armando Mucho", 1000, 300000);...........................................31
jefe.asignarPresupuesto(1500);......................................................................................................31
jefe.aumentarSueldo(5);..................................................................................................................31
6 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

System.out.println(jefe.toString());................................................................................................31
Empleado esclavo = new Empleado("No Tengo", 0); ..................................................................31
System.out.println(esclavo.toString());.........................................................................................31
// Empleado esclavo2 = new Empleado("No Tengo de N",0, 765 );............................................31
//ejemplo usos upcast ......................................................................................................................31
Empleado emp = new Ejecutivo("Mximo Dueo" , 2000, 88);...................................................31
System.out.println(emp.toString());...............................................................................................31
// emp.asignarPresupuesto(5); //error no existe............................................................................31
((Ejecutivo)emp).asignarPresupuesto(5);......................................................................................31
System.out.println(emp.toString());...............................................................................................31
Ejecutivo ej = (Ejecutivo)emp; .......................................................................................................31
System.out.println(emp.toString());...............................................................................................31
}}}.........................................................................................................................................................31
package cambioBase;.......................................................................................................................32
import utilidades.Teclado;.................................................................................................................32
public class CambioBase {...............................................................................................................32
private int num; ...............................................................................................................................32
private int base;.................................................................................................................................32
CambioBase() {//cosntructor sin parmetros................................................................................32
setNum();...........................................................................................................................................32
setBase();..........................................................................................................................................32
}...........................................................................................................................................................32
CambioBase(int num, int base) {//constructor con parmetros..................................................32
this.num = num;...............................................................................................................................32
this.base = base;..............................................................................................................................32
}...........................................................................................................................................................32
.............................................................................................................................................................32
void setNum() {//colocar valores en atributos privados...............................................................32
do {.....................................................................................................................................................32
this.num = Teclado.leeN("Deme nmero en base 10 a convertir");...........................................32
} while (this.num < 0);......................................................................................................................32
}...........................................................................................................................................................32
void setBase() {.................................................................................................................................32
do {.....................................................................................................................................................32
this.base = Teclado.leeN("Deme base a la que convertir");.......................................................32
} while (this.base < 0);......................................................................................................................32
}...........................................................................................................................................................32
int getNum() {//coger valores de atributos.....................................................................................32
7 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

return this.num;................................................................................................................................32
}...........................................................................................................................................................32
int getBase() {....................................................................................................................................32
return this.base;...............................................................................................................................32
}...........................................................................................................................................................32
public String pasarBase() {//cambio de base.................................................................................32
String resultado = "";.......................................................................................................................32
int numTemp= num;.........................................................................................................................32
while (numTemp >= this.base) {......................................................................................................32
...........................................................................................................................................................32
if (numTemp%base< 10) //este if sustituye el case del Adriana.................................................32
resultado = numTemp%base+resultado;.....................................................................................32
else....................................................................................................................................................32
resultado = (char) ('A' + (numTemp%base - 10))+resultado; ..................................................32
numTemp = numTemp / base;........................................................................................................32
}..........................................................................................................................................................32
if (numTemp < 10).............................................................................................................................32
resultado = numTemp +resultado;................................................................................................32
else {..................................................................................................................................................32
resultado = (char) ('A' + (numTemp - 10))+resultado;..................................................................32
}..........................................................................................................................................................32
............................................................................................................................................................32
return resultado;...............................................................................................................................32
}...........................................................................................................................................................32
.............................................................................................................................................................32
.............................................................................................................................................................32
public void ejemploArray(int[]datos){.............................................................................................32
datos[0]=getNum();..........................................................................................................................32
datos[1]=getBase();..........................................................................................................................32
}...........................................................................................................................................................32
}............................................................................................................................................................32
package cambioBase;//nos permite trabajar con ..........................................................................33
.............................................................................................................................................................33
class BasicoConObjetos {.................................................................................................................33
public static void main(String[] args) {...........................................................................................33
CambioBase numero = new CambioBase();.................................................................................33
String resultado=""; //declaro variable String e inicializo...........................................................33
............................................................................................................................................................33
8 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

resultado=numero.pasarBase();.....................................................................................................33
............................................................................................................................................................33
System.out.println("Nmero " + numero.getNum() + " en base "+ numero.getBase()+": " +
resultado);...........................................................................................................................................33
............................................................................................................................................................33
............................................................................................................................................................33
//prueba de array.devuelve los valores afectados. Pero aqu no se ha modificado el atributo
del objeto............................................................................................................................................33
int [] datosDelObjeto = new int [2]; //declaro array de entero.....................................................33
numero.ejemploArray(datosDelObjeto);........................................................................................33
System.out.println("en nmero " + datosDelObjeto[0] + " en base "+datosDelObjeto[1]); ....33
}...........................................................................................................................................................33
package figuras;.................................................................................................................................34
public abstract class Figura {...........................................................................................................34
// contiene la posicin x e y de la figura particular, de su centro,...............................................34
// y la funcin area, que se va a definir en las clases derivadas para calcular area..................34
protected int x;..................................................................................................................................34
protected int y;..................................................................................................................................34
public Figura(int x, int y) {................................................................................................................34
this.x = x;...........................................................................................................................................34
this.y = y;...........................................................................................................................................34
}...........................................................................................................................................................34
public abstract double area();..........................................................................................................34
}............................................................................................................................................................34
class Circulo extends Figura {..........................................................................................................34
protected double radio;....................................................................................................................34
public Circulo(int x, int y, double radio) {.......................................................................................34
super(x, y);........................................................................................................................................34
this.radio = radio;.............................................................................................................................34
}...........................................................................................................................................................34
public double area() {........................................................................................................................34
return Math.PI * radio * radio;.........................................................................................................34
}...........................................................................................................................................................34
}............................................................................................................................................................34
class Rectangulo extends Figura {..................................................................................................34
protected double ancho, alto;..........................................................................................................34
public Rectangulo(int x, int y, double ancho, double alto) {.........................................................34
super(x, y);........................................................................................................................................34
9 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

this.ancho = ancho;.........................................................................................................................34
this.alto = alto;..................................................................................................................................34
}...........................................................................................................................................................34
public double area() {........................................................................................................................34
return ancho * alto;..........................................................................................................................34
}...........................................................................................................................................................34
}............................................................................................................................................................34
class Cuadrado extends Rectangulo {.............................................................................................34
//el alto y el ancho coinciden y le llamamos dimension...............................................................34
public Cuadrado(int x, int y, double dimension) {.........................................................................34
super(x, y, dimension, dimension);................................................................................................34
}...........................................................................................................................................................34
}............................................................................................................................................................34
class Triangulo extends Figura {......................................................................................................34
protected double base, altura;.........................................................................................................34
public Triangulo(int x, int y, double base, double altura) {...........................................................34
super(x, y);........................................................................................................................................34
this.base = base;..............................................................................................................................34
this.altura = altura;...........................................................................................................................34
}...........................................................................................................................................................34
public double area() {........................................................................................................................34
return base * altura / 2;....................................................................................................................34
}...........................................................................................................................................................34
}............................................................................................................................................................34
.............................................................................................................................................................34
package figuras;.................................................................................................................................34
public class FiguraApp1 {.................................................................................................................35
public static void main(String[] args) {........................................................................................35
//array de objetos. Aplicacin prctica del polimorfismo.............................................................35
Figura fig[]=new Figura[4];.......................................................................................................35
fig[0]=new Rectangulo(0,0, 5.0, 2.0);.......................................................................................35
fig[1]=new Circulo(0,0, 3.0);.....................................................................................................35
fig[2]=new Cuadrado(0, 0, 5.0);................................................................................................35
fig[3]=new Triangulo(0,0, 7.0, 12.0);........................................................................................35
Figura fMayor=figuraMayor(fig);..............................................................................................35
System.out.println("El rea mayor es "+fMayor.area());.......................................................35
//el operador instanceof....................................................................................................................35
Rectangulo rect=new Rectangulo(0,0, 5.0, 2.0);....................................................................35
10 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

System.out.println(rect instanceof Figura);...........................................................................35


System.out.println(rect instanceof Rectangulo);..................................................................35
System.out.println(rect instanceof Cuadrado);.....................................................................35
//determinar la figura que tiene el rea mayor...............................................................................35
static Figura figuraMayor(Figura figuras[]){................................................................................35
Figura mFigura=null;................................................................................................................35
double areaMayor=0.0;.............................................................................................................35
for(int i=0; i<figuras.length; i++){............................................................................................35
if(figuras[i].area()>areaMayor){............................................................................................35
areaMayor=figuras[i].area();............................................................................................35
mFigura=figuras[i];...........................................................................................................35
}...............................................................................................................................................35
}...................................................................................................................................................35
return mFigura;..........................................................................................................................35
}.......................................................................................................................................................35
.............................................................................................................................................................35
}............................................................................................................................................................35
Envoltorios o Wrappers.....................................................................................................................36
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html............................................36
Todos los tipos de datos primitivos tienen envoltorios que los convierten a objetos..............36
..............................................................................................................................................................36
..............................................................................................................................................................36
..............................................................................................................................................................37
..............................................................................................................................................................37
Operador instanceof..........................................................................................................................38

El operador instanceof sirve para consultar si un objeto es una instancia de una clase
determinada, o de su padre. Pareciera absurdo tratar de conocer cul es la clase que da lugar
a una instancia especfica, sin embargo es de mucha utilidad cuando se trabaja con
interfaces y herencia a la vez. Veamos un ejemplo:
public class primo {
private int numero;
private int vectorPrimos[];
private int tamaoV;
public primo(){
this.tamaoV=25;
this.vectorPrimos= new int [this.tamaoV];
this.numero=0;
}
11 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

}
public class Main {
public static void main(String[] args) {
primo p = new primo();
if (esPrimo(p)){
System.out.println("ES INSTANCIA DE PRIMO");
}
}
public static boolean esPrimo(primo p) {
return (p instanceof primo);
}
}............................................................................................................................................................38
Paquete. (package).............................................................................................................................39
Un paquete es conjunto de clases que nos va a permitir organizarlas atendiendo a unos
criterios:..............................................................................................................................................39
La sentencia package debe ser nica..............................................................................................39
La organizacin es jerrquica de manera que un paquete puede organizar su informacin en
subpaquetes.......................................................................................................................................39
Si queremos acceder a una clase dentro de un paquete deberemos escribir:..........................39
Import nombrePaquete.[nombreSubpaquete.]NombreClase; //importa la clase especificada. 39
Import nombrePaquete.[nombreSubpaquete.]*; // importa todas las clases del paquete.........39
Dos clases con un mismo nombre y en distinto paquete son diferentes y por lo tanto no
plantearan ningn conflicto..............................................................................................................39
El JDK define una variable de entorno denominada CLASSPATH que gestiona las rutas en las
que el JDK busca los subpaquetes. El directorio actual suele estar siempre incluido en la
variable de entorno CLASSPATH.....................................................................................................39
CLASSPATH="C:\<directorio_usuario>\mi_proyecto"...................................................................39
Transportar paquetes de un sistema de archivos a otro..............................................................39
Lo ideal es meter todos estos ficheros y directorios en un nico fichero comprimido. Java,
con export de Eclipse. Empaqueta todo lo que le digamos (directorios, clases, ficheros de
imagen o lo que queramos) en un nico fichero de extensin .jar. Un fichero de extensin .jar
es similar a los .zip de Winzip, a los .rar de Winrar o a los ficheros .tar del tar de unix. De
hecho, con Winzip o Winrar se puede ver y desempaquetar el contenido de un fichero .jar...39
Java nos da adems otra opcin, podemos ejecutar las clases del fichero .jar sin tener que
desempaquetarlo. Smplemente podemos darle a nuestro amiguete el fichero .jar con todo
dentro y ya est listo para ejecutar..................................................................................................39
Vamos a ver cmo hacer todo esto..................................................................................................39
Parmetros: paso de parmetros por valor / referencia................................................................40
public String pasarBase() {//cambio de base.................................................................................40
String resultado = "";.......................................................................................................................40
while (this.num >= this.base) {........................................................................................................40
if (num%base< 10) //este if sustituye el case del Adriana..........................................................40
12 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

resultado += num%base;...............................................................................................................40
else....................................................................................................................................................40
resultado += (char) ('A' + (num%base - 10)); ............................................................................40
num = num / base;...........................................................................................................................40
}..........................................................................................................................................................40
if (num < 10)......................................................................................................................................40
resultado += num;...........................................................................................................................40
else {..................................................................................................................................................40
resultado += (char) ('A' + (num - 10));...........................................................................................40
}..........................................................................................................................................................40
return resultado;...............................................................................................................................40
}...........................................................................................................................................................40
//ojo! Este mtodo no funciona puesto que no devuelve el valor almacenado en String.........40
public void pasarBase(String resultado) {//cambio de base con String y sobreescribiendo
mtodo.................................................................................................................................................40
int numTemp= num;.........................................................................................................................40
while (numTemp >= this.base) {......................................................................................................40
if (numTemp%base< 10) //este if sustituye el case del Adriana.................................................40
resultado += numTemp%base;.....................................................................................................40
else....................................................................................................................................................40
resultado += (char) ('A' + (numTemp%base - 10)); ..................................................................40
numTemp = numTemp / base;........................................................................................................40
}..........................................................................................................................................................40
if (numTemp < 10).............................................................................................................................40
resultado += numTemp;..................................................................................................................40
else {..................................................................................................................................................40
resultado += (char) ('A' + (numTemp - 10));..................................................................................40
}..........................................................................................................................................................41
}...........................................................................................................................................................41
}............................................................................................................................................................41
System.out.println("Nmero " + numero.getNum() + " en base "+ numero.getBase()+": " +
numero.pasarBase());........................................................................................................................41
numero.pasarBase(resultado);.........................................................................................................41
System.out.println("Nmero " + numero.getNum() + " en base "+ numero.getBase()+": " +
resultado); ..........................................................................................................................................41
int [] datosDelObjeto = new int [2];...................................................................................................41
numero.ejemploArray(datosDelObjeto);..........................................................................................41
System.out.println("en nmero " + datosDelObjeto[0] + " en base "+datosDelObjeto[1]); ......41
static....................................................................................................................................................42
13 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

El modificador de almacenamiento static nos permitir crear miembros (ya sean atributos o
mtodos) nicos y que puedan ser utilizados por todas las clases. ..........................................42
Todos los objetos compartirn este miembro................................................................................42
ACLARACIONES................................................................................................................................42
Un atributo o variable static mantiene y comparte su valor con todas las instancias de su
clase.....................................................................................................................................................42
Un mtodo static no puede tener referencias this, y slo puede acceder a miembros que sean
static. Y no puede sobrescribirse.....................................................................................................42
De la misma forma se puede declarar un mtodo como esttico, lo que evita que el mtodo
pueda acceder a las variables de instancia no estticas. ............................................................42
El mtodo main es static...................................................................................................................42
Ver ejemplo de atributo static Empleado.java y el atributo numempleado.................................42
Ejemplo de mtodo y atributos static ...........................................................................................42
class Documento extends Pagina {.............................................................................................42
static int version = 10;...............................................................................................................42
int numero_de_capitulos;.........................................................................................................42
static void annade_un_capitulo() {...........................................................................................42
numero_de_capitulos++;

// esto no funciona..............................................................42

}................................................................................................................................................42
static void modifica_version( int i ) {.......................................................................................42
version++;

// esto s funciona............................................................................42

}................................................................................................................................................42
}....................................................................................................................................................42
La modificacin de la variable numero_de_capitulos no funciona porque se est violando una
de las reglas de acceso al intentar acceder desde un mtodo esttico a una variable no
esttica. ..............................................................................................................................................42
this y super.........................................................................................................................................43
this: Es la referencia al objeto con el que se est trabajando. Nos va a servir para resolver
ambigedades o para devolver referencias al propio objeto........................................................43
Ver ejemplo CambioBase.java.........................................................................................................43
super: Si se necesita llamar al mtodo padre dentro de una clase que ha reemplazado ese
mtodo, se puede hacer referencia al mtodo padre con la palabra clave super......................43
Ver ejemplo Empleado.java y Ejecutivo.java ................................................................................43
Variables de ambiente PATH y CLASSPATH..................................................................................44
Para una cmoda utilizacin de los programas del kit se puede cambiar la variable de
entorno 'path' y otra variable: el 'classpath'. .................................................................................44
La variable path contiene la ruta de acceso de los programas que con ms frecuencia uses,
de modo que para ejecutar un programa bastar con escribir su nombre y Windows lo
buscar, de este modo nos ahorramos tener que escribir toda la ruta de directorios hasta
llegar a l.............................................................................................................................................44
La variable classpath indica al JDK dnde debe buscar los archivos a compilar o ejecutar,
sin tener que escribir en cada ejecucin la ruta completa............................................................44
14 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

La instalacin es diferente para cada sistema operativo, pero en general muy sencilla. Se
recomienda observar y establecer los valores de las variables de entorno:..............................44
PATH: Variable de entorno que indica desde qu ruta (adems del directorio actual) se
pueden ejecutar los programas........................................................................................................44
CLASSPATH: Indica al compilador Java en qu rutas se encuentran los ficheros de clase.. . .44
Cmo vamos a trabajar en nuestro entorno eclipse......................................................................44
Sin paquetes: Si queremos que nuestro proyecto pueda utilizar clases definidas en otros
proyectos deberemos configurar el Built Path + Configure Built Path del men contextual del
proyecto. Y en la pestaa Projects aadiremos el proyecto que nos interese...........................44
..............................................................................................................................................................44
Con paquetes: Deberemos importar la clase que nos interesa utilizar.......................................44
Bsica: Si colocamos el paquete que contiene la clase dentro del proyecto ser visible por
todo el proyecto. Slo debemos importar.......................................................................................44
Avanzada: Configuramos el Built Path y adems importamos.....................................................44
Visibilidad............................................................................................................................................46
Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se
quiere para las variables de instancia y los mtodos definidos en la clase: .............................46
public ..................................................................................................................................................46
public void CualquieraPuedeAcceder(){}........................................................................................46
Cualquier clase desde cualquier lugar puede acceder a las variables y mtodos de instacia
pblicos. .............................................................................................................................................46
protected ............................................................................................................................................46
protected void SoloSubClases(){}....................................................................................................46
Slo las subclases de la clase y nadie ms puede acceder a las variables y mtodos de
instancia protegidos. ........................................................................................................................46
private .................................................................................................................................................46
private String NumeroDelCarnetDeIdentidad;................................................................................46
Las variables y mtodos de instancia privados slo pueden ser accedidos desde dentro de la
clase. No son accesibles desde las subclases. .............................................................................46
protected (sin declaracin especfica) ............................................................................................46
void MetodoDeMiPaquete(){}............................................................................................................46
Por defecto, si no se especifica el control de acceso, las variables y mtodos de instancia
son accesibles por todos los objetos dentro del mismo paquete, pero no por los externos al
paquete. Es lo mismo que friendly. .................................................................................................46
Los mtodos protegidos (protected) pueden ser vistos por las clases derivadas y tambin
por los paquetes (packages). Todas las clases de un paquete pueden ver los mtodos
protegidos de ese paquete. Para evitarlo, se deben declarar como private protected. ............46
Situacin del elemento......................................................................................................................46
private..................................................................................................................................................46
sin modificador...................................................................................................................................46
protected.............................................................................................................................................46
public...................................................................................................................................................46
15 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

En la misma clase..............................................................................................................................46
S .........................................................................................................................................................46
S .........................................................................................................................................................46
S .........................................................................................................................................................46
S .........................................................................................................................................................46
En una clase.......................................................................................................................................46
en el mismo paquete..........................................................................................................................46
No ........................................................................................................................................................46
S .........................................................................................................................................................46
S .........................................................................................................................................................46
S .........................................................................................................................................................46
En una clase hija................................................................................................................................46
en otro paquete..................................................................................................................................46
No ........................................................................................................................................................46
No ........................................................................................................................................................46
S .........................................................................................................................................................46
S .........................................................................................................................................................46
En una clase no hija...........................................................................................................................46
en otro paquete..................................................................................................................................46
No ........................................................................................................................................................46
No ........................................................................................................................................................46
No ........................................................................................................................................................46
S .........................................................................................................................................................46

16 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Casting
Cast es uno operador que nos permite de convertir o moldear un tipo de dato a otro, es un recurso
infinitamente utilizado por los programadores y que tiene un costo asociado si se realiza en tiempo de
ejecucin.
Los compiladores pueden resolver muchas de las conversiones en tiempo de compilacin haciendo que ese
costo se disminuya a nada. Obviamente hay compiladores mas inteligentes que otros, por lo que no debe
sorprendernos encontrar que existan compiladores que manejen mejor el tema de las conversiones que
otros.
Consideremos dos tablas con miles de filas y unas cuantas columnas y dos modelos de tablas distintos. En
uno de los modelos en el mtodo getValueAt(int,int) escrito haciendo mal uso de la conversin y en el otro
modelo evitando la conversin. Prueben el desempeo de ambas tablas, las diferencias son evidentes.
La conversin de datos primitivos es ms rpida que la conversin de objetos ya que no deben
efectuarse una serie de pruebas que a los objetos si se le aplican, es una mera conversin de tipos pero que
tiene la desventaja de solo puede ser resuelva en tiempo de ejecucin.
El costo de una operacin de una conversin objetos depende de la profundidad de la herencia cuanto mas
alejada estn las clases que queremos convertir mas caro es. Las interfaces tienen un costo asociado mayor
que las clases comunes.
Debemos evitar siempre que se pueda la conversin, utilizando los tipos de datos y clases correctos.
Ejemplo bsico: la lnea resultado += (char) ('A' + (num - 10)); en nuestro ejemplo de
CambioBase.class
A continuacin un pequeo ejemplo con objetos. Que veremos ms adelante (130310)
public void enviarMensajes(ArrayList mensajes, Object objeto){
if(objeto instanceof Persona){
Iterator itMensajes = mensajes.iterator();
for(int n = 0; itMensajes.hasNext(); n++){
Mensajes mensaje = (Mensaje)mensajes.next();
mensaje.setDestinatario((Persona)objeto);
mensaje.setNumero(n);
}
}
}
Si una variable debe ser casteada muchas veces, es recomendable utilizar una variable temporal para evitar
el abuso. Noten como ahorro castear el Object a Persona una cantidad indeterminada de veces.
public void enviarMensajes(ArrayList mensajes, Object objeto){
if(objeto instanceof Persona){
Iterator itMensajes = mensajes.iterator();
Persona persona = (Persona)objeto;
for(int n = 0; itMensajes.hasNext(); n++){
Mensajes mensaje = (Mensaje)mensajes.next();
mensaje.setDestinatario(persona);
mensaje.setNumero(n);
}
}
}
A partir de Java 1.5 prcticamente no existe necesidad de efectuar una conversin.
public void enviarMensajes(ArrayList < Mensaje > mensajes, Object objeto){
if(objeto instanceof Persona){
17 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Persona persona = (Persona)objeto;


for(int n = 0; n < mensajes.size(); n++){
Mensajes mensaje = mensajes.get(n).next();
mensaje.setDestinatario(persona);
mensaje.setNumero(n);
}
}
}

18 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Clase Math

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html

La clase Math nos proporciona algunas de las funciones matemticas trigonomtricas, logartmicas y otras de
utilidad. Todos los mtodos de esta clase son static, por lo que no hace falta crear una instancia para poder
utilizarlos.
System . out . p r i n t l n ( St r ing . format ( " El seno de %2.2 f es %1.3 f " , Math . PI
/4 , Math . s i n (Math . PI /4) ) ) ;
2 System . out . p r i n t l n ( St r ing . format ( " La ra__z c u a d r a d a de 2 es %1.4 f " ,
Math . s q r t ( 2 ) ) ) ;
3 System . out . p r i n t l n ( St r ing . format ( " El l o g a r i t m o n a t u r a l de %1.3 f es
%1.3 f " , Math .E, Math . l o g (Math .E) ) ) ;

19 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Clase Object
Es la raz jerrquica de Java. Documentacin oficial :
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html
public class Object {
public final Class getClass() { . . . }
public String toString() { . . . }
public boolean equals(Object obj) { . . . }
public int hashCode() { . . . }
protected Object clone() throws CloneNotSupportedException { . . . }
public final void wait() throws IllegalMonitorStateException, InterruptedException { . . . }
public final void wait(long millis) throws IllegalMonitorStateException, InterruptedException {. . .}
public final void wait(long millis, int nanos) throws IllegalMonitorStateException,InterruptedException { . . . }
public final void notify() throws IllegalMonitorStateException { . . . }
public final void notifyAll() throws IllegalMonitorStateException { . . . }
protected void finalize() throws Throwable { . . . }
}
La clase Object est situada en la parte ms alta del rbol de la herencia en el entorno de desarrollo de Java.
Todas las clases del sistema Java son descendentes (directos o indirectos) de la clase Object. Esta clase
define los estados y comportamientos bsicos que todos los objetos deben tener, como la posibilidad de
compararse unos con otros, de convertirse a cadenas, de esperar una condicin variable, de notificar a otros
objetos que la condicin variable ha cambiado y devolver la clase del objeto.
Una tabla Hash es conceptualmente una seccin contigua de memoria con un nmero de elementos
direccionables, comnmente llamados bins (depsitos), los cuales pueden ser rpidamente insertados,
borrados o localizados. Las tablas hash representan un sacrificio de memoria para conseguir velocidad - no
es la manera ms eficaz de almacenar datos, pero proporciona altas velocidades de acceso. Las tablas Hash
se usan generalmente para organizar datos, por eso los diseadores del lenguaje Java suministraron algunas
clases para crear y manipular fcilmente instancias de tablas hash.
Hashtable es la clase que proporciona Java para manejar tablas hash. Hashtable se hereda directamente
desde Dictionary e implemeta los interfaces Map, Cloneable y Serialize. La implementacin del interfaz Map
es novedad en Java 1.2. Puedes ver la documentacin de Hashtable y el resto de clases de Java Aqu

El mtodo equals()
equals() se utiliza para comparar si dos objetos son iguales. Este mtodo devuelve true si los objetos son
iguales, o false si no lo son. Observe que la igualdad no significa que los objetos sean el mismo objeto.
Consideremos este cdigo que compara dos enteros.
Integer uno = new Integer(1), otroUno = new Integer(1);
if (uno.equals(otroUno))
System.out.println("Los objetos son Iguales");
Este cdigo mostrar Los objetos son Iguales aunque uno y otroUno referencian a dos objetos distintos. Se
les considera iguales porque su contenido es el mismo valor entero.
Las clases deberan sobreescribir este mtodo proporcionando la comprobacin de igualdad apropiada. Un
mtodo equals() debera comparar el contenido de los objetos para ver si son funcionalmente iguales y
devolver true si es as.
El mtodo getClass()
20 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

El mtodo getClass() es un mtodo final (no puede sobreescribirse) que devuelve una representacin en
tiempo de ejecucin de la clase del objeto. Este mtodo devuelve un objeto Class al que se le puede pedir
informacin varia sobre la clase, como su nombre, el nombre de su superclase y los nombres de los
interfaces que implementa. El siguiente mtodo obtiene y muestra el nombre de la clase de un objeto.
void PrintClassName(Object obj) {
System.out.println("La clase del Objeto es " +obj.getClass().getName());
}
Un uso muy manejado del mtodo getClass() es crear un ejemplar de una clase sin conocer la clase en el
momento de la compilacin. Este mtodo de ejemplo, crea un nuevo ejemplar de la misma clase que obj que
puede ser cualquier clase heredada desde Object (lo que significa que podra ser cualquier clase).
Object createNewInstanceOf(Object obj) {
return obj.getClass().newInstance();
}
El mtodo toString()
Este mtodo devuelve una cadena de texto que representa al objeto. Se puede utilizar toString para mostrar
un objeto. Por ejemplo, se podra mostrar una representacin del Thread actual de la siguiente forma.
System.out.println(Thread.currentThread().toString()); //salida Thread[main,5,main]
System.out.println(new Integer(44).toString()); //salida 4
La representacin de un objeto depende enteramente del objeto. El String de un objeto entero es el valor del
entero mostrado como texto. El String de un objeto Thread contiene varios atributos sobre el thread (hilos:
programas en ejecucin simultnea e independiente- ms informacin), como su nombre y prioridad. El
mtodo toString() es muy til para depuracin y tambin puede sobreescribir este mtodo en todas las
clases.
Otros mtodos de Object que dejamos ahora pendientes.
finalize() que limpia un objeto antes de recolectar la basura.
notify() que son crticos cuando se escriben programas Java con mltiples thread.
notifyAll()que son crticos cuando se escriben programas Java con mltiples thread.
wait() (tres versiones) que son crticos cuando se escriben programas Java con mltiples thread.
EJEMPLO VISTO EN CLASE
package claseObjects;
class Pajaro {
private
private
private

// *** atributos o propiedades ****


static int numpajaros = 0;
char color; // propiedad o atributo color
int edad; // propiedad o atributo edad

// *** mtodos de la clase ****


static void nuevopajaro() {
numpajaros++;
};
Pajaro() {
color = 'v';
edad = 0;
nuevopajaro();
}
Pajaro(char c, int e) {
color = c;
edad = e;
nuevopajaro();
}
21 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13


static void muestrapajaros() {
System.out.println(numpajaros);
};
public static void main(String[] args) {
Pajaro p1, p2;
Integer a=0; //envoltorio de int
int [] array = {2,3,4};
p1 = new Pajaro();
p2 = new Pajaro('a', 3);

//
//
//

System.out.println(" USO DE EQUALS");


if (p1.equals(p2))
System.out.println(" antes de asignar p1 = p2? => S");
else
System.out.println("antes de asignar p1 = p2? => NO");
p1=p2;
if (p1.equals(p2))
System.out.println(" antes de asignar p1 = p2? => S");
else
System.out.println("antes de asignar p1 = p2? => NO");
p1.muestrapajaros();
p2.muestrapajaros();
System.out.println(p2.edad);

System.out.println(" USO DE TOSTRING SIN SOBREESCRIBIR");


System.out.println("Objetos: "+p2.toString()+" traduccin: nombre objeto@direccinhash\n entero:
"+ a.toString()+
"\n array: "+ array.toString()+ "\n elemento del array: "+array [1]);
}
}

22 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Clase Random
Documentacin sobre la clase random
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html
Aclaraciones sobre la clase random y con ejemplo
http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/clases1/azar.htm

23 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Constructores
En Java existe un constructor por defecto, que hereda de la clase Object, y que inicializa sus
miembros y reserva memoria principal suficiente para poder trabajar con l.
Podemos definir un constructor especfico que debe cumplir las siguientes reglas:

Debe tener el mismo nombre de la clase que construye.

Puede haber ms de uno. Esto se conoce como sobrecarga del mtodo y el nico requisito
ser que tenga distinto nmero y/o tipo de parmetros.

Nunca puede devolver ningn valor.

No puede ser declarado con ningn modificador de acceso. Por regla general se declaran
como pblicos.

Ejemplos de contructores.
public class CambioBase {
private int num;
private int base;
CambioBase() {//cosntructor sin parmetros
setNum();
setBase();
}
CambioBase(int num, int base) {//constructor con parmetros
this.num = num;
this.base = base;
}
void setNum() {//colocar valores en atributos privados
do {
this.num = Teclado.leeN("Deme nmero en base 10 a convertir");
} while (this.num < 0);
}
void setBase() {
do {
this.base = Teclado.leeN("Deme base a la que convertir");
} while (this.base < 0);
}

24 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Convenciones de nombres
SUN recomienda un estilo de codificacin que es seguido en el API de Java y en estos apuntes que
consiste en:

Los nombre de paquetes siempre en minsculas.

Utilizar nombres descriptivos para las clases, evitando los nombres muy largos.

Si el nombre tiene varias palabras ponerlas todas juntas (sin separar con - o _) y poner la
primera letra de cada palabra en maysculas. Por ejemplo: InstrumentoMusical.

Para los nombres de clases poner la primera letra en maysculas y las dems en minsculas.
Por ejemplo: Empleado

Para los nombres de miembros (atributos y mtodos) seguir la misma norma, pero con la
primera letra de la primera palabra en minsculas. Por ejemplo: registrarOyente.

Los nombres de los mtodos deben ser verbos.

Para las constantes (datos con el modificador final) usar nombres en maysculas, separando
las palabras con _

25 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Comentarios (^+/)
En Java existen comentarios de lnea con // y bloques de comentario que comienzan con /* y terminan
con */. Por ejemplo:
// Comentario de una linea
/* comienzo de comentario
continua comentario
fin de comentario */

26 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Comentarios para documentacin


El JDK proporciona una herramienta para generar pginas HTML de documentacin a partir de los
comentarios incluidos en el cdigo fuente. El nombre de la herramienta es javadoc. Para que javadoc pueda
generar los textos HTML es necesario que se sigan unas normas de documentacin en el fuente, que son las
siguientes:
Los comentarios de documentacin deben empezar con /** y terminar con */.
Se pueden incorporar comentarios de documentacin a nivel de clase, a nivel de variable (dato
miembro) y a nivel de mtodo.
Se genera la documentacin para miembros public y protected.
Se pueden usar tags para documentar ciertos aspectos concretos como listas de parmetros o
valores devueltos. Los tags se indican a continuacin.
Tipo de tag

Formato

Descripcin

Todos

@see

Clases

@version

Clases

@author

Nombre del autor.

Clases

@since

Fecha desde la que est presente la clase.

Mtodos

@param

Parmetros que recibe el mtodo.

Mtodos

@return

Significado del dato devuelto por el mtodo

Mtodos

@throws

Comentario sobre las excepciones que lanza.

Permite crear una referencia a la


documentacin de otra clase o mtodo.
Comentario con datos indicativos del nmero
de versin.

Mtodos
@deprecated
Indicacin de que el mtodo es obsoleto.
Toda la documentacin del API de Java est creada usando esta tcnica y la herramienta javadoc.
Una clase comentada (^+shift+F)
import java.util.*;
/** Un programa Java simple.
* Envia un saludo y dice que da es hoy.
* @author Antonio Bel
* @version 1
*/
public class HolaATodos {
/** Unico punto de entrada.
* @param args Array de Strings.
* @return No devuelve ningun valor.
* @throws No dispara ninguna excepcion.
*/
public static void main(String [ ] args) {
System.out.println("Hola a todos");
27 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

System.out.println(new Date());
}
}

28 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Constantes. Final
Se declara en MAYSCULAS mientras que las variables siempre sern minsculas.
final [static] <tipo de dato> <NOMBRE CONSTANTE> = <valor>;
Si se declara static slo existir una copia de la constante para todas los objetos.
Ejemplo: final static double PI=3.1416; or final BASE = 16;
Se utilizan para datos que nunca varian (PI, IVA.) De esta manera nos aseguramos que su valor
no va a ser modificado nunca.
Nos permiten centralizar el valor de un dato en una slo lnea de cdigo.
Si final precede a:
o

una variable, es una constante que no se puede modificar

un mtodo, no se puede sobreescribir

una clase, no permite definir subclases a partir de ella

Las estructuras de datos String derivan de la clase Object y estan declaradas como final.
public final class String
extends Object
The String class represents character strings. All string literals in Java programs, such as
"abc", are implemented as instances of this class.
Strings are constant; their values cannot be changed after they are created. String buffers
support mutable strings. Because String objects are immutable they can be shared.

29 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Documentacin sobre Java

Documentacin oficial:
http://docs.oracle.com/javase/1.4.2/docs/api/

30 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Ejemplo completo de Empleado.java, Ejecutivo.java y HerenciaExposicion.java


class Empleado {
String nombre;
int numEmpleado, sueldo;
//int sueldo;
Empleado(){}
Empleado (String nombre, int sueldo){
this.nombre=nombre;
this.sueldo=sueldo;
numEmpleado= contador;
}
static private int contador = 0;
public void aumentarSueldo(int porcentaje) {
sueldo += (sueldo * porcentaje / 100);
}
protected void lee(){
nombre = Teclado.leeCadena("deme nombre:");
do{
sueldo = Teclado.leeN("deme sueldo");
}while (sueldo <= 0 );
numEmpleado=++contador;
}
public String toString() {
return "Num. empleado " + numEmpleado + " Nombre: " + nombre+ " Sueldo: " + sueldo;
}
}

class Ejecutivo extends Empleado {


int presupuesto;
public Ejecutivo(String nombre, int sueldo , int presupuesto) {
super (nombre,sueldo);
this.presupuesto=presupuesto;
}
void asignarPresupuesto(int p) {
presupuesto = p;
}
public String toString() {
String s = super.toString();
s = s + " Presupuesto: " + presupuesto;
return s;
}}

public class HerenciaExposicion {


public static void main(String[] args) {
//Ejecutivo jefe = new Ejecutivo();
Ejecutivo jefe = new Ejecutivo( "Armando Mucho", 1000, 300000);
jefe.asignarPresupuesto(1500);
jefe.aumentarSueldo(5);
System.out.println(jefe.toString());
Empleado esclavo = new Empleado("No Tengo", 0);
System.out.println(esclavo.toString());
//
Empleado esclavo2 = new Empleado("No Tengo de N",0, 765 );
//ejemplo usos upcast
Empleado emp = new Ejecutivo("Mximo Dueo" , 2000, 88);
System.out.println(emp.toString());
//
emp.asignarPresupuesto(5); //error no existe
((Ejecutivo)emp).asignarPresupuesto(5);
System.out.println(emp.toString());
Ejecutivo ej = (Ejecutivo)emp;
System.out.println(emp.toString());
}}}

31 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Ejemplo completo de CambioBase.java y BasicoConObjetos.java


package cambioBase;
import utilidades.Teclado;
public class CambioBase {
private int num;
private int base;
CambioBase() {//cosntructor sin parmetros
setNum();
setBase();
}
CambioBase(int num, int base) {//constructor con parmetros
this.num = num;
this.base = base;
}
void setNum() {//colocar valores en atributos privados
do {
this.num = Teclado.leeN("Deme nmero en base 10 a convertir");
} while (this.num < 0);
}
void setBase() {
do {
this.base = Teclado.leeN("Deme base a la que convertir");
} while (this.base < 0);
}
int getNum() {//coger valores de atributos
return this.num;
}
int getBase() {
return this.base;
}
public String pasarBase() {//cambio de base
String resultado = "";
int numTemp= num;
while (numTemp >= this.base) {
if (numTemp%base< 10) //este if sustituye el case del Adriana
resultado = numTemp%base+resultado;
else
resultado = (char) ('A' + (numTemp%base - 10))+resultado;
numTemp = numTemp / base;
}
if (numTemp < 10)
resultado = numTemp +resultado;
else {
resultado = (char) ('A' + (numTemp - 10))+resultado;
}
return resultado;
}
public void ejemploArray(int[]datos){
datos[0]=getNum();
datos[1]=getBase();
}
}

32 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

package cambioBase;//nos permite trabajar con


class BasicoConObjetos {
public static void main(String[] args) {
CambioBase numero = new CambioBase();
String resultado=""; //declaro variable String e inicializo
resultado=numero.pasarBase();
System.out.println("Nmero " + numero.getNum() + " en base "+ numero.getBase()+": " +
resultado);
//prueba de array.devuelve los valores afectados. Pero aqu no se ha modificado el
atributo del objeto
int [] datosDelObjeto = new int [2]; //declaro array de entero
numero.ejemploArray(datosDelObjeto);
System.out.println("en nmero " + datosDelObjeto[0] + " en base "+datosDelObjeto[1]);
}

33 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Ejemplo completo de Figura.java y FiguraApp.java

package figuras;
public abstract class Figura {
// contiene la posicin x e y de la figura particular, de su centro,
// y la funcin area, que se va a definir en las clases derivadas para calcular area
protected int x;
protected int y;
public Figura(int x, int y) {
this.x = x;
this.y = y;
}
public abstract double area();
}
class Circulo extends Figura {
protected double radio;
public Circulo(int x, int y, double radio) {
super(x, y);
this.radio = radio;
}
public double area() {
return Math.PI * radio * radio;
}
}
class Rectangulo extends Figura {
protected double ancho, alto;
public Rectangulo(int x, int y, double ancho, double alto) {
super(x, y);
this.ancho = ancho;
this.alto = alto;
}
public double area() {
return ancho * alto;
}
}
class Cuadrado extends Rectangulo {
//el alto y el ancho coinciden y le llamamos dimension
public Cuadrado(int x, int y, double dimension) {
super(x, y, dimension, dimension);
}
}
class Triangulo extends Figura {
protected double base, altura;
public Triangulo(int x, int y, double base, double altura) {
super(x, y);
this.base = base;
this.altura = altura;
}
public double area() {
return base * altura / 2;
}
}

package figuras;
34 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

public class FiguraApp1 {


public static void main(String[] args) {
//array de objetos. Aplicacin prctica del polimorfismo.
Figura fig[]=new Figura[4];
fig[0]=new Rectangulo(0,0, 5.0, 2.0);
fig[1]=new Circulo(0,0, 3.0);
fig[2]=new Cuadrado(0, 0, 5.0);
fig[3]=new Triangulo(0,0, 7.0, 12.0);
Figura fMayor=figuraMayor(fig);
System.out.println("El rea mayor es "+fMayor.area());
//el operador instanceof
Rectangulo rect=new Rectangulo(0,0, 5.0, 2.0);
System.out.println(rect instanceof Figura);
System.out.println(rect instanceof Rectangulo);
System.out.println(rect instanceof Cuadrado);
//determinar la figura que tiene el rea mayor
static Figura figuraMayor(Figura figuras[]){
Figura mFigura=null;
double areaMayor=0.0;
for(int i=0; i<figuras.length; i++){
if(figuras[i].area()>areaMayor){
areaMayor=figuras[i].area();
mFigura=figuras[i];
}
}
return mFigura;
}
}

35 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Envoltorios o Wrappers
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html
Todos los tipos de datos primitivos tienen envoltorios que los convierten a objetos.

36 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

37 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Operador instanceof

El operador instanceof sirve para consultar si un objeto es una instancia de una clase determinada, o de su padre. Pareciera absurdo
tratar de conocer cul es la clase que da lugar a una instancia especfica, sin embargo es de mucha utilidad cuando se trabaja con
interfaces y herencia a la vez. Veamos un ejemplo:
public class primo {
private int numero;
private int vectorPrimos[];
private int tamaoV;
public primo(){
this.tamaoV=25;
this.vectorPrimos= new int [this.tamaoV];
this.numero=0;
}
}

public class Main {


public static void main(String[] args) {
primo p = new primo();
if (esPrimo(p)){
System.out.println("ES INSTANCIA DE PRIMO");
}
}
public static boolean esPrimo(primo p) {
return (p instanceof primo);
}
}

38 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Paquete. (package)
Un paquete es conjunto de clases que nos va a permitir organizarlas atendiendo a unos criterios:
La sentencia package debe ser nica.
La organizacin es jerrquica de manera que un paquete puede organizar su informacin en
subpaquetes.
Si queremos acceder a una clase dentro de un paquete deberemos escribir:
Import nombrePaquete.[nombreSubpaquete.]NombreClase; //importa la clase especificada
Import nombrePaquete.[nombreSubpaquete.]*; // importa todas las clases del paquete

Dos clases con un mismo nombre y en distinto paquete son diferentes y por lo tanto no
plantearan ningn conflicto.

El JDK define una variable de entorno denominada CLASSPATH que gestiona las rutas en las
que el JDK busca los subpaquetes. El directorio actual suele estar siempre incluido en la
variable de entorno CLASSPATH.
CLASSPATH="C:\<directorio_usuario>\mi_proyecto"

Transportar paquetes de un sistema de archivos a otro

Lo ideal es meter todos estos ficheros y directorios en un nico fichero comprimido. Java, con export
de Eclipse. Empaqueta todo lo que le digamos (directorios, clases, ficheros de imagen o lo que
queramos) en un nico fichero de extensin .jar. Un fichero de extensin .jar es similar a los .zip de
Winzip, a los .rar de Winrar o a los ficheros .tar del tar de unix. De hecho, con Winzip o Winrar se
puede ver y desempaquetar el contenido de un fichero .jar
Java nos da adems otra opcin, podemos ejecutar las clases del fichero .jar sin tener que
desempaquetarlo. Smplemente podemos darle a nuestro amiguete el fichero .jar con todo dentro y ya
est listo para ejecutar.
Vamos a ver cmo hacer todo esto.

39 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Parmetros: paso de parmetros por valor / referencia

La comunicacin entre los distintos mtodos se hace a travs de parmetros que tendrn un valor formal en
la definicin y un valor real en la llamada al mismo.
Paso por valor significa que cuando un argumento se pasa a una funcin, la funcin recibe
una copia del valor original. Por lo tanto, si la funcin modifica el parmetro, slo la copia
cambia y el valor original permanece intacto.
Paso por referencia significa que cuando un argumento se pasa a una funcin, la funcin
recibe la direccin de memoria del valor original, no la copia del valor. Por lo tanto, si la funcin
modifica el parmetro, el valor original en el cdigo que llam a la funcin cambia.
ACLARACIONES:
Los objetos pueden ser enviados y/o devueltos por un mtodo. Los objetos en Java son referencias.
Cuando se pasa un objeto, como estos son referencias, lo que realmente se pasa es el "valor de la
referencia", es decir, se pasa por valor la direccin de comienzo de la memoria privada del objeto
(atributos del objeto). Por esta razn, podr modificarse su contenido, pero nunca la referencia en si.
Los tipos de dato String no son por referencia sino por valor. Y pueden ser enviados y/o devueltos por
un mtodo. Un tipo String es un objeto, el problema es que est declarado como final, por lo que no
podr modificarse ninguna casilla, todo lo que quiera hacerse se har a travs de otros arrays String.
Los tipos de dato array[] son objetos, se pasa la referencia a la primera posicin. Y pueden ser
enviados y/o devueltos por un mtodo. Pero no son final, por lo tanto, cualquier cambio que hagamos
se mantendr al volver de la llamada.
Los parmetros se pasan siempre por valor. (Por esto, los tipos primitivos son inmutables y sus
envolturas aunque son objetos son inmutables porque estn declaradas final, o sea contantes. Todas
las clases declaradas final son inmutables)
Ejemplo: Ver CambioBase.java y BasicoConObjetos.java
public String pasarBase() {//cambio de base
String resultado = "";
while (this.num >= this.base) {
if (num%base< 10) //este if sustituye el case del Adriana
resultado += num%base;
else
resultado += (char) ('A' + (num%base - 10));
num = num / base;
}
if (num < 10)
resultado += num;
else {
resultado += (char) ('A' + (num - 10));
}
return resultado;
}
//ojo! Este mtodo no funciona puesto que no devuelve el valor almacenado en String
public void pasarBase(String resultado) {//cambio de base con String y sobreescribiendo mtodo
int numTemp= num;
while (numTemp >= this.base) {
if (numTemp%base< 10) //este if sustituye el case del Adriana
resultado += numTemp%base;
else
resultado += (char) ('A' + (numTemp%base - 10));
numTemp = numTemp / base;
}
if (numTemp < 10)
resultado += numTemp;
else {
resultado += (char) ('A' + (numTemp - 10));
40 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

}
}
}
System.out.println("Nmero " + numero.getNum() + " en base "+ numero.getBase()+": " +
numero.pasarBase());
numero.pasarBase(resultado);
System.out.println("Nmero " + numero.getNum() + " en base "+ numero.getBase()+": " + resultado);

int [] datosDelObjeto = new int [2];


numero.ejemploArray(datosDelObjeto);
System.out.println("en nmero " + datosDelObjeto[0] + " en base "+datosDelObjeto[1]);

41 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

static

El modificador de almacenamiento static nos permitir crear miembros (ya sean atributos o mtodos)
nicos y que puedan ser utilizados por todas las clases.
Todos los objetos compartirn este miembro.
ACLARACIONES

Un atributo o variable static mantiene y comparte su valor con todas las instancias de
su clase.

Un mtodo static no puede tener referencias this, y slo puede acceder a miembros
que sean static. Y no puede sobrescribirse.

De la misma forma se puede declarar un mtodo como esttico, lo que evita que el
mtodo pueda acceder a las variables de instancia no estticas.
El mtodo main es static.
Ver ejemplo de atributo static Empleado.java y el atributo numempleado
Ejemplo de mtodo y atributos static
class Documento extends Pagina {
static int version = 10;
int numero_de_capitulos;
static void annade_un_capitulo() {
numero_de_capitulos++;
// esto no funciona
}
static void modifica_version( int i ) {
version++;
// esto s funciona
}
}
La modificacin de la variable numero_de_capitulos no funciona porque se est violando una de las reglas de
acceso al intentar acceder desde un mtodo esttico a una variable no esttica.

42 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

this y super
this: Es la referencia al objeto con el que se est trabajando. Nos va a servir para resolver
ambigedades o para devolver referencias al propio objeto.
Ver ejemplo CambioBase.java
super: Si se necesita llamar al mtodo padre dentro de una clase que ha reemplazado ese mtodo, se
puede hacer referencia al mtodo padre con la palabra clave super.
Ver ejemplo Empleado.java y Ejecutivo.java

43 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Variables de ambiente PATH y CLASSPATH


Para una cmoda utilizacin de los programas del kit se puede cambiar la variable de entorno 'path' y
otra variable: el 'classpath'.
La variable path contiene la ruta de acceso de los programas que con ms frecuencia uses, de modo
que para ejecutar un programa bastar con escribir su nombre y Windows lo buscar, de este modo nos
ahorramos tener que escribir toda la ruta de directorios hasta llegar a l.
La variable classpath indica al JDK dnde debe buscar los archivos a compilar o ejecutar, sin tener
que escribir en cada ejecucin la ruta completa.
La instalacin es diferente para cada sistema operativo, pero en general muy sencilla. Se recomienda
observar y establecer los valores de las variables de entorno:

PATH: Variable de entorno que indica desde qu ruta (adems del directorio actual) se pueden
ejecutar los programas
CLASSPATH: Indica al compilador Java en qu rutas se encuentran los ficheros de clase.
Cmo vamos a trabajar en nuestro entorno eclipse

Sin paquetes: Si queremos que nuestro proyecto pueda utilizar clases definidas en otros
proyectos deberemos configurar el Built Path + Configure Built Path del men contextual del
proyecto. Y en la pestaa Projects aadiremos el proyecto que nos interese.

Con paquetes: Deberemos importar la clase que nos interesa utilizar.


o

Bsica: Si colocamos el paquete que contiene la clase dentro del proyecto ser visible
por todo el proyecto. Slo debemos importar.

Avanzada: Configuramos el Built Path y adems importamos.

44 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

45 / 46

19 de marzo de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Visibilidad
Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quiere para las
variables de instancia y los mtodos definidos en la clase:
public
public void CualquieraPuedeAcceder(){}
Cualquier clase desde cualquier lugar puede acceder a las variables y mtodos de instacia pblicos.
protected
protected void SoloSubClases(){}
Slo las subclases de la clase y nadie ms puede acceder a las variables y mtodos de instancia protegidos.
private
private String NumeroDelCarnetDeIdentidad;
Las variables y mtodos de instancia privados slo pueden ser accedidos desde dentro de la clase. No son
accesibles desde las subclases.
protected (sin declaracin especfica)
void MetodoDeMiPaquete(){}
Por defecto, si no se especifica el control de acceso, las variables y mtodos de instancia son accesibles por
todos los objetos dentro del mismo paquete, pero no por los externos al paquete. Es lo mismo que friendly.
Los mtodos protegidos (protected) pueden ser vistos por las clases derivadas y tambin por los paquetes
(packages). Todas las clases de un paquete pueden ver los mtodos protegidos de ese paquete. Para
evitarlo, se deben declarar como private protected.

Situacin del
elemento

private

sin
modificador

protected

public

En la misma clase

No

No

No

No

No

No

En una clase
en el mismo paquete
En una clase hija
en otro paquete
En una clase no hija
en otro paquete

46 / 46

19 de marzo de 2013