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
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

2
El Modelo Java
• El código bytecode es portable entre
diferentes plataformas

3
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 (uno especial: main)
• y dinámicos (se ejecutan sobre un objeto)
• Interfaz
– Define la firma de un procedimiento

4
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
5

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.print(″Distancia (metros) ? ″);
double d = s.nextDouble();
System.out.print(″Tiempo (segundos) ? ″);
double t = s.nextDouble();
double v = (d/1000)/(t/3600);
System.out.println(″Velocidad = ″+v+″ km/h″);
}
}

6
Ejemplo 2
import java.util.*; //para usa Scanner
public class Procentajes {
static public void main(String[] args) {
System.out.println(“Porcentajes de enteros a,b,c“);
Scanner U = new Scanner(System.in);
System.out.println(“Ingrese 3 nums. “);
int a = U.nextInt();
int b = U.nextInt();
int c = U.nextInt();
double factor=100.0/(a+b+c);
System.out.println(”a=” + a*factor + ”%”);
System.out.println(”b=” + b*factor + ”%”);
System.out.println(”c=” + c*factor + ”%”);
}
7
}

Ejemplo 3
import java.util.*; //para usa Scanner
public class CambiarFormatoFecha {
static public void main(String[] args) {
Scanner U = new Scanner(System.in);
System.out.print(“Fecha en aaaammdd : “);
int n = U.nextInt();
int a=n/10000, d=n%100, d2=n%10000/100;
System.out.print(“Fecha en dd/mm/aaaa : “);
System.out.print(d+“/”+m+”/“+a);
}
}

8
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 (listas de valores)
• 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

9
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

10
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

11
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;

12
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

13
Cast de Tipos Primitivos
• Puede perderse precisión
double d = 20.5;
long l = (long) d;
System.out.println(l);
20
• Pueden perderse dígitos
long l = 1000000;
short s;
s = (short) l;
System.out.println(s);
16960

14
Funciones Matemáticas Predefinidas
import java.util.*; //para usa Scanner
public class Triangulo {
static public void main(String[] args) {
System.out.println(“triángulo:lados a,b, y angulo alfa”);
Scanner U = new Scanner(System.in);
System.out.println(“a b alfa ”),
double a = U.nextDouble(), b=U.nextDouble(),
alfa = U.nextDouble()* Math.PI/180;
double c = Math.sqrt(Math.pow(a * Math.sin(alfa),2)+
Math.pow(b - a * Math.cos(alfa),2));
System.out.println(“Perímetro=” + (a+b+c));
double s=(a+b+c)/2;
//semi-perimetro
System.out.println(“Area=“+Math.sqrt(s*(s-a)*(s-b)*(s-c)));
}
}

15
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 !

16
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));
}
}

17
Métodos en otra clase
class F { //En archivo F.java
static public int aaaammdd(int x){
int d = x/1000000, m = x/10000%100, a = x%10000;
return a*10000 + m*100 + d;
}
static public int ddmmaaaa(int x){
int d = x%100, m = x/100%100, a = x/10000;
return a + m*10000 + d*1000000;
}
}
public class MiClase { //En archivo MiClase.java
static public void main(String[] args) {
int f1=15032015, f2=25052014; // fecha DDMMAAAA
System.out.println(“mayor=“+
Math.max( F.aaaammdd(f1), F.aaaammdd(f2)));
}
}
Funciones definidas en clase Math
función
sqrt(x)
pow(x,y)
exp(x)
log(x)
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
abs(x)
significado
 x, x  0
