La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Curso de java básico (scjp)

Presentaciones similares


Presentación del tema: "Curso de java básico (scjp)"— Transcripción de la presentación:

1 Curso de java básico (scjp)

2 Expresiones y flujos de control

3 Objetivos generales Distinguir entre variables de instancia y variables locales. Describir cómo inicializar variables de instancia. Reconocer, describir y usar los operadores Java. Distinguir entre asignaciones legales e ilegales de tipos  primitivos. Reconocer la compatibilidad de asignaciones y las conversiones requeridas  sobre los tipos fundamentales. Usar  las construcciones if, switch, for, while y do y las for mas  etiquetadas de break y continue como estructuras de  control  en un programa.

4 Variables y su alcance Las variables locales son:
Variables que son definidas dentro de métodos y son llamadas variables locales, automáticas, temporales y de stack. Las variables que son creadas cuando el método es ejecutado son destruidas cuando se sale del mismo. Las variables locales necesitan inicialización explícita. Las variables de clase y miembros son inicializadas automáticamente. Una variable es un área en memoria que tiene un nombre y un Tipo asociado. El Tipo es o bien un Tipo primitivo o una Referencia. Si se define una variable dentro de un método, esta deberá ser inicializada con algún valor, y será destruida por el Garbage Collector cuando se sale del mismo. Sin embargo, si la variable es definida en una clase, su inicialización es realizada automáticamente, y no es necesario hacerlo explícitamente. En Java, existen los siguientes tipos de variables: Variables de Instancia Variables de clase Variables Locales Parámetros Variables de Instancia: Instancias de una clase. Variables de clase: Una variable de clase, es todo campo declarado con su modificador estático. Ejempplo: public static String nombre=“Pepe”l Variables definidas dentro de métodos. Son variables que se utilizan en las firmas de los métodos, para ser utilizadas dentro del mismo. Ejemplo: Public void setNombre(String n) { …… }

