L
ENGUAJEJ
AVAArreglos, paquetes, +clases…
A
RREGLOS Recordando: Un arreglo es una secuencia de datos
del mismo tipo. Los datos se almacenan en elementos del arreglo y se numeran
consecutivamente del 0,1,2,… n.
El tipo de elementos almacenados puede ser
cualquier tipo simple de Java o un objeto.
Al igual que con cualquier tipo de variable, un
arreglo se debe declarar antes de utilizarlo. Por ejemplo
int []v; float w[];
En Java, los corchetes se pueden colocar de dos formas:
A
RREGLOS Ambas declaraciones son equivalentes si se
refieren solo a una variable, sin embargo tienen diferentes implicaciones, cuando hay mas
variables involucradas, por ejemplo:
char cad[], p;
Indica que cad en un arreglo de tipo char y que p es
solamente una variable de tipo char Int [] v, w;
Indica que tanto v como w son arreglos unidimensionales de
tipo int.
A
RREGLOS Java no permite en la declaración de un arreglo
especificar el número de elementos, ya que los arreglos en java, son considerados objetos.
Para especificar el número de elementos se usa el
operador new.
float [] datos; //declaración
datos = new float[40]; //se crean 40 flotantes
o bien, en una sola línea
float datos = new float[40];
La sintaxis para declarar un arreglo es entonces:
A
TRIBUTO LENGTH Como comentábamos, Java considera cada
arreglo como un objeto, debido a esto se puede conocer su número de elementos accediendo a su atributo length.
5 import java.util.*;
class ej1 {
public static void main(String [] args) {
Scanner in = new Scanner (System.in);
int w[]= new int[10];
System.out.println(“Introduce “+w.length+“ datos: “); for(int = 0; i< w.length; i++)
w[i] = in.nextInt(); }
I
NICIALIZACIÓN DE ARREGLOS Muchas veces es útil tener un arreglo con valores
por default. Ejemplo
int numeros[] = { 10, 20, 30, 40, 50};
Automáticamente pone el atributo length a 5
char c[] = {‘H’ , ‘o’, ‘l’, ‘a’};
Define un arreglo de 4 caracteres
Nota: en Java, un arreglo de caracteres NO ES lo
mismo que una cadena (String)
A
RREGLOS V.
S. S
TRING Una cadena de texto es un conjunto de
caracteres,tales como “ABCDEF”. Java soporta cadenas de texto utilizando la clase String.
Los strings son objetos en los que se almacenan
las cadenas, tienen diversos constructores y métodos.
Una vez que un objeto String es creado e
inicializado con una cadena, no puede modificase. Los métodos definidos en String para concatenar, cambiar caracteres, etc. NO modifican la
cadenas, sino que devuelven un objeto String.
C
LASES
TRING Constructores (algunos)
String();
String (String str); String (char val[]);
String (char val[], int offset, int count);
Métodos (algunos)
int length() //obtiene el numero de caracteres
char charAt(int indice) (obtiene el carácter en la posición
indicada
Boolean equals(Object obj) //compara 2 cadenas
Boolean equalsIgnoreCase(Object obj) //ignora mayúsculas o
minúsculas
Int compareTo(String str2); String concat(String str); String toLowerCase(); String toUpperCase();
P
AQUETESE
IMPORT
Los paquetes (package) en Java son una forma de
agrupar clases (e interfaces) relacionadas en una sola biblioteca o colección.
El empaquetado es un mecanismo de modularización
que proporciona protección de acceso y administración de nombres en el espacio de trabajo.
Los paquetes facilitan la localización y uso de las
clases
Proveen flexibilidad en el control de acceso Ayudan a evitar conflictos en los nombres
P
AQUETEJ
AVA Las bibliotecas de clases del JDK están
contenidas en un paquete llamado java.
Las clases del paquete tienen garantía de
disponibilidad en cualquier implementación Java y son las únicas que también garantizan su disponibilidad para diferentes implementaciones.
Los paquetes tienen nombres que indican
jerarquía.
Para utilizar una clase en particular de algún
paquete, se tiene que referir a ella listando todos los paquetes donde está contenida esa clase, todo separado por puntos (.).
P
AQUETES PREDEFINIDOS Java proporciona paquetes predefinidos
java.lang - clases básicas del lenguaje java.util - clases para tipos de datos
Java.awt - clases para gráficas, textos,
ventanas (GUI`s Graphical User Interface)
Java.awt.images - procesamiento de imágenes Java.io - clases para E/S
Java.net - clases para redes
Java.applets - clases para implementar applets Javax.swing - clases gráficas swing
P
AQUETES Y ESPECIFICADORES DE ACCESO En Java un miembro se etiqueta como público
colocando el identificador public delante de su declaración
Para los miembros privados utilizaremos el
identificador private
Los miembros no etiquetados son accesibles por parte
de clases amigas.
En C++ y otros lenguajes OO las clases amigas a una clase
dada pueden indicarse explícitamente
En Java se consideran amigas todas aquellas que
forman parte del mismo paquete
Un archivo fuente java forma en sí un paquete y por
P
AQUETES Y ESPECIFICADORES DE ACCESO Las clases incluidas en varios archivos fuente pueden
agruparse en un único paquete indicando el nombre de paquete al principio de cada archivo mediante el indicador package
P
AQUETES Y ESPECIFICADORES DE ACCESO Todas las clases que no se declaren como
pertenecientes a algún paquete de forma explícita, pertenecen a un “paquete default por defecto” y por tanto son amigas
Un paquete crea un espacio de nombres propios.
Esto significa que la clase pasa a tener como
prefijo el propio nombre del paquete.
El resultado es una forma muy cómoda de
restringir el ámbito a "la familia".
P
AQUETES Y CARPETAS Un paquete puede estar situado dentro de otro paquete
formando estructuras jerárquicas. Ejemplo: miapp.prueba.A
Java obliga a que exista una correspondencia entre la
estructura de paquetes de una clase y la estructura de directorios donde está situada
La raiz de la estructura de directorios debe estar
incluida en el classpath de Java (parámetro cp <dir>)
Las clases miapp.prueba.A, miapp.prueba.B y miapp.C deben
estar en la siguiente estructura de directorios
A
CCEDIENDO A UN PAQUETE Para acceder a algún miembro de un paquete
(clase o interfase) se tienen las siguientes opciones:
Usar el nombre completo del identificador
(incluyendo el nombre del paquete)
Por ejemplo, si quisiéramos instaciar la clase Vector
incluida en el paquete java.util
java.util.Vector v = new java.util.Vector();
Importar una clase o interfase específica
La preposición import permite importar un miembro
en particular del paquete, de la siguiente forma:
I
MPORTANDO UNA CLASE Por ejemplo, supongamos que queremos usar las
clases Vector y Hashtable del paquete java.util, entonces haríamos lo siguiente:
import java.util.Vector;
import java.util.Hashtable; Vector v = new Vector();
Hashtable h = new Hashtable();
import le dice al compilador de java donde mirar
para “darse una idea” de lo que los nombres de las clases significan
import NO es #include.
I
MPORTANDO COMPLETO Importar todo del paquete
El import también nos permite importar todos los
miembros de un paquete. La forma de indicarlo es la siguiente:
import NombrePaquete.*;
Utilizándolo de esta forma, se puede acceder a
cualquier elemento del paquete sin necesidad de especificar su nombre
Ejemplo:
import java.util.*;
Vector v = new Vector();
Hashtable h = new Hashtable();
C
REANDOP
AQUETES Para crear un paquete, solo se debe poner la
clase o la interfase dentro de este.
Para hacer esto, se coloca la preposición
package en el tope (primer renglón) del
archivo en donde se esta definiendo la clase o interfase, de la siguiente forma:
Package Identificador[.Identificador...]
El nombre del paquete es una lista de
identificadores separados por punto.
Java reserva el nombre de paquete “java” para
sus clases de biblioteca.
PAQUETES
Ejemplos:
Package NombreDeMiPaquete; package FCC;
package FCC.ingenieria;
Debe existir un subdirectorio con el nombre del
paquete que contenga las clases e interfaces.
Toda clase o interfase que sea definida dentro de
un archivo con la preposición package está en el paquete.
Las clases que no estén incluidas explícitamente
en algún paquete, automáticamente son puestas en el paquete default, el cual es un paquete único
I
MPORTS ESTÁNDARES Java importa automáticamente algunos
paquetes
Un paquete default (las clases amigas)
Cualquier clase que no esta incluida en algún paquete,
automáticamente es puesta en el paquete default. Esta es la forma en que las diferentes clases que no están en algún paquete conocen unas de las otras.
El paquete java.lang (este paquete contiene
clases como String y System)
El nombre de la clase String es realmente
java.lang.String, pero por default se importa automáticamente todo el paquete, esto es
import java.lang.*;
TAREA
Investigar los objetos (métodos de clase y de
instancia que manejan). Equipos de 2, enviar su presentación el viernes por la mañana con un ejemplo ilustrativo.
Object System Class
Integer Character Double
Float Vector
C
LASEO
BJECT Todas las clases Java son derivadas o subclases
de la clase raiz Objet.
Si la clausula extends es omitida en alguna
declaración entonces esa clase tiene como superclase inmediata a la clase Objet.
boolean equals(Object obj) // compara dos
instancias para ver igualdad de sus componentes
Class getClass() // regresa el objeto Class para el
objeto actual.
String toString() // regresa una cadena que
representa los valores de las variables de
M
ÉTODOS DE LA CLASEO
BJETC ToString: Devuelve un valor de tipo String listo
para imprimirse
Este método debe ser redefinido en cada clase
Por ejemplo
// dar formato a la fecha public String ToString() {
return dia + “/” + mes + “/” + año; }
Si se tiene un objeto Fecha (fecha1) se invoca como: fecha1.toString();
o
System.out.println(fecha1); //invoca automáticamente
M
ÉTODOS DE LA CLASEO
BJETC Equals: El método equals se usa para comparar si dos
referencias describen el mismo valor
(ojo: es diferente que ==)
Su definición es la siguiente:
public boolean equals (Objet lder)
Será true solo cuando lder sea una instancia de la Clase y todos sus atributos primitivos sean iguales (componente a componente)
Ejemplo:
public boolean equals(Objet lder) { if (!(lder instanceof Fecha)) return false;
Fecha lderFecha = (Fecha) lder;
return (ldeFecha.dia == dia && lderFecha.mes == mes && lderFecha.año == año);
}
C
LASES
YSTEM Métodos clase
static void exit (int code)
Ejemplo exit(0) //termina la ejecución de un programa
static void arraycopy( Object fuente,
int indiceFuente,Object destino, int indiceDestino, int
tamaño)
C
LASEC
LASS Encapsula información de una clase o interface. String getName() //regresa el nombre de la clase
Class getSuperclass() //regresa el objeto Class para la
superclase
static Class forName(String clsName) throws
ClassNotFoundException //regresa el objeto Class para la clase nombrada.
29
class ClaseEntero{
public static void main(String args[ ]) { Integer obj = new Integer(8);
Class cls = obj.getClass( );
System.out.println(cls); // Salida: class java.lang.Integer
C
LASEC
HARACTER Constructor
Character(char c)
Métodos de clase
boolean static isDigit(char c) boolean static isLetter(char c)
boolena static isLowerCase(char c)
boolean static isSpaceChar(char c) boolean static isUperCase(char c) char static toLowerCase(char c)
char static toUpperCase(char c)
Método de instancia
char charValue()
C
LASEI
NTEGER Constructor
Integer(int i) Integer(String s)
Métodos de clase
Static String Integer.toString( int i,int base ); Static String Integer.toString( int i );
Static int Integer.parseInt( String s,int base ); Static int Integer.parseInt( String s );
Static Integer Integer.valueOf(String s,int base ); Static Integer Integer.valueOf( String s );
Métodos de instancia
int I.intValue(); float I.floatValue();
double I.doubleValue(); String I.toString();
C
LASEF
LOAT Constructor Float(float f) Float(double f)
Float(String s) throws NumberFormatException Métodos clase
static boolean isNaN(float f)
static Float valueOf(String s) throws
NumberFormatException
Método instancia byte byteValue( )
double doubleValue( ) float floatValue( )
int intValue( ) long longValue( ) short shortValue( )
C
LASED
OUBLE Constructor
Double(double d)
Double(String s) throws NumberFormatException Métodos clase
static boolean isNaN(double d)
static Double valueOf(String s) throws
NumberFormatException
Método instancia byte byteValue( )
double doubleValue( ) float floatValue( )
int intValue( ) long longValue( ) short shortValue( )
C
LASEV
ECTORObject elementAt(int index) para acceder elementos int capacity( ) regresa la capacidad
actual del vector
int size( ) regresa el número de
objetos en el vector boolean contains(Object obj) prueba si el vector
contiene un objeto boolean isEmpty() Prueba si el vector es
vacío Object firstElement( ) y
Object LastElement( )
Obtiene el primero y el
último respectivamente 34
La clase Vector extiende la clase Object e implementa
las interfaces Cloneable y Serializable.
Además define métodos para inserción, eliminación y
C
LASEV
ECTORvoid addElement(Object obj) Añade un objeto al final del vector int indexOf(Object obj) Busca la primera ocurrencia de un
objeto
int indexOf(Object obj, int start) Busca la primera ocurrencia de un objeto dentro de un vector a partir de un índice
int lastIndexOf(object obj) Busca la última ocurrencia de un objeto dentro de un vector
void insertElementAt(Object obj, int
index) Inserta un objeto en un vector mediante un índice y se incrementa en uno el tamaño de dicho vector
void setElementAt(Object obj, int index) Coloca el elemento especificado del vector con un objeto
C
LASEV
ECTORvoid removeAllElements( ) vacía el vector (limpia el vector)
boolean removeElement(Object obj) Borra la primera ocurrencia del objeto
void removeElementAt(int index) Borra el elemento del vector en la posición index
void setSize(int nuevoTamaño) Cambia el tamaño del vector, añadiendo referencias nulas
Enumeration elements( ) Regresa una enumeración de los objetos
E
JEMPLOV
ECTOR37
import java.util.Vector;
class Cliente { String nombre; String Direccion; String Telefono;
Cliente(String n, String d, String t) { //constructor nombre=n;
Direccion=d; Telefono=t; }
} //termina clase Cliente
class VectorClientes extends Vector {
public void AgregarCliente(Cliente c) { addElement(c); } public void InsertarClienteEn(Cliente c, int i) {
E
JEMPLOV
ECTOR...
38
public Cliente PrimerCliente( ) {
return (Cliente) firtElement( ); }
public Cliente UltimoCliente( ) {
return (Cliente) lastElement( ); }
} //termina clase VectorClientes
public static void main( String[ ] args) {
Cliente cliente1=new Cliente(“Elías”, “Cuernavaca”, “3183811”);
VectorClientes clientes = new VectorClientes( ); clientes.AgregarCliente(cliente1);
Cliente x = clientes.PrimerCliente( ); }
C
LASES
TRINGT
OKENIZER En algunos casos puede haber más de un
elemento (token) en la misma línea. Por ejemplo, una línea que contiene dos valores de tipo int.
Esta clase permite separar en tokens (elementos)
una cadena
Para usarlo debemos emplear
Import java.util.*;
Permite analizar una cadena.
C
LASES
TRINGT
OKENIZER Puede especificarse el carácter que actua como
separador entre elementos
StringTokenizer(String str)
StringTokenizer(String str, String del)
Implementa la interface Enumeration
Métodos
int countTokens( ) // Devuelve el número de tokens
boolean hasMoreTokens( )
String nextToken( ) //Devuelve el siguiente token como
un string
String nextToken(String delimiters)
E
JEMPLOS
TRINGT
OKENIZERimport java.io.*; import java.util.*;
public class Maxtest {
public static void main(String [] args) { BufferedReader in =
newBufferedreader(new InputStreamReader (system.in ) );
String UnaLinea; String Tokenizer str; Int x;
Int y;
System.out.printl("Introduzca 2 enteros en una misma línea:
E
JEMPLOS
TRINGT
OKENIZERTry {
unaLinea = in.readLine ( );
str = new StringTokenizer ( unaLinea); if (str.countTokens ( ) != 2)
throw new NumberFormatException ( ); x = Integer.parseInt(str.nextToken( ) );
y = Integer.parseInt(str.nextToken( ) );
System.out.printl("Max: " + Math.max(x, y) )); }
Catch (Exception e)
{ System.err.printl(" Error: se necesita dos enteros" ); } }
}