Está en la página 1de 58

Java

• Java (1995) fue desarrollado en


Sun Microsystems por
James Gosling, Bill Joy y
Guy Steele

• Influenciado por C++

• Soporta clases, encapsulación, herencia simple,


polimorfismo, interfaces, garbage collection

 1
Java
• Objetivo inicial: un lenguaje de programación para
dispositivos de consumo
• Requerimientos: pequeño, rápido, confiable y
portable
• En 1994 se produce la explosión del Web, y Sun
advierte que Java es ideal para aplicaciones Internet:
– Independiente de la plataforma
– Pequeño
– Seguro

 2
El Lenguaje Java
• Independiente de la plataforma
• Seguro
• Simple
• Robusto
• Orientado a Objetos
• Distribuido
• Multi-threaded

• Ref:

http://www.oracle.com/technetwork/java/javase/documentation/index.h
tml

 3
El Modelo Java
• Al compilar un programa Java, se genera un
código de máquina intermedio definido por
Sun, que recibe el nombre de bytecode

 4
El Modelo Java
• El código bytecode es portable entre
diferentes plataformas

 5
Tipos de Archivos Java
• Todo archivo define una clase o una interfaz
• Clase:
– Define e implementa un tipo de objeto
– Variables (representación)
– Procedimientos (funciones)
• estáticos (especial: main)
• y dinámicos (se ejecutan sobre un objeto)
• Interfaz
– Define la firma de un procedimiento

 6
Un archivo básico para hacer un
programa que corra
public class MiClase {
static public void main(String[] args) {
Aqui van las instrucciones que se ejecutarán cuando se “eche a
correr” la clase
}
}

• El programa debe ser escrito en un archivo llamado MiClase.java


(MiClase es el nombre de la “clase” y lo inventa el programador, por
convención empieza con mayúscula
• Al compilarse se generará el archivo MiClase.class, que es el que
se ejecuta
• Si se cambia algo en el programa hay que compilarlo de nuevo para
que se refleje el cambio en el archivo class 7

Ejemplo 1
import java.util.*; //para usa Scanner
public class MiClase {
static public void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println(″Distancia (metros) ? ″);
double d = s.nextDouble();
System.out.println(″Tiempo (segundos) ? ″);
double t = s.nextDouble();
double v = (d/1000)/(t/3600);
System.out.println(″Velocidad = ″+v+″ km/h″);
}
}

 8
Ejemplo 2
import java.util.*; //para usa Scanner
public class ChequeoEdad {
static public void main(String[] args) {
scanner s = new scanner(System.in);
System.out.println(″Cual es tu nombre ? ″);
String nomb = s.nectLine();
System.out.print(″Qué año nasciste ? ″);
int an = s.nextInt();
int mls = System.currentTimeMillis();
int ah = (int)(mls/1000/3600/24/365.25 +1970);
System.out.print(nomb+″ tiene cerca de “);
System.out.print((an-ah)+” años “);
}
}
 9
Características del Lenguaje
• Case-sensitive: diferencias entre mayúsculas y
minúsculas
• Todas las sentencias terminan con un punto-
coma (;)
• Los espacios blancos (incluyendo tabs y fines
de línea) se ignoran, excepto al interior de
strings

 10
Comentarios
// comentario Caracteres desde //
hasta el fin de línea
son ignorados
/* comentario */ Caracteres entre /* y
*/ son ignorados
/** comentario */ Caracteres entre /**
y */ son ignorados e
incluidos en la
documentación javadoc

 11
Javadoc

 12
Identificadores
• Nombre dado a una variable, clase, o método
• Comienza con una letra Unicode (incluyendo _
y $), a la que pueden seguir letras y dígitos
• Puede tener cualquier tamaño
• Ejemplos
– apellido
–$
–

 13
Tipos, Valores y Variables
• En Java existen 2 categorías de tipos:
– Primitivos: boolean, char, byte, short, int, long, float, double
– Referencias: objetos, interfaces, arreglos
• Una variable es un espacio de memoria que puede
almacenar:
Tipo de la variable Puede almacenar
Primitivo Un valor del tipo que se declaró
Clase El valor null, o una referencia a una instancia de
la clase o de alguna subclase de la clase
Interfaz El valor null, o una referencia a una instancia de
alguna clase que implemente la interfaz
Arreglo El valor null, o una referencia a un arreglo de
elementos del tipo del arreglo
 14