xy
ex
logex
seno de angulo x
coseno de x
tangente de x
arco-seno de x
arco-coseno x
arco-tangente x
|x|
max(x,y) mayor entre x e y
min(x,y) menor entre x e y
random() Nº al azar en [0,1[
arg*
double
double
double
double
double
double
double
double
double
double
int
double
int
double
int
double
resultado ejemplo
double
double
double
double
double
double
double
double
double
double
int
double
int
double
int
double
double
resultado
sqrt(4.0)
pow(2.0,3.0)
exp(1.0)
log(Math.E)
sin(Math.PI)
cos(Math.PI)
tan(Math.PI)
asin(1.0)
acos(1.0)
atan(0.0)
abs(-3)
abs(-3.0)
max(4, 6)
max(4.1, 6.5)
min(4, 6)
min(4.1, 6.5)
random( )
2.0
8.0
2.71...
1.0
0.0
1.0
0.0
Π/2
0.0
0.0
3
3.0
6
6.5
4
4.1
0.xxx..
..
Nota 1. un argumento double admite un int (int es asignable a double)
Nota 2. Se usan Math.nombre(argumentos), ejemplo: Math.pow(3.1, 4.3)
Sentencias de Control de Flujo
•
•
•
•
•
if / else
switch
for
while
do / while

20
If / if else
if ( money == 0 ) {
System.out.println(“Pide prestado mejor!");
}
// si es solo una instruccion los parentesis
pueden omitirse
if ( money >= 20000) {
System.out.println(“Yo invito !”);
} else {
System.out.println(“Hazte el leso”);
}

21
Operadores
Relacionales
>
>=
<
<=
==
!=
Mayor
Mayor o igual
Menor
Menor o igual
Igual
Distinto
Operadores
Lógicos
&&
||
!
and
or
not

22
Ejemplo diasMes
static public int diasMes(int m,int a){
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
return 31;
else if(m==4||m==6||m==9||m==11)
return 30;
else if(m==2)//if(cond simple) sin else
if(bisiesto(a))
return 29;
else
return 28;
return 0;//mes incorrecto
}
static public boolean bisiesto(int x){
return x%4==0 && x%100!=0 || x%400==0;
}

23
switch
• Selección múltiple
• switch <expresión> debe
evaluar un int
• case <expresión> debe ser
un literal o un campo static
final
• break abandona el bloque
del switch (de otra manera
los siguientes cases son
ejecutados sin ser
evaluados)
• El bloque default es opcional
switch (<expresión>)
{
case <expresión>:
...
break;
case <expresión>:
...
break;
}
default:
...

24
Ejemplo diasMes Con switch
int d;
switch(x){
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
default:
}
return d;
d=31;
d=28;
d=31;
d=30;
d=31;
d=30;
d=31;
d=31;
d=30;
d=31;
d=30;
d=31;
d=0;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
Solución 2
int d=0;
switch(x){
case 1:case 3:case
d=31; break;
case 4:case 6:case
d=30; break;
case 2:
d=28; break;
}
return d;
alternativamente:
switch(x){
case 1:case 3:case
return 31;
case 4:case 6:case
return 30;
case 2:
return 28;
}
return 0;
5:case 7:case 8:case 10:case 12:
9:case 11:
5:case 7:case 8:case 10:case 12:
9:case 11:
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 );

27
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…
}

28
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)

29
Ejemplos
//tabla celsius – fahrenheit cada 5°C
int g=-20;
while(g<=40){
System.out.println(g+”ºC=“+(9.0/5.0*g+32)+”ºF”);
g=g+5;
}
//calculo de promedio de notas válidas
int suma = 0, n = 0;
Scanner U = new Scanner(System.in);
while(true) {
double x = U.nextDouble();
if (x == 0) break; // fin de datos
if (x < 1.0 || x > 7.0) continue;
suma += x; x++;
}
System.out.println(“Promedio = “+suma/n);
Operadores especiales
double suma, mayor, numero; int n;
suma = mayor = n = 0;
while((numero=U.readDouble("nº?"))!=0){
U.println(“prom=”+(suma+=numero)/ ++n);
mayor=max(numero,mayor);
}
U.println(“mayor=“+mayor);
static public double max(double x,double y){
return x>y ? x : y;
}
for
• Sintaxis
for (inicialización; condición; reinicialización)
{ sentencias ; (si es una sola se pueden omitir {}) }
inicialización y reinicialización pueden ser listas de
expresiones separadas por comas
for ( x=0; x < 10; x++ ) {
// ejecuta el bloque mientras x < 10
}
for ( x=0, y=0; x < 20; x++, y++ ) {
// ejecuta el bloque mientras x e y
}
< 20

32
Ejemplos 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;
}
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)) System.out.println(j);
}

33
Descargar

Unidad 1: Java