Download Fundamentos del Lenguaje de Programación Java

Document related concepts
no text concepts found
Transcript
Fundamentos del Lenguaje
de Programación Java
M.C. Jorge Eduardo Ibarra Esquer
[email protected]
El lenguaje Java
†
†
†
†
†
†
†
Estándares de
codificación
Comentarios
Programas con Java
Identificadores
Palabras clave
Tipos de datos
Literales
†
†
†
†
†
Variables
Arreglos
Enumeraciones
Operadores
Sentencias de control
de flujo
1
Estándares de codificación
¿Por qué tener estándares para la codificación?
Aproximadamente 80% del costo de una pieza de
software se debe al mantenimiento
† Difícilmente un mismo software es mantenido
durante toda su vida útil por un mismo programador
† Facilitan la lectura del código
†
Estándares de codificación
Los estándares definen:
Nombres de los archivos
† Organización de los archivos
† Indentación
† Uso de comentarios
† Declaraciones de variables, clases e interfaces
† Sintaxis de las diferentes sentencias
† Uso de espacios en blanco
† Nombres de clases, variables y métodos
†
2
Comentarios en Java
Los comentarios pueden ser de dos tipos
† Comentarios de implementación
„
„
†
// Comentario en una línea
/* Comentario de varias líneas */
Comentarios de documentación
„
/** Estos comentarios se convierten a HTML con
la herramienta Javadoc */
Programas en Java (J2SE)
Se pueden generar dos tipos de programas:
Aplicaciones independientes (Standalone)
„ Cuentan con un método main()
„ Se ejecutan utilizando el intérprete de Java
† Applets
„ Se ejecutan en un navegador, incrustados
dentro de una página Web
†
3
Aplicaciones independientes
Todos los programas en Java se declaran como una
clase
public class HolaGalaxia {
public static void main(String[] args) {
System.out.println("Hola Galaxia");
}
}
La clase debe guardarse en un archivo con su mismo
nombre y la extensión .java
Compilar
Una vez creada una clase, ésta debe compilarse,
para eso ejecutamos:
„
javac HolaUniverso.java
Nombre del
compilador
de Java
Nombre de la
clase a
compilar
La clase debe compilarse en el directorio en el que
se encuentra
Se recomienda incluir en la variable de ambiente
PATH la ruta de los ejecutables de Java, p. ej.
C:\Archivos de programa\Java\jdk1.5.0_06\bin
4
Variables de entorno recomendadas
JAVA_HOME="C:\Archivos de programa\Java\jdk1.5.0_06“
CLASSPATH=.;"C:\Archivos de
programa\Java\jdk1.5.0_06\lib\comm.jar";"C:\Archivos de
programa\Java\jdk1.5.0_06\lib\mysql-connector-java-3.1.7bin.jar“
PATH=%JAVA_HOME%/bin
Ejecución de un programa
Al compilar una clase, se genera un archivo
con su mismo nombre y la extensión .class
Para ejecutarla, se invoca al intérprete de Java,
seguido del nombre de la clase:
„
java HolaGalaxia
Esta clase debe contener el método main()
5
Identificadores
Los nombres de clases, métodos y variables
pueden formarse por cualquier combinación de
los siguientes caracteres:
Letras
„ Números
„ Carácter de subrayado ‘_’
„ Carácter $
„ No pueden empezar con un número
„
Ejemplos de identificadores
„
Clases
† Figura
† FiguraSombreada
„
Métodos
† busca()
† buscaPersona()
„
Variables
† area
† areaComun
6
Palabras clave en Java
abstract
assert3
continue
default
for
goto1
new
package
switch
synchronized
boolean
break
do
double
if
implements
private
protected
this
throw
byte
case
else
enum4
import
instanceof
public
return
throws
transient
catch
char
class
extends
final
finally
int
interface
long
short
static
strictfp2
try
void
volatile
const1
float
native
super
while
1
No se utiliza
2
Agregada en la versión 1.2
3
Agregada en la versión 1.4
4
Agregada en la versión 1.5
Palabras clave en Java
†
Tipos de datos
„
„
„
„
„
„
„
„
„
boolean
byte
char
double
float
int
long
short
enum
†
Valores
„
„
„
„
true
false
null
void
7
Palabras clave en Java
†
Control de flujo
„
„
„
„
„
„
„
„
„
„
„
break
case
continue
default
do
else
for
if
return
switch
while
†
Manejo de errores
„
„
„
„
†
catch
finally
throw
try
Control de acceso
„
„
„
„
„
„
final
private
protected
public
static
synchronized
Palabras clave en Java
†
Declaraciones
„
„
„
„
„
„
„
„
„
„
„
„
abstract
class
extends
implements
import
interface
new
package
super
this
transient
volatile
†
Otras
„
„
„
instanceof
native
strictfp
8
Tipos de datos primitivos
Tipo
Tamaño y formato
Rango
Enteros
byte
8 bits - complemento a 2
short
16 bits - complemento a 2
int
32 bits - complemento a 2
long
64 bits - complemento a 2
-
Números reales
float
32 bits - IEEE 754
double
64 bits - IEEE 754
Otros
char
16 bits - caracteres UNICODE
'\u0000' al '\uffff'
boolean
1 bit
true o false
Datos tipo char
†
†
Utilizan el estándar Unicode para la
representación de caracteres
Se pueden manejar como si fueran enteros
„
„
char ch1=‘Y’;
char ch2=89;
9
Secuencias de escape para
representación de caracteres
\n -----> Salto de línea
\t -----> Tabulador
\r -----> Retroceso de Carro
\f -----> Comienzo de Pagina
\b -----> Borrado a la Izquierda
\\ -----> El caracter "\"
\' -----> El carácter ‘ ‘ ‘
\" -----> El caracter ‘ ” ’
\uxxxx -> Caracteres Unicode (hexadecimal)
Datos tipo boolean
†
†
†
Es el tipo utilizado para representar valores
lógicos
Es el tipo requerido por las expresiones
condicionales que gobiernan las sentencias de
control
Es el tipo que devuelven los operadores
relacionales
10
Literales
†
Un valor constante en Java se crea
mediante una representación literal
235
†
125.32
“Mensaje”
Literales enteros
1
2
‘X’
Decimales
3
01
0x1
02 Octales
0x2
03
0x3
Hexadecimales
Para indicar que un valor es de tipo long, al final se agrega
una ‘L’ :
345L
Literales
†
Literales de números reales
„
„
Se utiliza el punto decimal o la notación científica
Por default se utiliza la precisión double
10000.00
2000.00
300.00
Notación
normal
1.0e+4
2.0e+3
Notación
científica
3.0e+2
11
Literales
†
Literales char
„
Almacenan caracteres Unicode
†
†
†
Literales booleanas
„
†
‘z’;
‘\u0040’
Tienen dos valores: true y false
Literales de cadenas
„
Los valores se encierran entre comillas dobles
†
“Cadena de caracteres”
Variables
†
†
†
Son la unidad básica de almacenamiento en
un programa
Se definen mediante un identificador, un tipo
y un inicializador opcional
Todas las variables tienen un ámbito que
define su visibilidad y tiempo de vida.
12
Variables
int a;
int a=3;
int a,b;
int a=3,b;
char c;
char c=‘a’;
long a;
long a=3L;
double d;
double d=3.9;
boolean b;
float f;
float f=3.9F;
double d=3.9D;
byte b=100;
boolean b=true;
boolean b=false;
Variables
†
Las variables se pueden inicializar de manera
dinámica
int a=3,b=4;
int c=a*b;
†
Las variables sólo existen dentro del bloque
en el que se declaran. Un bloque define el
ámbito de la variable.
13
Arreglos
†
Un arreglo es un grupo de variables del
mismo tipo al que se hace referencia por
medio de un nombre común
†
Para acceder a un elemento dentro de un
arreglo se utilizan sus índices
Arreglos
†
Un arreglo unidimensional se declara de la
siguiente forma:
„
„
†
tipo nombre[ ];
tipo[ ] nombre;
Solamente se está declarando el nombre y
tipo del arreglo, aún no se reserva el espacio
en memoria para su existencia
Para reservar la memoria para el arreglo, se
utiliza el operador new
„
„
tipo[ ] nombre = new tipo[tamaño];
int diasMes[ ] = new int[12];
14
Arreglos
†
†
Al crear un arreglo, todos sus elementos se
inicializan a cero.
Los arreglos se pueden inicializar en la
declaración
„
int diasMes[]={31,28,31,30,31,30,31,31,30,31,30,31};
„
En este caso no es necesario utilizar el operador
new
Java comprueba que no se puedan referenciar
valores fuera del rango del arreglo
„
Arreglos multidimensionales
†
Se pueden considerar arreglos de arreglos
„
int matriz[][]=new int[4][3];
[0][0]
[0][1]
[0][2]
[1][0]
[1][1]
[1][2]
[2][0]
[2][1]
[2][2]
[3][0]
[3][1]
[3][2]
matriz[][]=
15
Arreglos multidimensionales
†
Solo es necesario especificar el espacio
necesario para la primera dimensión del
arreglo
„
†
int matriz[][]=new int[4][];
El espacio para el resto de las dimensiones se
reserva posteriormente, de manera manual
„
„
„
matriz[0]=new int[3];
matriz[1]=new int[3];
Etc.
Arreglos multidimensionales
†
En estos casos, no es necesario reservar el
mismo espacio para cada arreglo
„
„
„
„
matriz[0]=new int[1];
matriz[1]=new int[2];
matriz[2]=new int[3];
matriz[3]=new int[4];
[0][0]
[1][0]
[1][1]
[2][0]
[2][1]
[2][2]
[3][0]
[3][1]
[3][2]
[3][3]
16
Arreglos multidimensionales
†
Un arreglo multidimensional se puede
inicializar al momento de declararlo
„
int matriz3x3={
{0,1,2},
{3,4,5},
{6,7,8}
};
†
Otros casos
„
int matriz3Dim[][][]=new int[3][4][5];
Enumeraciones
†
†
†
En su forma más simple, una enumeración es
una lista de constantes
El soporte a enumeraciones se incorporó a
Java a partir de la versión 1.5
Una enumeración se crea utilizando la palabra
clave enum
„
enum Dias{Lunes, Martes, Miércoles, Jueves, Viernes}
17
Enumeraciones
†
Una vez que se ha definido una enumeración,
se pueden crear variables de ese tipo:
„
†
Dias unDia=Dias.Miércoles;
Métodos de las enumeraciones:
„
„
public static enum-type[ ] values( )
public static enum-type valueOf(String str)
Operadores
†
†
†
Un operador realiza una función, toma uno o
más argumentos y devuelve un resultado
En Java, los operadores se dividen en
aritméticos, a nivel de bit, relacionales y
lógicos
La mayoría de los operadores en Java
funcionan igual que en C/C++
18
Operadores aritméticos
Operador
Resultado
Operador
Resultado
+
Suma
+=
Suma y asignación
-
Resta
=
Asignación
*
Multiplicación
*=
Multiplicación y
asignación
/
División
/=
División y asignación
%
Módulo
%=
Módulo y asignación
++
Incremento
--
Decremento
Operadores aritméticos
†
†
†
†
Los operandos deben ser de tipo numérico
Se pueden aplicar al tipo char
El operador módulo se puede aplicar tanto a
operandos de tipo entero como flotante
El operador de resta también se utiliza para
negar a su operando
19
Operadores a nivel de bit
Tipo
Lógicos
De desplazamiento
Operador
Resultado
~
NOT
|
OR
&
AND
^
XOR
<<
Izquierda
>>
Derecha (con signo)
>>>
Derecha (sin signo)
Los operadores de desplazamiento también tienen una versión con asignación
Operadores relacionales
Operador
Resultado
==
Igualdad
!=
Desigualdad
>
Mayor que
<
Menor que
>=
Mayor o igual
<=
Menor o igual
• Los operadores
relacionales dan como
resultado un booleano
• Su aplicación más
frecuente es en la
obtención de expresiones
de control para las
sentencias if y los ciclos
20
Operadores lógicos booleanos
Operador
Resultado
Operador
Resultado
&
AND
&=
AND con asignación
|
OR
|=
OR con asignación
^
XOR
^=
XOR con asignación
||
OR
==
Igual a
&&
AND
!=
Diferente de
!
NOT
?:
if-then-else
Operadores lógicos booleanos
„
if (exp1 & exp2)
†
„
if (exp1 && exp2)
†
„
Ambas expresiones se evalúan, independientemente
de su valor
La segunda expresión sólo se evalúa si la primera es
verdadera
if (exp1 || exp2)
†
La segunda expresión sólo se evalúa si la primera es
falsa
21
Descripción
Operadores
operadores posfijos
op++ op--
operadores unarios
++op --op +op -op ~ !
multiplicación y división
*/%
suma y resta
+-
desplazamiento
<< >> >>>
operadores relacionales
< > <= =>
equivalencia
== !=
operador AND
&
operador XOR
^
operador OR
|
AND booleano
&&
OR booleano
||
condicional
?:
operadores de asignación
= += -= *= /= %= &= ^= |= <<= >>= >>>=
El método printf()
†
†
A partir de la versión 1.5 del JDK, Java
introduce el método printf().
Este método funciona de manera similar al de
C/C++
„
System.out.printf(“El valor %d es %6.2f”,num,valor);
22
Sentencias de control de flujo
†
Sentencias de selección
„
if
†
†
†
Sintaxis idéntica a C/C++
if (condición) sentencia;
if (condición){
sentencia1;
sentencia2;
…
}
else{
sentencia3;
sentencia4;
…
}
if (condición)
sentencia1;
else if (condición)
sentencia2;
else if (condición)
sentencia3;
…
else
sentenciaN;
Sentencias de control de flujo
†
switch
„
Es una alternativa a una larga serie de if-else-if
switch(expresión){
case valor1:
sentencias;
break;
case valor2:
sentencias;
break;
…
case valorN:
sentencias;
break;
default:
sentencias;
}
• La expresión debe ser del tipo byte, short, int,
char o enum
• Los valores especificados deben ser constantes
y no pueden duplicarse
• Si no se incluye “break” la ejecución continúa
en el siguiente case
• El bloque “default” es opcional
23
Sentencias de control de flujo
†
Sentencias de iteración (bucles o ciclos)
„
Se tienen tres tipos:
†
†
†
„
for
while
do-while
A partir de la versión 1.5 del JDK, se introdujo
una versión del ciclo for del tipo for-each
Sentencias de control de flujo
†
while
„
„
Una sentencia o bloque se repite mientras la
condición asociada sea verdadera
Su forma general es:
while(condición)
sentencia;
while(condición){
sentencia;
sentencia;
…
}
24
Sentencias de control de flujo
†
do-while
„
Su forma general es:
do{
sentencia;
sentencia;
…
} while(condición);
Sentencias de control de flujo
†
for
„
Su forma general es:
for(inicialización; condición; iteración)
sentencia;
for(inicialización; condición; iteración){
sentencia;
sentencia;
…
}
25
Sentencias de control de flujo
†
Ciclos for-each
„
„
Este tipo de ciclo está diseñado para recorrer una
colección de objetos, como es el caso de un
arreglo, de principio a fin y de una manera
estríctamente secuencial.
La forma general de este ciclo es:
for(tipo variableIteracion : objetoIterable)
bloque de sentencias;
Sentencias de control de flujo
†
Ciclos for-each
„
Ejemplos de uso de estos ciclos son:
int nums[]={1,2,3,4,5};
int sum=0;
enum Vocales[]={A,E,I,O,U};
for(Vocales v: Vocales.values( ))
System.out.println(v);
for(int x: nums)
sum+=x;
int matriz[][]={…..};
for(int x[]:matriz){
for(int y:x)
System.out.print(y+" ");
System.out.println();
}
26
Sentencias de control de flujo
†
Sentencias de salto
„
break
†
Tiene tres usos:
1. Finalizar una secuencia de sentencias en un switch
2. Salir de un ciclo
3. Como una forma de goto, para salir de un bloque
de sentencias etiquetado
Sentencias de control de flujo
†
Sentencias de salto
„
continue
†
„
Se utiliza para:
1. Forzar una nueva iteración de un bucle sin haber
concluido la actual
2. Como una forma de goto, para forzar la repetición
de un ciclo etiquetado
return
†
Se utiliza para salir explícitamente de un método y
regresar al método desde el que se hizo la llamada
27