Tipos de Datos Primitivos
Tipo Valores

boolean true o false

char Carácter Unicode (de 16 bits)

byte Entero de 8 bits (con signo)

short Entero de 16 bits (con signo)

int Entero de 32 bits (con signo)

long Entero de 64 bits (con signo)

float Número flotante de 32 bits

double Número flotante de 64 bits

 15
Variables
• Una variable es un espacio de almacenamiento de
datos, con un nombre y un tipo de datos asociado

• La existencia de una variable está dada por su


alcance:
– static (variable "de clase"): se crea una vez, sin importar
cuántas instancias de la clase existan
– no static (variable "de instancia"): se crea una vez por cada
instancia de la clase
– local: se crea al ejecutarse la declaración, y desaparece al
finalizar el bloque en el que fue creada

 16
Valores Iniciales
• Variables de instancia y de clase
– tipos primitivos numéricos 0
– char '\u0000'
– boolean false
– referencias null

• Variables locales
– Deben ser inicializadas explícitamente antes de ser
usadas; de lo contrario se produce un error de
compilación

 17
Constantes
• Una vez inicializadas, no pueden ser modificadas
• Se utiliza la palabra reservada final para definir una
constante
• Típicamente las constantes se definen como static,
para no instanciarlas con cada objeto
• Ejemplo

class Circulo {
static final double PI = 3.1416;
}

 18
Conversión de Tipos
• Java es fuertemente tipeado
– Chequea compatibilidad de tipos en tiempo de
compilación
– Permite hacer cast entre tipos
– Provee operadores para determinar el tipo de un
objeto en tiempo de ejecución

 19
Conversion Implícita
• Cualquier valor numérico puede ser asignado
a una variable numérica que seoporte un
rango de valores más amplio
byte short int long float double
más chico más grande

• Ejemplo
int i = 1000;
double d = i;

 20
Cast Explícito
• Cuando una conversión implícita no es
posible, un cast explicita la conversión a
realizar
• Sólo se permiten casts que tienen sentido

 21
Cast de Tipos Primitivos
• Puede perderse precisión
double d = 20.5;
long l = (long) d; 20
System.out.println(l);
• Pueden perderse dígitos
long l = 1000000;
short s;
s = (short) l; 16960
System.out.println(s);

 22
Bloque
• Cualquier número de sentencias agrupadas
entre un par de llaves { }
• Puede ser usado en cualquier lugar donde se
acepta una sentencia simple
• El bloque define el ámbito (scope) de las
variables
• El bloque provee contornos para el control de
flujo del procesamiento

 23
Ambito de Variables
public class MiClase {
int a;
static int b;
public void miMetodo( ) {
int c;
if (condicion){ {
int d;
. . .
}
} d fuera de ámbito
} c fuera de ámbito
} a y b fuera de ámbito

 24
Operador de Asignación
• Se usa el símbolo = para asignar un valor
• Ejemplo
sueldo = 1000000;
validado = true;
• La asignación puede ocurrir en la declaración
String nombre = "Paula";

 25
Operadores Aritméticos
+ Suma
- Resta
* Multiplicación
/ División
% Resto

 26
ejemplos
public class Nombre_Clase {
public static void main (String args[]) {
//bloque de sentencias;
}
}

 27
ejemplos
public class Mi_Clase_1 {
public static void main(String args[])
{
for(int i = 0; i <= 12; i++)
{ System.out.print("12 * "+ i + " = " + 12 * i +
"\n");
}
}
}
 28
Métodos Estáticos
• Se identifican con el selector static
• Devuelven o no un resultado de un cierto
tipo
• Reciben un número determinado de
parámetros de tipo determinado
• Métodos de igual nombre pero con distinto
número o tipo de parámetros son métodos
distintos !

 29
Métodos en la misma clase
public class MiClase {

ststic public int suma(int x, int y ) {


return x+y;
}
static public int suma(int x, int y, int z) {
return x+y+z
}

static public void main(String[] args) {


System.out.println(suma(5,4)+” “+suma(2,3,4));
}

}
 30
