Download 3.3 Conceptos Básicos del Lenguaje Java Variables, Constantes y

Document related concepts
no text concepts found
Transcript
05/04/2004
3.3 Conceptos
Básicos del Lenguaje
Java
Conjunto de Caracteres
l
l
l
Java utiliza Unicode, un conjunto de
caracteres de 16 bits
Java permite leer ASCII de 7-bit o Latin-1,
conviertiéndolo a Unicode
Son pocos los editores actuales que soportan
Unicode
l
Identificadores
l
l
l
l
l
l
l
Letras en Unicode es un concepto más amplio
Son válidos: Árbol, Hähnchen, etc.
l
l
Se diferencia mayúscula de minúscula
l
l
Palabras Resevadas
Deben comenzar con una letra, incluido _ o
$, seguido de letras o dígitos
l
l
árbol es diferente a Árbol
l
l
Java define algunas palabras reservadas que
no pueden ser usadas como identificador
l
l
l
Variables, Constantes
y Tipos Primitivos
Se puede usar su código en formato \udddd,
donde d es un dígito hexadecimal
abstract
boolean
break
byte
case
catch
char
class
const
continue
default
do
l
l
l
l
l
l
l
l
l
l
l
l
double
else
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
package
private
protected
public
return
short
static
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while
Variable
l
l
Una variable es un item de datos nombrado
por un identificador
Una variable tiene un tipo, que debe ser
declarado antes de su uso (como en C)
l
l
tipo variable
Una variable tiene un ámbito (scope),
definido por la visibilidad que tiene la variable
en el programa
1
05/04/2004
Tipos de Datos
l
l
l
l
Descripción
Entero de un byte
Entero corto
Entero
Entro largo
Punto flotante de
precisión simple
double Punto flotante de
precisión doble
char
Caracter
boolean Booleano
Primitivos. Contiene un único valor de tamaño y formato
apropiado (e.g. Entero, real, booleano, etc.)
Referencias. Es una dirección a un conjunto de valores
(e.g. Arreglo, clase e interfaz)
Las direcciones son implícitas, dado que Java no
soporta punteros
Cada tipo primitivo (excepto short y byte)
tiene una clase declarada en el paquete
java.lang
Constantes declaradas:
l
l
l
l
l
l
l
l
MIN_VALUE y MAX_VALUE
NEGATIVE_INFINITY y POSITIVE_INFINITY
NaN (Not a Number)
l
l
l
Constantes Literales
l
l
l
l
l
l
l
l
178
178L
045
0X45df
Entero
Largo
octal
Hexadecimal
345.125
234.12D
234.12F
23.7e-4
doble prec.
doble prec.
simple prec.
doble prec.
l
l
l
64 bits, IEEE 754
16 bits, Unicode
(true y false)
178
178L
345.125
234.12D
234.12F
23.7e-4
´c´
true
Entero
Largo
doble prec.
doble prec.
simple prec.
doble prec.
caracter
booleano
Declaración de Variables
l
l
Largo/Formato
8 bits, C-2
16 bits, C-2
32 bits, C-2
64 bits, C-2
32 bits, IEEE 754
Constantes de Datos
Primitivos
Más sobre Datos Primitivos
l
Tipo
byte
short
int
long
float
Un tipo define los posibles valores para una variable
Java define dos categorías de tipos de datos:
l
l
Tipos de Datos Primitivos
´c´
\n
\u8f4d
true
carácter
nueva línea
Unicode
booleano
l
[modificador] tipo variable {, variable}*
Modificador es opcional
l
l
l
l
l
Posibles modificadores: static o final
static sólo se puede usar en campos (fields)
Ejemplo:
float[]
x, y;
Declaraciones pueden aparecer en cualquier parte
del código
La visibilidad de una variable se limita al bloque en
que se declara
2
05/04/2004
Orden de Resolución de
Nombres
l
l
l
l
l
l
l
Declaración local a un bloque (e.g. Loop)
Parámetro de un constructor o método
Un miembro de una clase o interfaz
Tipos explícitamente importados
Otros tipos declarados en el mismo paquete
Tipos importados implícitamente nombrados
Paquetes disponibles en el sistema host
Valores Iniciales
l
l
Una variable se puede inicializar en su declaración
Ejemplo:
l
l
l
l
l
final double
π = 3.14159;
Java asigna valores por omisión a los campos de
una clase si no se especifica
Corresponde a valor 0 o null
Variables locales de un método, constructor o
inicializador estático no se inicializan
Una variable se inicializa cada vez que se ejecuta
su declaración
Precedencia y Asociatividad
de Operadores
Operadores
l
l
l
l
A igual precedencia, se asocia por la izquierda,
excepto asignación que es por la derecha
La precedencia se pueda cambiar usando
paréntesis
Para legibilidad se recomienda usar paréntesis,
cuando sea posible, de manera de hacer explícita la
precedencia, sin exagerar
Ejemplo:
while ((v = stream.next()) != null)
procesar(v);
Unario posfijo
[] . (param) ++ --
Unario prefijo
Creación y cast
Multiplicativo
Aditivo
Shift
Relacional
Igualdad
++ -- + ~ !
new (tipo) exp
* / %
+ << >> >>>
< > >= <= instanceof
== !=
Precedencia de Operadores
(2/2)
l
Menor precedencia
Menor precedencia
Precedencia de Operadores
(1/2)
l
l
l
l
l
l
AND al bit
OR exclusivo al bit
OR inclusivo al bit
AND lógico
OR lógico
Condicional
Asignación
&
^
|
&&
||
?:
= += -= *= /= %=
>>= <<= >>>= &=
^= |=
3
05/04/2004
Expresiones
l
Una expresión se evalúa de izquierda a derecha
l
l
l
Conversión de Tipo: Implícita
l
Orden puede ser importante cuando existen efectos
laterales o corto-circuito
l
l
l
En general domina el operando de mayor rango de valores
(e.g. double + long → double)
Conversión de Tipo: Explícita
l
l
l
Se requiere cuando un tipo no se puede asignar
a otro por conversión implícita
La conversión explícita se denomina cast
Ejemplo:
l
Se puede usar para referencias a objetos con
conversión no segura
Operador instanceof permite verificar se se
puede aplicar cast a un objeto
No se permite de punto flotante a entero
En la conversión se puede perder precisión
Referencias. Una referencia a un objeto de una clase
incluye una instancia de cada supertipo
l
Se puede usar una referencia a un objeto de un tipo
cuando se requiera una referencia a un supertipo
Operadores Aritméticos
l
Se soporta para todos los tipos de números
l
l
l
double d = 7.99; long l = (long) d;
l
Valores Primitivos. Se permite entre valores primitivos
cuando se soporta un mayor rango de valores
l
En general, cada operando se evalúa antes de
realizar la operación
Cada expresión tiene un tipo
l
Conversión implícita. ¡Es automática!
l
l
l
Suma
Resta
Multiplicación
División
Residuo o módulo
+
*
/
%
Además cambio de signo -
if (obj instanceof clase) ....
l
null instanceof tipo es siempre falso
Operadores de Incremento y
Decremento
l
Operador de incremento
l
l
Operador de decremento
l
l
a++ equivale a a = a+1
a-- equivale a a = a-1
Ambos operadores existen en forma prefija y
postfija
l
l
Prefijo calcula primero la operación y luego se aplica;
postfijo es al revés
Ejemplo: arreglo[i++]
Operadores Relacionales
l
l
l
l
l
l
Mayor que
Mayor o igual que
Menor que
Menor o igual que
Igual que
Diferente
>
>=
<
<=
==
!=
4
05/04/2004
Operadores al Bit
l
l
l
l
l
AND al bit
OR inclusivo al bit
OR exclusivo al bit
Corrimiento a la izquierda
(rellenando con 0)
Corrrimiento a la derecha
(rellenando con el signo)
Corrimiento a la derecha
(rellenando con 0)
Operador Condicional
&
|
^
<<
l
l
>>
>>>
l
La forma
valor = test ? exp1 : exp2;
Es equivalente a:
if (test)
valor = exp1;
else valor = exp2;
La diferencia es que el operador condicional define
valor y permite expresiones más compactas
Operador de Asignación
l
l
El operador = corresponde a la asignación,
operador de menor precedencia
Java soporta otras formas de asignación
l
l
+= -= *= /= %= >>= <<= >>>= &=
^= |=
Ejemplo:
l
l
arreglo[indice()] += 12 es casi equivalente a
arreglo[indice()] = arreglo[indice()] + 12
Segundo caso llama dos veces a indice()
Sentencias y Bloques
l
Un bloque básicamente se compone de:
l
l
l
l
l
l
Asignación
Formas de prefijo o postfijo de ++ y -Llamadas a métodos ( objeto.metodo(...) )
Creación de objetos (con new)
Sentencias de declaración
l
l
Sentencia if-else
Sentencias de expresión
l
l
Control de Flujo
Variables requieren de inicialización
Toda sentencia se termina con ;
Un bloque se forma con { y }
l
Forma básica de flujo de control
condicional
if (exp-booleana)
sent1
else sent2
El else se parea con el if más cercano
if (valor >= 0)
if ( valor < MAX)
process(valor);
else System.out.println (“valor negativo ”)
Mal asociado
el else
5
05/04/2004
Sentencia switch
l
l
Evalúa una expresión entera cuyo valor se usa
para seleccionar caso mediante etiqueta
Si no se encuentra etiqueta se salta a default
l
Si no existe default, no se hace nada
Sentencia while y do-while
l
l
Permite repetición controlada por expresión
boolena
Las dos formas son:
switch (valor) {
case 0: case 2: case 4: case 6: case 8:
System.out.println (“es par”);
break;
case 1: case 3: case 5: case 7: case 9:
System.out.println (“es impar”);
break;
default:
System.out.println (“es impar”);
}
Sentencia for
l
l
while (exp-boolena )
sentencia
Permite controlar una repetición para un
rango de valores
La forma es la siguiente:
l
l
Esta forma equivale a:
l
exp-inicial;
while (exp-boolena ) {
sentencia
exp-incremento;
}
Sentencia continue
l
l
La sentencia continue permite saltar al final
del cuerpo de una repetición y evaluar la
condición de término
Se usa para ignorar una elemento de
proceso
sentencia
while (exp-boolena );
Sentencia break
for (exp-inicial; exp-boolena; exp-incremento)
sentencia
l
do
Permite salir desde
cualquier bloque, no
sólo switch
Se usa para terminar
una repetición como
for, while o do
Se puede usar una
etiqueta para salir de
un anidamiento de
bloques
buscar:
for(y=0; y<MAX; y++) {
for (x=0; x<MAX, x++) {
if (Matriz[x][y] == valor) {
encontrado = true;
break buscar;
}
}
}
if (! encontrado)
System.out.println (“no está”);
Sentencia return
l
Permite terminar la ejecución de un método y
retorna al invocador.
l
l
Si no retorno valor: return;
Si retorna valor:
return valor;
while (! stream.eof ()) {
elem = stream.next();
if (elem == “ “ || elem == “ \n”)
continue;
procesar(elem);
}
6