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