Métodos en otra clase
public class Sumas { //En archivo Sumas.java
public int suma(int x, int y ) {
return x+y;
}
static public int suma(int x, int y, int z) {
return x+y+z
}

}
public class MiClase { //En archivo MiClase.java
static public void main(String[] args) {
System.out.println(Sumas.suma(5,4)+” “+
Sumas.suma(2,3,4));
}
}
 31
Parámetros pasdos por valor
public static int fact(int x) {
resultado = 1;
while (x > 1) {
resultado *= x;
x--;
}
return resultado;
}
public static void main(String[] args) {
Scanner c = new Scanner(System.in);
System.out.print(“ingrese un numero:”);
int numero = c.nextInt();
int res = fact(numero);
System.out.println(“El factorial de “+numero+” es “+res);
//numero no se modifica porque se le pasa una copia
}
Operadores Abreviados
var op= expression
es equivalente a:
var = var op (expression)

• Ejemplo
a *= b + 1;
es equivalente a:
a = a * (b + 1);

 33
Incremento y Decremento
• i++ es equivalente a i = i + 1
i-- es equivalente a i = i - 1

• El valor de la expresión es el valor de la variable antes o


después de la operación, según si el operador se encuentra a
la izquierda o a la derecha del operando

• Ejemplo
int x = 10;
System.out.println( x++ ); // x=11, print 10
System.out.println( ++x ); // x=12, print 12
System.out.println( x ); // print 12

 34
Sentencias de Control de Flujo
• if / else
• switch
• for
• while
• do / while

 35
if
if ( result == 0 ) {
System.out.println("No encontrado!");
}

 36
if / else
if (rol.equals("administrador")) {
// acceso a administración;
} else {
// no tiene acceso a administración
}

 37
Operadores Relacionales
> Mayor
>= Mayor o igual
< Menor
<= Menor o igual
== Igual
!= Distinto

 38
Operadores Lógicos
&& and
|| or
! not

• Ejemplo
boolean fin =
eof ||
(str != null && str.equals(patron));

 39
if / else if / else
public static diasVac(int años) {
if ( años < 0 || años > 100)
vacaciones = -1;
if ( años < 5 ) {
vacaciones = 10;
} else if ( años < 10 ) {
vacaciones = 15;
} else {
vacaciones = 20;
}
return vacaciones;
}
 40
Operador "?"
• Expresión condicional:
– condición ? expresión 1 : expresión 2
• El valor de la expresión es expresión 1 si la condición
es verdadera, y expresión 2 de lo contrario
• Ejemplo
montoNeto = hayImpuesto ? p * 1.05 : p;
es equivalente a:

if (hayImpuesto) {
montoNeto = p * 1.05;
} else {
montoNeto = p;
}
 41
Más ejemplos:
static public int factorial(int x){
return x==0 ? 1 : x*factorial(x-1);
}
es equivalente a:
static public int factorial(int x){
if(x==0) return 1; else return x*factorial(x-1);
}
static public int digitos(int x){
return x<10 ? 1 : 1+digitos(x/10);
}
es equivalente a:

static public int digitos(int x){


if(x<10) return 1; else return 1+digitos(x/10);
}
 42
while y do while
• Sintaxis 1: se ejecuta 0 o más veces
while ( condición )
{ sentencias }
• Sintaxis 2: se ejecuta 1 o más veces
do
{ sentencias }
while ( condición );

 43
break
• break causa el fin del ciclo en el que se
encuentra

while ( condición ) {
sentencias…
if (condición de salida) {
break;
}
más sentencias…
}

 44
continue
• continue causa el fin de la iteración actual y
el paso a la siguiente
while ( condición ) {
sentencias…
if (condición siguiente iteración) {
continue;
}
más sentencias…
}
(ver ejemplos instrucciones especiales)

 45
Programa que calcule el promedio de
una cantidad indeterminada de números:
Scanner s = new Scanner(System.in);
double suma=0; int n=0;
double numero=s.nextDouble();
while( numero != 0 )
{
suma=suma+numero;
n=n+1;
System.out.println(“promedio=”+suma/n);
numero=s.nextDouble();
}

 46
