Vous êtes sur la page 1sur 26

Taller Java

Sesin 2: Referencias
[14 de Marzo del 2013]

Referencias
Todos los tipos que no sean primitivos sern
de tipo referencia, incluyendo las cadenas
de caracteres, vectores de objetos y canales
de E/S.
En este captulo veremos:
Qu es un tipo referencia.
En qu se distinguen los tipos referencia de los
tipos primitivos.
Ejemplos de tipo referencia.

Referencia
Definicin: variable que guarda la direccin de
memoria donde se almacena un objeto.
Diferencia con punteros C: Java no permite
acceder al espacio de direcciones, slo a la
informacin del objeto que se est referenciando.
En Java la gestin de la memoria es automtica
(mediante Hilos recolectores de basura).
Ventaja: libera al programador de la gestin de
memoria. Muchas veces causa de errores.
Desventaja: el programador pierde control sobre la
gestin de memoria.

Ejemplo
Clase Punto.java

clase Punto {
private double x;
private double y;
public Punto(double x,double y) {
this.x=x;
this.y=y;
}
}

clase Punto {
private double x;
private double y;
public Punto(double x,double y) {

1000

(0.0,0.0)

1024

(5.0,12.0)

this.x=x;
this.y=y;
}
}
Punto punto1=new Punto(0.0,0.0);
Punto punto2=new Punto(5.0,12.0);

3200

punto2 = 1024

3600

punto1 = 1000

clase Punto {
private double x;
private double y;
public Punto(double x,double y) {

1000

(0.0,0.0)

1024

(5.0,12.0)

this.x=x;
this.y=y;
}
}
Punto punto1=new Punto(0.0,0.0);
Punto punto2=new Punto(5.0,12.0);

3200

punto2 = 1024

3600

punto1 = 1000

clase Punto {
private double x;
private double y;
public Punto(double x,double y) {

1000

(0.0,0.0)

1024

(5.0,12.0)

this.x=x;
this.y=y;
}

3200

punto2 = 1024

3600

punto1 = 1000

5124

punto3 = 1000

}
Punto punto1=new Punto(0.0,0.0);
Punto punto2=new Punto(5.0,12.0);
Punto punto3=punto1;

Como lo almacena Java


clase Punto {
private double x;
private double y;
public Punto(double x,double y) {

1000

(0.0,0.0)

1024

(5.0,12.0)

this.x=x;
this.y=y;
}

3200

punto2 = 1024

3600

punto1 = 1000

5124

punto3 = 1000

}
Punto punto1=new Punto(0.0,0.0);
Punto punto2=new Punto(5.0,12.0);
Punto punto3=punto1;
punto1

(0.0,0.0)

punto2

punto3

(5.0,12.0)

Como debis verlo!!

Referencias
En Java no esta permitido la suma de
referencias, incrementar referencias, etc.
Los nicos operadores permitidos para
manipular los tipos referencia (con la nica
excepcin de la clase String) son las
asignaciones va signo de igual (=) y las
comparaciones de igualdad (==, !=).

punto1

punto2

(0.0,0.0)

punto3

punto1

(5.0,12.0)

punto2

(0.0,0.0)

antes

despus
punto3=punto2
punto3 == punto2  s
punto3 != punto2  no
//Declaracin sin referencia
Punto punto4;  punto4=null;
punto4 == null  s
punto4 != null  no

punto3

(5.0,12.0)

Nociones bsicas sobre objetos y


referencias
En java, un objeto es un elemento de cualquiera de
los tipos no primitivos.
Tipos primitivos se manipulan por valor.
Objetos se manipulan por referencia.

Un objeto se almacena en alguna parte de la


memoria y siempre habr una variable que lo
apunta (guarda la direccin).
Cuando un objeto no esta apuntado por ninguna
referencia entonces el recolector de basura libera
el espacio de ese objeto  gestin automtica de
memoria.

Operador punto
clase Punto {
private double x;
public double y;
public Punto(double x,double y) {
this.x=x;
this.y=y;
}
public double getX() { return x; }
public double getY() { return y; }
}

El operador punto (.) se emplea para seleccionar


un mtodo o un atributo y aplicarlo a un objeto
//Incorrecto
Punto1.x; //no se puede acceder por x es privado
//Correcto
punto1.getX()
//Correcto
punto1.y; //porque es pblico
//Correcto
punto1.y
NORMA NO ESCRITA DE OO:
Los atributos deben ser privados con
mtodos de acceso pblicos.

Declaracin de Objetos
La forma de declarar un objeto es emplear
la palabra reservada new.
new se utiliza para construir un nuevo
objeto:
Punto punto1=new Punto(5.0,2.0);
punto1.getX();

Cadenas de caracteres
Clase String

Clase String
Las cadenas de caracteres se manejan en
Java con la clase String.
Un excepcin curiosa en Java es que el
operador + esta sobre cargado en esta clase.
Por ejemplo:
String cadena=a, cadena2=b;
cadena3 = cadena+cadena2; //cadena3=ab)
cadena3+=c; //cadena3=abc

Clase String
Por lo dems se comporta como un tipo no
primitivo.
String cadena=a,
memoria

a
cadena

Clase String
Qu podemos hacer con las cadenas?
Crearlas:
String c1=a;
String c2=new String(b);

Concatenarlas:
String c3=c1+c2;

Compararlas:
c1.equals(c2)  false
c1.equals(c1)  true

Convertirlas:
Integer.parseInt(cadena); //pasa cadena a entero
Double.valueOf(cadena).doubleValue(); //pasa cadena a double

Vectores
[ ] ; [ ][ ]

Vectores
Un vector es un artefacto que poseen los lenguajes
de programacin para almacenar una coleccin de
entidades del mismo tipo.
En Java los vectores se comportan igual a un
objeto.
A cada entidad del vector se accede mediante el
operador de indexacin de vectores [ ].
Decimos que el operador [ ] indexa el vector en el
sentido de que especifica qu objeto debe ser
accedido.

Vectores
Declaracin:
int [ ] vector1 = new int [100];
int [ ] vector2 = { 1, 2, 3 };

Asignacin:
vector1[0]=1; vector[1]=2; vector1[2]=3;
El ndice va desde i=0 hasta i=n-1, siendo n la
longitud del vector a la que puede accederse
mediante vector1.length (por ejemplo)

Vectores
int[ ]vector=new int[5];
int nVector=vector1.length;
for ( int i=0 ; i < nVector ; i++ ) {
vector[i]=i;
System.out.println(vector[i]);
}
Salida: 0, 1, 2, 3, 4

Vectores Multidimensionales
En algunas ocasiones es necesario acceder a
un vector a travs de varios ndices.
Un ejemplo tpico son las matrices.
Una matriz es un vector donde el acceso se
realiza por ms de un ndice.
int [ ] [ ] matriz = new int [ 2 ] [ 3 ];

Argumentos de la lnea de comandos


Los argumentos de la lnea de comandos
aparecen cuando examinamos los
parmetros del main ``String [] args.
El vector de cadenas de caracteres
representa los argumentos adicionales de la
linea de comandos.
$> java Programa este aquel
args[0]=este, args[1]=aquel

Argumentos de la lnea de comandos


Ejemplo:
public class Eco {
public static void main (String [] args) {
for ( int i=0; i < args.length 1 ; i++ ) {
System.out.print(args[i] + );
}

}
Salida: este aquel

Bibliografa
Lesson: Language Basics en
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/index.html

M.A. Weiss. Estructuras de Datos en Java.


Addison Wesley.