5 Ejemplo: Variables y alcances
public class ScopeExample { private int i=1; public void firstMethod() { int i=4, j=5; this.i = i + j; secondMethod(7); } public void secondMethod(int i) { int j=8; public class TestScoping { public static void main(String[] args) { ScopeExample scope = new ScopeExample(); scope.firstMethod(); En el siguiente ejemplo, se definen varias clases: ScopeExample. TestScoping, la cual posee el método de inicio, main(). En la clase ScopeExample, vemos que se define una variabales de clase: variable privada i, la cual es inicializada en 1. Esta clase, posee 2 métodos: firstMethod() y secondMethod(). En ambos casos, se definen diferentes variables: i, j, las cuales deben ser inicializadas, ya que son variables locales del método. En el método firsMethod(), se utiliza el identificador this, para hacer referencia a la variables de clase i, de manera de diferenciarla de la variable local definida en el método.

6 Valores por Defecto: variables de instancia
Si no se lleva a cabo la inicializacion de alguna variable de clase, estas toman su valor por defecto, los cuales están dados en la tabla anterior.

7 Operadores Los operadores producen nuevos valores a partir de uno o más operandos El resultado de la mayoría es numérico o booleano No pueden ser sobrecargados como en C++ Para los tipos primitivos, se pueden utilizar los distintos operadores artimeticos:+,-,/ ,* y =. Estos no pueden ser redefinidos, es decir, sobrecargados como en el lenguaje c++.

8 Operador Asignación El igual (=) es utilizado para asignar un valor a una variable Las variables son simplemente un conjunto de bits Para los tipos primitivos se guarda el valor en esos bits Para los tipos de referencia se guarda un valor igual a la dirección de memoria del objeto o null Ejmplos de asignacion: int a =12; Persona p = new Persona(); Float f = 10.2

9 Operador Asignación Existen 12 operadores de asignación incluyendo el igual (=) Los otros 11 son combinaciones del signo de igual con algún otro operador (compound assignment operators) Operador += op1 + = op2 op1 =op1 + op2 Operador -= op1 - = op2 op1 =op1 - op2 Operador *= op1 * = op2 op1 =op1 * op2 Operador /= op1 / = op2 op1 =op1 / op2 Operador %= op1 % = op2 op1 =op1 % op2 Operador &=

10 Operador != Utilizado para determinar si dos objetos o variables son distintas. 1!=2; Operador ^= op1 ^ = op2 op1 =op1 ^ op2 Utilizado para elevar un numero a alguna potencia. Operador <<= op1 <<= op2 Desplaza los bits de op1 a la izquiera op2 veces Operador >>= op1 >>= op2 Desplaza los bits de op1 a la derecha op2 veces Operador >>>= op1 >>>= op2 Desplaza los bits de op1 a la derecha op2 veces, sin signo. Los tres son operadores de bits.

11 Operador Asignación Se puede asignar una variable usando un literal o el resutlado de una expresión int x = 7; int y = x + 2; int z = x * y; Recordar que un entero literal (7) es implícitamente un int (32 bits) No habría problema en asignar un int a un long. ¿Que pasaría en el caso de asignar un int a un byte, char o short ?

12 Operador Asignación Lo siguiente es legal:
byte b = 27; // El compilador hace el casteo // automáticamente Sabemos que los literales enteros son int, pero en realidad el resultado de cualquier operación de enteros entre operandos de 32 bits o menos da como resultado un int byte b = 3; byte c = 8; byte d = b + c; // error de compilación, // distinto de byte d = 3 + 8;

13 Asignación De Números de Punto Flotante
Recordar que implicitamente los literales en punto flotante son double Si se intenta asignar un double a un float el compilador sabe que no hay suficiente espacio en 32 bits para almacenar la precisión de un double (64 bits) float f = 32.3; // no compila float g = (float) 32.3; // ok float h = 32.3f; // ok float y = 32.3F; // ok

14 Asignando literales demasiado grandes para la variable
Lo siguiente da error de compilación: byte b = 128; // 127 es el rango máximo del byte byte b = (byte) 128; // ok El operador += permite sumar sin hacer casteo explícito byte b = 3; b += 7; // equivalente a b = (byte) b + 7

15 Asignando variables primitivas
Cuando se asigna una variable primitiva a otra, el valor de la variable de la derecha es copiado a la de la izquierda int a = 6; int b = a; No refieren al mismo lugar en memoria, simplemente tienen el mismo valor

16 Asignando variables de referencia
Cuando se asigna una variable de referencia a otra, se copia el valor de la dirección de memoria de una a la otra, por lo que las dos “apuntan” al mismo lugar de memoria MyDate m = new MyDate(); MyDate n = m; n.setDay(30); // se cambia tanto el día del objeto // referenciado por n como el referenciado por // m, ya que son el mismo. Hay ciertas excepciones como el caso de String que veremos más adelante

17 Operadores de Comparación
Los operadores de comparación simpre resultan en algún valor booleano (true o false) Existen 4 operadores de comparación que pueden utilizarse para comparar cualquier combinación de de enteros, numeros en punto flotante o caracteres > mayor que >= mayor o igual que < menor que <= menor o igual que

18 Operadores de Igualdad
La igualdad puede ser testeada con 2 operadores == igual que != distinto de Comparan 2 “cosas” y devuelven un valor booleano Cada comparación individual puede comprender numeros caracteres Booleanos objetos No se pueden comparar tipos incompatibles Cada vez que se realiza una comparación, se deberá tener en cuenta el tipo de los elementos a comparar. Ejemplo: 2==True; //da error de tipo True==False; //ok

19 Operadores Aritméticos
Los operadores aritméticos son: + suma - resta * multiplicación / división % resto Reglas básicas: Dividir un entero por cero causa una ArithmeticException Usar el operador % con cero como operador derecho causa una ArithmeticException Dividir un numero en punto flotante por cero es legal Usar el operador % sobre un operando en punto flotante con cero como operando derecho causa una ArithmeticException Cuando hablamos de ArithmeticException, nos referimos a excepciones, las cuales veremos mas adelante. Podemos decir que una excepción de este tipo, es análogo a cuando queremos dividir un numero entre cero en cualquier calculadora.

20 Concatenación de String con +
El operador +: Realiza la concatenación de String Produce un String nuevo: String salutation = "Dr."; String name = "Pete" + " " + "Seymour"; String title = salutation + " " + name; Uno de los argumentos debe ser un objeto String Los objetos que no son String son convertidos en String automáticamente. Ejemplos: public class Test{ public static void main(String [] args) { String palabra = “hola ” + “mi nombre es” + “: Pepe”; System.out.print(palabra); String palabra2= palabra + “ Cómo estas?”; System.out.print(palabra2); System.out.print(1+””); } Al ejecutar este programa obtendremos: “hola mi nombre es : Pepe” “hola mi nombre es : Pepe Cómo estas?” “1”

21 Incremento y Decremento
Java tiene dos operadores que incrementan o decrementan una variable en exactamente 1 ++ incremento (prefijo y postfijo) -- decremento (prefijo y postfijo) Uso prefijo: int x = 4; int y = ++x; La variable x se incrementa y luego se utiliza el valor alterado en la evaluación de la expresión Resultado: y = 5, x = 5 Uso postfijo: int y = x++; La variable x se evalúa en la expresión y luego se incrementa. Resultado: y = 4, x = 5 Uso Postfijo: Los operadores ++ y – corresponden a sumar o restar 1 respectivamente: suma ++; suma=suma+1; suma --; suma=suma-1; Uso Prefijo int suma=8; int e=++suma;

22 Operadores de Desplazamiento - shift
>> shift derecha << shift izquierda >>> shift derecha (unsigned o zero-filled shift) Estos tres operadores, son utilizados con bits, para llevar a cabo el desplazamiento a la derecha, la izquierda o derecha sin signo respectivamente.

23 Operadores de Desplazamiento - shift
El desplazamiento a la derecha aritmético o con signo se utiliza de la siguiente forma: 128 >> 1 retorna 128/21 = 64 256 >> 4 retorna 256/24 = 16 -256 >> 4 retorna -256/24 = -16 El bit del signo es copiado durante el desplazamiento El desplazamiento a la derecha lógico o sin signo (>>>) es: El signo no es copiado durante el desplazamiento. Trabajan con los bits como están y no con significado aritmético

24 Operadores de Desplazamiento - shift
Ejemplos de desplazamiento a la izquierda (<<): 128 << 1 retorna 128 * 21 = 256 16 << 2 retorna 16 * 22 = 64

25 Operadores de Desplazamiento - shift
En esta imagen, vemos como se lleva a cabo el desplazamiento tanto a derecha como a izquierda.

26 Asociatividad de Operadores
R (right) derecha L (left) izquierda L to R(derecha a izquierda) R to L (izquierda a derecha) En la tabla anterior, vemos la asociatividad de cada operador.

27 Operadores Lógicos Los operadores booleanos son (bit a bit):
! – NOT & – AND | – OR ^ – XOR Los operadores booleanos “short-circuit” son (son de comparación entre tipos y objetos): && – AND || – OR Puede usar estos operadores de la siguiente manera: MyDate d; if ((d != null) && (d.day > 31)) { // do something with d } Los operadores booleanos, se utilizan para evaluar expresiones. Por lo general se usan en estructuras de control, como ser: if, while.

28 Operadores Lógicos de Bitwise
Los operadores son: ~ – Complement & – AND ^ – XOR | – OR Ejemplos:

29 Operador condicional Operador ternario utilizado para evaluar condiciones booleanas como un if En vez de ejecutar un bloque de código, asigna un valor a una variable nombreVariable = (expresión booleana) ? Valor si verdadero: valor si falso Los paréntesis son opcionales int a = 1; int b = 2; int x = (a > b) ? a : b; Hay dos notaciones para el operador condicional: 1- if(condicion){} 2- nombreVaribale= (expresionBooleana) ? Valor si verdadero: Valor si falso Ejemplos: Int a =1; Int b=2; Int x=0; if(a>b) { x=a; } else x=b;

30 Casteo Si existe información que se puede perder cuando se hace una asignación, el programador debe confirmar la asignación con un casteo. La asignación entre un long y un int requiere un casteo explícito Ejemplos: long bigValue = 99L; int squashed = bigValue;// Wrong, needs a cast int squashed = (int) bigValue; // OK int squashed = 99L; // Wrong, needs a cast int squashed = (int) 99L; // OK, but... int squashed = 99; // default integer literal El casteo se lleva a cabo, para transformar tipos o para hacerle acordar a un objeto su tipo.

31 Promoción y Casteo de Expresiones
Las variables son automáticamente promovidas (casteadas) a un tipo mas grande ( p.e. de int a long). Las expresiones son compatibles para ser asignadas, si el tipo de la variable es por lo menos tan grande como( el mismo número de bits) el tipo de la expresión. Ejemplos: long bigval = 6; // 6 is an int type, OK int smallval = 99L; // 99L is a long, illegal double z = F; // F is float, OK float z1 = ; // is double, illegal

32 Sentencia if-else La sintaxis de la sentencia if, else
if ( boolean expression) { statement or block; } } else { Ejecuta un bloque o sentencia de acuerdo a cierta condición booleana Si es una única sentencia la que se pretende ejecutar no es necesario definir un bloque Se pueden anidar la cantidad de if o else que sean necesarios. La ejecución de este tipo de estructura, es secuencial. If(condicion) { } Else { if(condicion) else{ …. if(condicion) { ……

33 Ejemplo if-else int count;
count = getCount(); // a method defined in the class if (count < 0) { System.out.println("Error: count value is negative."); } else if (count > getMaxCount()) { System.out.println("Error: count value is too big."); } else { System.out.println("There will be " + count + " people for lunch today."); } En este ejemplo, se evalúa el contenido de la variable count. Si su valor es menor a 0, entonces se imprime:("Error: count value is negative."); Sino, si count es mayor que gerMaxCount(), se imprime:("Error: count value is too big."); y sino, se imprime: System.out.println("There will be " + count + " people for lunch today.");

34 Sentencia switch La sintaxis del switch switch ( expr1) {
case constant2: statements; break; case constant3: default: } El tipo de la expr1 debe ser compatible con el tipo int (byte, short, int, char) El argumento de los case debe ser un literal o una variable final Si expr1 matchea algun case, se comenzaran a ejecutar las sentencias definidas en ese case hasta encontrar un break El default se utiliza para ejecutar en caso que no se matchee ningun valor de case y puede ubicarse en cualquier lugar del switch Si no se coloca el break seguirá ejecutando el siguiente case

35 Ejemplo 1 : Sentencia switch
switch ( carModel ) { case DELUXE: addAirConditioning(); addRadio(); addWheels(); addEngine(); break; case STANDARD: default: } En este ejemplo, carModel debera tener un valor. Si este coincide con DELUXE, entonces se ejecutara todo lo definido en el case DELUXE. Analogamente si el valor de carModel es STANDARD. Para el caso de que no sea ni STANDARD ni DELUXE, se ejecutara el default.

36 Ejemplo 2 : Sentencia switch
switch ( carModel ) { case THE_WORKS: addGoldPackage(); add7WayAdjustableSeats(); case DELUXE: addFloorMats(); addAirConditioning(); case STANDARD: addRadio(); addDefroster(); default: addWheels(); addEngine(); } En este caso no tiene breaks Si carModel == DELUX Se ejecutará todo lo siguiente; lo de STANDAR y lo de default

37 Sentencia loop La sentencia for:
for (init_expr; boolean testexpr; alter_expr) { sentencia o bloque; } Ninguna parte del for es requerida Las variables declaradas en el for serán solamente accesibles desde el for Puede inicializarse más de una variable en la init_expr del for Las inicializaciones están separadas por coma (,) Ejemplo for( int i = 0; i < 10 ; i++){ System.out.println(“Todavía no terminó?”); System.out.println(“Terminó”); Este ejemplo, imprimirá 10 veces el texto: (“Todavía no terminó?”); y luego (“Terminó”); Al definir este tipo de estructura, se debe determinar el numero de inicio, la condición que debe cumplirse para que se siga ejecutando el loop, y el criterio de aumento de la variable. Como vemos, la variable i, es inicializada en 0. La condición para seguir el loop, es hasta que i<10, y el criterio de aumento de la variables es 1.

38 Sentencia loop La sentencia while: while( sentencia boolean ){
sentencia o bloque; } Ejemplo int i = 0; while ( i < 10){ System.out.println(“Todavía no terminó?”); i++; System.out.println(“Terminó”); Es similar al for, solo que se pueden utilizar condiciones mas complejas.

39 Sentencia loop La sentencia do / while Ejemplo sentencia o bloque;
} while (boolean test); Ejemplo int i = 0; System.out.println(“Todavía no terminó?”); i++; }while ( i < 10); System.out.println(“Terminó”); En este tipo de sentencia, se ejecuta todo lo que se encuentra en el bloque, y finalmente se evalúa la condición del while. Si la condición se cumple, entonces se repite nuevamente la ejecución del bloque. Este procedimiento es repetido hasta que la condición del while sea siempre verdadera. En caso de que esta no se cumpla, se sigue con las sentencias ubicadas a continuación del bucle. Ejemplo: int a =0; Do{ a++; System.out.print(a); }while(a<6); System.out.print(“Termino”); Obtendremos: 1 2 3 4 5 Termino

40 Control de Flujo especial: loop
break [label]; Un break sin label, causa la interrupción de el loop que lo contiene (el más interno) y se pasa a ejecutar la siguiente linea luego del loop. continue [label]; Un continue sin label, causa la interrupción de la iteración actual del loop que lo contiene, y la ejecución del chequeo de la condición del loop. Si la condición es true, se ejecuta el loop nuevamente label: statement; Si el break o continue están etiquetados, tiene el mismo efecto pero esta vez el loop sobre el que se realizan las acciones es el loop con esa misma etiqueta.

41 Sentencia do - break do { statement; if ( condition is true) { break;
} } while ( boolean expression); En este caso, se ejecuta el bucle normalmente, pero cuando la condición del if es verdadera, se ejecuta el bloque de dicho condicional: el break. A; ejecutarse el break, se corta el bucle Ejemplo: int a =0; int s=1; Do{ a++; System.out.print(“a:”+a); s=s+a System.out.print(“s:”+s); If(s==4){ System.out.print(“entre en break”); break; } }while(a<6); System.out.print(“Termino”); Obtendremos: a: 1 s: 2 a: 2 s: 4 entre en break Termino Si se escribe alguna sentencia luego del break, dentro del bloque, estas seran ignoradas, y no se ejecutaran.

42 Sentencia do - continue
statement; if ( boolean expression) { continue; } statement2; } while ( boolean expression); En este caso, cuando se ejecuta la sentencia continue, la sentencia statement2, no es ejecutada y se pasa a la siguiente iteración. La gran diferencia entre ambos es que, break, detiene la ejecución del bucle y salta a la primera línea del programa tras el bucle y continue, detiene la iteración actual y pasa a la siguiente iteración del bucle sin salir de él (a menos, que el propio bucle haya llegado al límite de sus iteraciones). Ejemplo: int a =0; int s=1; Do{ a++; System.out.print(“a:”+a); If(s==4) { System.out.print(“Continue”); continue; } System.out.print(“No entro en continue”); }while(a<6); System.out.print(“Termino”);

43 Obtendremos: a: 1 No entro en continue s: 2 a: 3 a: 4 Continue a: 5 Termino

44 Sentencia break con etiquetas
outer: do { statement; do { if ( boolean expression) { break outer; } } while ( boolean expression); En este caso, al colocar las etiquetas se determina que bucle se quiere terminar al ejecutarse el break. En este caso, cuando se entra al break, se terminara de ejecutar el bucle principal. Ejemplo: int a =0; int b =0; Outer:Do{ a++; outer1: do{ b++; System.out.print(“b:”+b); if(a==1){ System.out.print(“Break outer1”); break outer1; } }while(b<2) System.out.print(“a:”+a); }while(a<3)

45 B:1 Break outer1 A:1 A:2

46 Sentencia continue con etiquetas
test: do { statement; do { if (condition is true) { continue test; } } while ( condition is true); Ejemplo: fuera: for (int i=0; i<5; i++) { for (int j=0; j<5; j++) { System.out.println("Dentro"); continue fuera; } // fin del bucle anidado System.out.println("fuera"); // nunca lo escribe } System.out.println("Fuera del bucle");

47 Obtenemos: Dentro Fuera del bucle Después de que se ejecute la sentencia continue, el flujo de ejecución continúa ejecutando la siguiente iteración del bucle for identificado por la etiqueta, hasta que éste alcance la condición de parada. Finalmente, cuando la condición de parada del bucle se alcanza, el bucle termina y se escribirá “Fuera del Bucle”. Si en lugar de poner una sentencia continue, hubiéramos puesto un break, el resultado hubiera sido: Dentro Fuera del bucle

48 Resúmen Variables de instancia y variables locales.
Inicializacion de variables de clase y locales. Operadores Asignaciones Casteo y Promocion Estructuras de control: If Switch For While Do Etiquetas: continue y break.

49 Control Flow Statements
Referencias The Java Tutorial Control Flow Statements


Descargar ppt "Curso de java básico (scjp)"

Presentaciones similares


Anuncios Google