Refinamiento : La asignación como
expresión
Scanner s = new Scanner(System.in);
double suma, numero; int n;
suma = n = 0;
while((numero=s.nextDouble())!=0)
System.out.println(“promedio=” +
(suma=suma+numero)/(n=n+1));

}
//otra posibilidad
System.out.println(“promedio=”+
(suma+=numero)/(n+=1));

 47
switch
• Selección múltiple switch (<expresión>)
• switch <expresión> debe {
evaluar un int case <expresión>:
• case <expresión> debe ser ...
un literal o un campo static break;
final case <expresión>:
• break abandona el bloque ...
del switch (de otra manera break;
los siguientes cases son
ejecutados sin ser default:
evaluados) ...
}
• El bloque default es opcional

 48
Ejemplo de switch
public static void main(String[] args) {
switch (args.length) {
case 0:
FileEditor e = new FileEditor();
break;
case 1:
FileEditor e = new FileEditor(args[0]);
break;
default:
// mensaje de error y fin
}
}

 49
Función que entregue el Nº de días de un mes

static public int diasMes(int x){ ... }


Solución 1. Con if sin else
int d=0;
if( x==1 ) d=31;
if( x==2 ) d=28;
if( x==3 ) d=31;
if( x==4 ) d=30;
if( x==5 ) d=31;
if( x==6 ) d=30;
if( x==7 ) d=31;
if( x==8 ) d=31;
if( x==9 ) d=30;
if( x==10 ) d=31;
if( x==11 ) d=30;
if( x==12 ) d=31;
return d;
evalúa 12 condiciones siempre
Solución 2. Con selección múltiple if-else if-...-else
int d=0;
if( x==1 ) d=31;
else if( x==2 ) d=28
else if( x==3 ) d=31;
else if( x==4 ) d=30;
else if( x==5 ) d=31;
else if( x==6 ) d=30;
else if( x==7 ) d=31;
else if( x==8 ) d=31;
else if( x==9 ) d=30;
else if( x==10 ) d=31;
else if( x==11 ) d=30;
else if( x==12 ) d=31;
return d;

evalúa x condiciones (12 en el peor caso)


Solución 3. Con Instrucción switch (una evaluación)
int d;
switch(x){
case 1: d=31; break;
case 2: d=28; break;
case 3: d=31; break;
case 4: d=30; break;
case 5: d=31; break;
case 6: d=30; break;
case 7: d=31; break;
case 8: d=31; break;
case 9: d=30; break;
case 10: d=31; break;
case 11: d=30; break;
case 12: d=31; break;
default: d=0;
}
return d;
Solución 4
int d=0;
switch(x){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
d=31; break;
case 4:case 6:case 9:case 11:
d=30; break;
case 2:
d=28; break;
}
return d;
alternativamente:
switch(x){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
return 31;
case 4:case 6:case 9:case 11:
return 30;
case 2:
return 28;
}
return 0;
for
• Sintaxis
for (inicialización; condición; reinicialización)
{ sentencias }
• Nota
– inicialización y reinicialización pueden ser listas
de expresiones separadas por comas

 54
Ejemplo de for
for ( x=0; x<10; x++ ) {
// ejecuta el bloque mientras x < 10
}

for ( x=0, y=0; y<20; x++, y+=x ) {


// ejecuta el bloque mientras y < 20
}

 55
Ejemplo de for
static public boolean primo(int x) {
if(x%2==0) return x==2;
for(int i=3; i<=(int)Math.sqrt(x); i+=2)
if(x%i==0) return false;
return true;
}

System.out.println(“primos terminados en 1:”);


for(int i=1; i<=100; i+=10)
if(primo(i)) U.println(i);
System.out.println(“primos terminados en 3:”);
for(int i=3; i<=100; i+=10)
if(primo(i)) U.println(i);

for(int i=1; i<=9; i+=2) {


System.out.println(“primos terminados en “+i);
for(int j=i; j<=100; j+=10)
if(primo(j)) U.println(j);
}  56
Etiquetas (Labels)
• Los labels se usan típicamente en bloques y
ciclos
• Un label es un identificador seguido de dos
puntos:
Label1:
• El label identifica la siguiente sentencia

 57
Ejemplo
search:
for (...) {
for (…) {
if (...) {
break search;
}
}
}

 58

También podría gustarte