Sie sind auf Seite 1von 146

Java bsico

V2.0
Octubre 2014
Ferreiras
: Despus de haber cursado los prerrequisitos INF-5100, INF-5120 .

Ferreiras

Java Basico

Algunos conceptos
1
bsicos de Java
: Despus de haber cursado los prerrequisitos INF-5100, INF-5120 .

Ferreiras

Java Basico

Checklist de lo que usted


necesita para este curso

Haber construido el conocimiento en el tema 3 de INF-206

Saber usar los comando bsicos de DOS y/o Linux, que le


ensearon en INF-207

Haber construido el conocimiento en los 10 temas del


programa de INF-510;

Haber construido el conocimiento en los 11 temas del


programa de INF-512;

Saber usar un editor de texto ASCII

Obtener una herramienta Java para compilar y correr su


aplicacin Java. Ver mas adelante qu hacer para obtener una.

Ferreiras

Java Basico

Java es de la familia de
lenguajes C

Java tiene sus races en la familia de lenguajes C y, por lo tanto,


ser inmediatamente familiar para programadores en C, C++,
Objective-C y C#.

De acuerdo con el TIOBE Index for May 2014 la familia de


lenguajes C se mantiene en los primeros 4 lugares ( C, Java,
Objective-C y C++ ) con los ratings de 16.925 %, 16.907 %, 11.791
% y 5.986 % respectivamente. C# est en el sexto lugar, con un
3.745 %.
El TIOBE Programming Community index es un indicador de la
popularidad de los lenguajes de programacin. Ver en
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

...

Ferreiras

Java Basico

Sintaxis Java, C++

Java tiene una sintaxis similar a la de C++;

Varias sentencias de Java tienen la misma


sintaxis de C++;
En este curso obviaremos la discusin de las
sentencias que tienen sintaxis similar a la de
C++ y que ya fueron vistas en el prerrequisito
INF-5100;
Ver en el grupo el archivo Java-C++.doc
Ferreiras

Java Basico

Plataforma de Java SE 8
Java Platform, Standard Edition (Java SE) 8
http://docs.oracle.com/javase/8/

About Java SE 8
Download and Install
Learn the Language
Monitor and Troubleshoot
Reference
Release Notes

Ferreiras

Java Basico

Why Java?
Java is the foundation for virtually every type of networked
application and is the global standard for developing and
delivering mobile applications, games, Web-based content,
and enterprise software. With more than 9 million
developers worldwide, Java enables you to efficiently
develop and deploy exciting applications and services. With
comprehensive tooling, a mature ecosystem, and robust
performance, Java delivers applications portability across
even the most disparate computing environments.
Recuperado de

http://www.oracle.com/us/technologies/java/overview/index.html
Ferreiras

Java Basico

Familia Java de Oracle

Es la Java que
veremos, a
nivel
introductorio, en
este curso.

Java Platform, Standard Edition (Java SE)


Java SE is designed to enable you to develop secure,
portable, high-performance applications for the widest
range of computing platforms possible. By making
applications available across heterogeneous
environments, businesses can boost end-user
productivity, communication, and collaborationand
dramatically reduce the cost of ownership of both
enterprise and consumer applications.
Recuperado de
http://www.oracle.com/us/technologies/java/overview/index.html
Ferreiras

Java Basico

Familia Java de Oracle


Java Platform, Enterprise Edition (Java EE)
Java Platform, Enterprise Edition (Java EE) is the
industry standard for enterprise Java computing. Utilize
the lightweight Java EE 6 Web Profile to create nextgeneration Web applications, and the full power of the
Java EE 6 platform for enterprise applications.
Developers benefit from productivity improvements with
more annotations, more POJOs, simplified packaging,
and less XML configuration.
Recuperado de
http://www.oracle.com/us/technologies/java/overview/index.html
Ferreiras

Java Basico

Familia Java de Oracle


Java Embedded
When you want more-more selection, protection, and
powerJava is the choice. Oracle offers a wide range of
solutions, from servers to embedded devices, for resourceconstrained devices and desktop-class systems. These
solutions provide real-time, high-performance capabilities
that allow you to securely access resources while
protecting your data, so you can do more with your devices
Recuperado de
http://www.oracle.com/us/technologies/java/overview/index.html
Ferreiras

Java Basico

10

Familia Java de Oracle


Java for Mobile Devices
Java Platform, Micro Edition (Java ME) is used by a
vast number of Java mobile phone developers, carriers,
and OEMs (Original Equipment Manufacturers) to
create feature phone products around the globe. Oracle
is the leader in providing mobile phone technology
found on more than three billion devices and counting.

Recuperado de
http://www.oracle.com/us/technologies/java/overview/index.html
Ferreiras

Java Basico

11

Familia Java de Oracle


JavaFX
JavaFX is an advanced Java user interface (UI)
platform for enterprise business applications and the
next step in the evolution of Java as a premier rich client
platform. By using Java for both the server and client
side of their applications, developers can decrease risk
significantly by reducing the complexity of their business
solutions.
Recuperado de
http://www.oracle.com/us/technologies/java/overview/index.html
Ferreiras

Java Basico

12

Familia Java de Oracle


Oracle Java Cloud Service
Oracle Java Cloud Service provides an enterprise-grade
platform to develop and deploy business applications in the
cloud. It enables you to maximize productivity with instant
access to cloud environments that support any standard
Java EE application, complete with integrated security and
database accessall powered by Oracle WebLogic Server.

Recuperado de
http://www.oracle.com/us/technologies/java/overview/index.html
Ferreiras

Java Basico

13

Download Java JDK SE 8u5


A la fecha ( 13-May-2014) usted puede obtener el JDK-8u5,
ltimo release, apropiado a su SO, de la siguiente pagina:
http://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSiteId=ocomen

Java SE 8u31
This release includes important security fixes. Oracle strongly
recommends that all Java SE 8 users upgrade to this release.

En la misma pagina puede tambin obtener los demos y


ejemplos, apropiados a su SO, en formato zip.
Ferreiras

Java Basico

14

Download Java Tutorials


A la fecha ( 06-Junio-2014) usted puede
obtener el Java Tutorial, ultimo release, de la
siguiente pagina:
http://docs.oracle.com/javase/tutorial/index.html

La tecnologa Java SE completa est en la


pagina:
http://www.oracle.com/us/technologies/java/standard-edition/overview/index.html

http://java.com/en/about/
Ferreiras

Java Basico

http://java.com/es/
15

Download Java Tutorials


The Java Tutorials are practical guides for
programmers who want to use the Java
programming language to create applications.
They include hundreds of complete, working
examples, and dozens of lessons. Groups of
related lessons are organized into "trails".
The Java Tutorials primarily describe features in
Java SE 8. For best results, download JDK 8.
...
Ferreiras

Java Basico

16

IDEs for Java


I have been using Eclipse IDE since 2006 and I liked it so much
for various reasons. First it is open source and free to use. Eclipse
looks pretty neat on Windows OS on which I work most of the
time. Occasionally I tried to use NetBeans IDE (before 6.x
version) and I didnt like it because its too slow. And I never tried
IntellijIDEA because its a commercial product and I am 100%
sure that my employer is not going to pay $$$ for an IDE.
http://www.javacodegeeks.com/2014/10/netbeanside-and-intellijidea
-from-the-eyes-of-a-long-time-eclipse-user.html

Ferreiras

Java Basico

17

NetBeans IDE y similares


Usted no tiene que aprenderse de
memoria todo al API de Java. !!
Imposible!!;
Afortunadamente, hay IDEs ( NetBeans,
eclipse, ... ) que incorporan ayudas en
lnea ( hints ) que nos facilitan la escritura
de cdigo fuente java.

Ferreiras

Java Basico

18

NetBeans IDE 8.0


NetBeans IDE
https://netbeans.org/index.html
Documentation, Training & Support
https://netbeans.org/kb/
Para obtener NetBeans IDE 8.0
ttps://netbeans.org/community/releases/80/index.html
...

Ferreiras

Java Basico

19

NetBeans IDE y similares


... We recommend using the NetBeans
IDE instead of the command line
whenever possible.... The Java Tutorial.
But democratically, Professor Ferreiras
will use, in this course, an ASCII text editor,
more precisely, will be using notepad. The
exams are prepared on that basis. You
choose, democratically. See next slide
Ferreiras

Java Basico

20

Java Guru that is thinking like


Ferreiras

For folks just getting started with Java


programming, I advocate using a simple text
editor at first so that you arent distracted by
the bells and whistles of a specific IDE, and
so that the IDE doesnt do so much work for
you that you dont really learn whats going
on at the most basic level.

By: Jacquie Barker, A software engineer with over 28 years of


experience as software developer an project manager. See on
http://objectstart.com/
Ferreiras

Java Basico

21

Por ejemplo:
At The Java Tutorial, Creating Your
First Application, en el link
http://docs.oracle.com/javase/tutorial/getStarted/cupojava/win32.html

Usted encontrar mas detalles que


pueden ser de su inters para escribir
su primera aplicacin Java usando
notepad.
Ferreiras

Java Basico

22

Del Lenguaje humano al Lenguaje


maquina.
Entrada por
teclado

Editor

Lenguaje
humano
Cdigo
fuente

Ferreiras

Java Basico

23

Del Lenguaje humano al Lenguaje


maquina.
Una MV convierte el
cdigo intermedio en
un cdigo mquina de
un particular CPU

Compilador

Cdigo Intermedio
(Bytecodes para una MV)

Cdigo Intermedio
(Bytecodes para una MV)

Cdigo Intermedio
(No bytecodes)

C#

JAVA
Generador de Cdigo
(MV JAVA)

El cdigo intermedio
es generado en una
representacin que
usa smbolos del
lenguaje humano.

Generador de Cdigo
(MV .NET/C#)

C/C++
Generador de Cdigo

2
Ferreiras

Java Basico

24

Del Lenguaje humano al Lenguaje


maquina.
2

Enlazador: toma uno


o ms archivos objeto
generados por un
compilador y los
combina en un solo
programa ejecutable.

Ferreiras

Cdigo objeto

Linker
(Enlazador)

.exe
( Cdigo ejecutable
en lenguaje
maquina (0s y 1s)
para un CPU en
particular )

Java Basico

El cdigo objeto
puede ser generado
en lenguaje
ensamblador ( que
aun es con smbolos
del lenguaje humano)
o lenguaje mquina,
que es en 0s y 1s.

Es la aplicacin que
correr, se ejecutar, en
una plataforma ( SO +
CPU ) en particular.
Su representacin
siempre ser en el
lenguaje mquina, 0s y 1s,
de un CPU en particular.
25

Del Lenguaje humano al Lenguaje


maquina.
Today's JVMs typically execute bytecodes using a combination of
interpretation and so-called just-in-time (JIT) compilation. In this process, the
JVM analyzes the bycodes as they're interpreted, searching for hot spots-parts of
the bytecodes that execute frequently. For these parts, a just-in-time (JIT)
compiler, such as Oracle's Java HotSpot compiler, translates the bytecode into
tue underlying computer's machine language. When the JVM encounters
these compiled parts again, the faster machine-language code executes. Thus
Java programs actually go through two compilation phases - one in which source
code is translated into bytecode (for portability across JVMs on different
computer platforms ) and second in which, during execution, the bytecodes are
translated into machine language for the actual computer on which the
program executes.
( Page 12, Java SE8 for Programmers; Paul Deitel, Harvey Deitel; Deitel
Developer Series; Prentice Hall; 3th edition, 2014 )

Ferreiras

Java Basico

26

Un programa ejecutable , llamado


tambin aplicacin, es, simplemente,
un programa en cdigo de una
mquina especfica (cpu) que puede
ser ejecutado por un sistema
operativo;

Ferreiras

Java Basico

27

La conversin a un lenguaje de
mquina especfico (CPU) debe ser
hecha con un procesador de lenguaje,
el cual podr ser un:
Interprete; ,
compilador;

Ferreiras

Java Basico

28

Un intrprete o interpretador lee las


instrucciones en el cdigo fuente y las
ejecuta:
CODIGO
FUENTE

INTERPRETE

SALIDA

Ejemplos de lenguajes interpretados:


Perl, PHP, JAVA, Javascript, Logo,
Python, C#, J#, ASP, Ruby, ...
Ferreiras

Java Basico

29

Un compilador lee el programa y lo traduce completamente a cdigo


objeto, el cual es luego enlazado para producir el ejecutable.
CODIGO
FUENTE

COMPILADOR

CODIGO
OBJETO

ENLAZADOR
(LINKER)

SALIDA

EJECUTABLE
(.exe)

Ejemplos de lenguajes que son compilados:


ADA, ALGOL, ALGOL 60, ALGOL 68, SMALL, BASIC, C, C++, F, OBJECTIVE-C, D,
CLEO, COBOL, COBRA, COMMON LISP, DELPHI, EIFFEL, SATHER, UBERCODE,
FORTH, FORTRAN, HASKELL, GO, IBM RPG, JOVIAL, LABVIEW, LISP, LUSH, ML,
STANDARD ML, ALICE, OCAML, MODULA-2, MODULA-3, PASCAL, URQ, VISUAL BASIC,
VISUAL, FOXPRO, VISUAL PROLOG
Ferreiras

Java Basico

30

En el proceso de compilacin, el programa


escrito con las instrucciones del lenguaje es
llamado cdigo fuente y el programa
generado por el compilador es llamado cdigo
objeto. el linker, normalmente, esta disponible
desde el mismo compilador.

Ferreiras

Java Basico

31

Funcionamiento de Java
El corazn del funcionamiento de Java es la
Maquina Virtual de Java ( Java Virtual
Machine, JVM).
Hay varios proveedores de JVM ( Oracle, IBM,
GNU, ... );
La actual JVM de Oracle est escrita en C++.
Ver en: http://openjdk.java.net/groups/hotspot/
En http://en.wikipedia.org/wiki/List_of_Java_virtual_machines hay
una lista de JVM
Ferreiras

Java Basico

32

Funcionamiento de Java
La JVM carga los archivos .class para
interpretar y ejecutar el bytecode.
La JVM se ejecuta bajo el control directo
de un sistema operativo y la aplicacin
Java se ejecuta bajo el control de la JVM.
Lo anterior es la base para decir, con
cierta reservas, que Java es independiente
de la plataforma.
Ferreiras

Java Basico

33

Funcionamiento de Java
El javac es el traductor del cdigo fuente
Java a una forma de cdigo intermedio
llamada bytecode, almacenado en
archivo con la extensin .class y el
mismo nombre del archivo fuente
.java ;

Ferreiras

Java Basico

34

Funcionamiento de Java
El javac o Java Compiler, es el
compilador de Java;
El javac convierte el codigo fuente Java
en bytecodes.
El javac es suplido con el JDK;
El javac y la JVM en combinacin con el
API de Java es el JDK o Java
Developers Kit;
Ferreiras

Java Basico

35

Funcionamiento de Java
Compiladores de cdigo fuente Java son,
adems del javac de Oracle, entre otros:
JIT de IBM
ECL de Eclipse
GNU compiler for Java
...

El primer javac fue escrito en C / C++.


Ferreiras

Java Basico

36

Funcionamiento de Java
Pasos para producir nuestra aplicacin Java:
Preparar el archivo CodigoFuenta.java y grabarlo

Usando un programa editor ( notepad++, notepad, EditPlus, TextPad,


jEdit, vi, emacs );

Los Entornos de Desarrollo Integrados ( Integrated Development


Environments (IDEs) proporcionan herramientas que soportan el
proceso de desarrollo de software, tal como editores, depuradores
para la localizacin de errores, detectados en la fase de pruebas del
software, y mucho mas. Para Java existen muchos IDEs. Entre los
ms populares estan Eclipse, NetBeans, IntelliJ IDEA
Compilar con javac as:
> javac CodigoFuente.java

Ejecutar el bytecode ( archivo .class ) generado, as:


> java CodigoFuente

Ferreiras

Java Basico

37

Funcionamiento de Java
Grficamente:

Compilador Java
para Windows

/ /**Cdigo
Cdigofuente
fuenteJava,
Java,
independiente
de
la
independiente de la
1
plataforma
plataforma1 */*/

Compilador Java
para Linux

Compilador Java
para Solaris

Producen el mismo bytecode,


independientemente de la
plataforma en que sea
generado

Este bytecode podr


correr en cualquier
plataforma para la cual
una JVM este
disponible

: SO + CPU

Ferreiras

Java Basico

38

Funcionamiento de Java
Grficamente, continuacin:
bytecode

JVM para Windows

Ejecucin en
Windows de la
aplicacin Java

Ferreiras

JVM para Linux

Ejecucin en
Linux de la
aplicacin Java

Java Basico

Este bytecode podr


correr en cualquier
plataforma para la cual
una JVM este
disponible

JVM Java para Solaris

Ejecucin en
Solaris de la
aplicacin Java

39

Funcionamiento de Java
Ejemplo solo para practicar los pasos para producir una
aplicacin Java:
Basico0.java
jdk1.7.0
Ferreiras / Java / Bsico, muy bsico

Su directorio de trabajo podr ser,


por ejemplo, Mi cdigo Java, para
lo cual debe configurar su variable
de entorno; O, usar el \bin, ms
cmodo.

Suponiendo que ya usted instal el JDK con todos sus valores por defecto:
P1: Escribir este cdigo fuente usando notepad o similar
P2: Grabar en su directorio de trabajo como Basico0.java
P3: Levantar la consola DOS
El objetivo de
P4: Ir al a su directorio de trabajo
este ejemplo es
P5: Compilar as: > javac Basico0.java
que usted se
P6: Correr as: > java Basico0
aprenda estos
pasos
Ferreiras

Java Basico

40

// Importamos las libreras a usar


import java.io.*; // Para PrintStream
import static java.lang.Math.*; // Para no escribir Math.nombreMetodo()
public class Basico0 {
public static void main(String [ ] fofi ) {
double tasaNominal = 14.0;
double Inicial = 600;
double frecuencia = 4;
double anos = 3 ;
double monto;
monto = Inicial * pow ( ( 1 + (tasaNominal/100)/frecuencia ),
anos*frecuencia );
System.out.println( "\n\nMonto = " + monto);

Ferreiras

Java Basico

41

if ( tasaNominal > 18 )
System.out.println ("\n\nEXELENTE");
else if ( Inicial < 500 )
System.out.println ("\n\nMUY POCO");
else if ( anos > 5 )
System.out.println ("\n\nMUY LARGO");
else
System.out.println ("\n\nDEFECTO");
} // fin de main()
} // fin de la clase Basico0

Ferreiras

Java Basico

42

/*
C:\Archivos de programa\Java\jdk1.7.0\bin>javac Basico0.java
C:\Archivos de programa\Java\jdk1.7.0\bin>java Basico0
Monto = 906.6411944078162
DEFECTO
C:\Archivos de programa\Java\jdk1.7.0\bin>
*/

Ferreiras

Java Basico

43

Salida estndar
De la clase System de Java se usa el campo
o variable static out, que es tipo PrintStream
( Una clase que veremos ms adelante en el
curso).
out es el flujo estndar de salida,
normalmente asociado a la pantalla de la
consola.

Ferreiras

Java Basico

44

Salida estndar
out ya est abierto al inicio de la ejecucin
de la aplicacin Java y listo para aceptar datos
de salida.
Las formas tpica de uso son:
System.out.println( datos );
System.out.print ( datos );
println() y print() Son mtodos de la
clase PrintStream (ver en el API ).

Ferreiras

Java Basico

45

Salida estndar
System.out.println( datos ) y
System.out.print ( datos ) Usan
como separador de datos el carcter +;
Otra forma, no muy tpica, aunque la
usaremos alguna veces es:
System.out.printf( ); En el
curso veremos ejemplos de su uso.
...
Ferreiras

Java Basico

46

Salida estndar
Ejemplo ( Segmento de cdigo ):
//...
System.out.println( "\n La suma de 3.33 + 4.53 es: " +
( 3.33 + 4.52 ) + " DOP" ) ;
// ...

Producir la siguiente salida:


> <avanza una lnea>
> La suma de 3.33 + 4.53 es: 7.85 DOP

Explicar al
profesor estos
resultados.

>
Ferreiras

Java Basico

47

Entrada estndar
De la clase System, y para interactuar con el usuario
en un entorno de lnea de comando, es usado el
campo o variable static in, que es tipo ImpuStream.
in representa un flujo de entrada estndar el cual esta
abierto, automticamente, desde que la JVM arranca y
listo para suplir datos de entrada. Tpicamente,
corresponde a entrada por teclado.
in es un flujo de bytes sin caractersticas de flujo de
caracteres.

Ferreiras

Java Basico

48

Entrada estndar
El API de Java tiene varias clases para
acceder al objeto System.in : Son las que mas
java.util.Scanner

java.io.Console,

veremos en este
curso, por su
simplicidad en el
uso

java.io.InputStreamReader
java.io.BufferedReader.

Veamos algunos detalles de esta clases.

Ferreiras

Java Basico

49

Entrada estndar
Scanner (java.util.Scanner)
Usando un objeto de la clase Scanner, mediante
uno de sus constructores que toma como
argumento el objeto InputStream System.in,
como indicado a continuacin:
Scanner(InputStream source)
Constructs a new Scanner that produces values scanned from the specified input
stream.
As, por ejemplo:
Scanner lector = new
Scanner(System.in);
Ferreiras

Java Basico

Habilita el objeto
Lector para leer
desde stdin

50

Entrada estndar
Scanner (java.util.Scanner)
Combinado con uno de sus diferentes
mtodos next:
double

nextDouble()

Scans the next token of the input as a double.


float nextFloat()
Scans the next token of the input as a float.
int

nextInt()

Scans the next token of the input as an int.


Ferreiras

Java Basico

51

Entrada estndar
Scanner (java.util.Scanner)
String nextLine()
Advances this scanner past the current line and returns the input that was
skipped.
long

nextLong()

Scans the next token of the input as a long.


short nextShort()
Scans the next token of the input as a short.
boolean

nextBoolean()

Scans the next token of the input into a boolean value and returns that value.
byte

nextByte()

Scans the next token of the input as a byte.


Ferreiras

Java Basico

52

Scanner (java.util.Scanner)
Por ejemplo, Para leer un numero entero:
Scanner cin = new
Scanner(System.in); // Recuerde: in
es un objeto

InputStream

int i = cin.nextInt();
cin !!!

Ferreiras

Java Basico

53

Ejemplo ( Segmento de cdigo ):


//...
Scanner lector = new Scanner( System.in);
System.out.print( "\nEntre su nombre completo: " );
String nombre = lector.nextLine();
System.out.println( "\nEl nombre : " + nombre );
//...

Explicar al
profesor estos
resultados.

Producir la siguiente interaccin:

> <avanze de una lnea>


>Entre su nombre completo: PedroAmorCampoFrio del Monte Santana
Rosario
> <avanze de una lnea>
>El nombre : PedroAmorCampoFrio del Monte Santana Rosario

Ferreiras

Java Basico

54

Entrada estndar
Console (java.io.Console)
A more advanced alternative to the Standard Streams is the Console. This is a
single, predefined object of type Console that has most of the features provided
by the Standard Streams, and others besides. The Console is particularly useful
for secure password entry. The Console object also provides input and output
streams that are true character streams, through Its readerand
writermethods.
Before a program can use the Console, it must attempt to retrieve the Console
object by invoking System.console(). If the Console object is available, this
method returns it.
static Console console() Is a method in the System class that returns
the unique Console object associated with the current Java virtual machine, if
any.
Ferreiras

Java Basico

55

Entrada estndar
Console (java.io.Console)
public final class Console extends
Object

Methods to access the character-based


console device, if any, associated with the
current Java virtual machine.
All methods in a final class are implicitly final.
Console
class isJavaused
like String class.
Ferreiras
Basico
56

Entrada estndar
Console (java.io.Console)
If System.console returns NULL, then Console operations are not permitted,
either because the OS doesn't support them or because the program was
launched in a noninteractive environment.
Some of the methods are:
String readLine();
Reads a single line of text from the console.
char[] readPassword();
Reads a password or passphrase from the console with echoing disabled

Ferreiras

Java Basico

57

Ejemplo ( Segmento de cdigo )


System.console() retorna una
referencia a un cobjeto Console,
razn por la cual no se uso new.
// ...
Console lector = System.console();
System.out.print( "\nEntre su nombre completo: " );
String nombre = lector.readLine();
System.out.println( "\nEl nombre : " + nombre );

Explicar al
profesor estos
resultados.

//...

Producir la siguiente interaccin:

> <avanze de una lnea>


> Entre su nombre completo: Filiberto Campoamor Perez Sanchez
> <avanze de una lnea>
> El nombre : Filiberto Campoamor Perez Sanchez
Ferreiras

Java Basico

58

/*
Basico290813.java
Ferreiras / Java / Basico / Entrada-Salida
Uso de Scanner, Console: Problema cuando nextLine() se usa
combinado con nextInt(), y similares. Solucin usando un mtodo de
Console.
*/
import java.util.Scanner; // necesario para usar Scanner
import java.io.Console; // necesario para usar Console

Ferreiras

Java Basico

59

Basico290813.java
public class Basico290813 {
public static void main(String fofi[ ] ) {
int num1;
double num2;
String nombre;
double suma;
// Establecer un Scanner para entrada estndar (System.in)
Scanner in = new Scanner(System.in);
System.out.print("\n\t* Entre un numero entero: ");
num1 = in.nextInt(); // lee un int
System.out.print("\n\t* Entre un numero de punto flotante: ");
num2 = in.nextDouble(); // lee un double
System.out.print("\n\t* Entre su nombre completo: ");
Ferreiras

Java Basico

60

Basico290813.java
nota # 1: igual que
// nombre = in.next(); // Solo captura la primera palabra
con cin y getline en C+
// nombre = in.nextLine(); // Ver NOTA # 1
+: No captura la
// La solucion es usar
cadena
Console lector = System.console();
nombre = lector.readLine();
System.out.println("\nHola " + nombre + " la suma de " +
num1 + " y " + num2 + " es " + (num1+num2) );

}
} // fin de la clase Basico290813

Ferreiras

Java Basico

61

Basico290813.java
Corridas:
< Hacer corridas en vivo mostrando los efectos de intentar capturar cadenas
con in.next(), in.nextLine() y lector.Readline() >

Ferreiras

Java Basico

62

Entrada estndar
InputStreamReader
(java.io.InputStreamReader)
System.in is a byte stream with no character
stream features. To use Standard Input as a
character stream,
wrap System.in in InputStreamReader :
InputStreamReader cin = new
InputStreamReader(System.in);

Ferreiras

Java Basico

63

Entrada estndar
InputStreamReader
(java.io.InputStreamReader)
public class InputStreamReader extends Reader
An InputStreamReader is a bridge from byte streams to character streams: It reads bytes
and decodes them into characters using a specified charset. The charset that it uses may
be specified by name or may be given explicitly, or the platform's default charset may be
accepted.
Each invocation of one of an InputStreamReader's read() methods may cause one or more
bytes to be read from the underlying byte-input stream. To enable the efficient conversion
of bytes to characters, more bytes may be read ahead from the underlying stream than are
necessary to satisfy the current read operation.

Ferreiras

Java Basico

64

Entrada estndar
InputStreamReader
(java.io.InputStreamReader)
Constructor more used:
InputStreamReader( InputStream in )
Creates an InputStreamReader that uses the default charset.
Some Methods are:
public int read() throws IOException
Reads a single character.
Returns:
The character read, or -1 if the end of the stream has been reached
Ferreiras

Java Basico

65

Entrada estndar
BufferedReader
(java.io.BufferedReader)
For top efficiency, consider wrapping an InputStreamReader within a BufferedReader. For
example:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

Ferreiras

Java Basico

66

Entrada estndar
BufferedReader
(java.io.BufferedReader)
Some methods are:
int read()
Reads a single character.
public String readLine() throws IOException

Reads a line of text. A line is considered to be terminated by any one of


a line feed ('\n'), a carriage return ('\r'), or a carriage return followed
immediately by a linefeed.
Ferreiras

Java Basico

67

Entrada estndar
/*
Basico000.java
jdk1.7.0
Ferreiras / Java / Entrada-Salida estandar
InputStreamReader, BufferedReader
*/
import java.io.* ;
public class Basico000 {
public static void main(String [ ] fofi ) {
InputStreamReader flujoEntradaStd = new InputStreamReader(System.in) ;
BufferedReader lector = new BufferedReader( flujoEntradaStd) ;
System.out.println("\nEntrada-Salida estandar en Java\n");
Ferreiras

Java Basico

68

Entrada estndar
try {
System.out.print("* Entre su nombre completo: ");
String nombreCompleto = lector.readLine();
System.out.print("* Entre su ano de nacimiento: ");
String anoNac = lector.readLine();
System.out.print("* Entre el ano actual: ");
String esteAno = lector.readLine();
int anoNacim = Integer.parseInt( anoNac);
int anoActual = Integer.parseInt(esteAno);

El bloque try/catch es necesario


porque el metodo readLine() de
la clase BufferedReader throws
IOException
El tema de manejo de
excepciones lo veremos mas
adelante.

int edad = anoActual - anoNacim ;


System.out.println("\nHola " + nombreCompleto + "\nSu edad hoy es: "
+ edad + " anos");
}
catch (IOException err) {
System.out.println("Error reading line");
}
catch(NumberFormatException err) {
System.out.println("Error Converting Number");
}
}
}
Ferreiras

Java Basico

69

Entrada estndar
/*
C:\Archivos de programa\Java\jdk1.7.0\bin>javac Basico000.java
C:\Archivos de programa\Java\jdk1.7.0\bin>java Basico000
Entrada-Salida estandar en Java
* Entre su nombre completo: Matusalem Abud Adida
* Entre su ano de nacimiento: 1845
* Entre el ano actual: 2012
Hola Matusalem Abud Adida
Su edad hoy es: 167 anos
C:\Archivos de programa\Java\jdk1.7.0\bin>
*/

Ferreiras

Java Basico

70

Secuencias de escape
Una secuencia de escape es un carcter
precedido de una backslash (\). La tabla en
la siguiente diapositiva muestra los
secuencias de escape de Java;
Una o ms secuencias de escape pueden
ser incluidas en los datos de salida que son
pasados a los mtodos println() y
print();
Ferreiras

Java Basico

71

Secuencias de escape
Escape
Sequence

Description

\t

Insert a tab in the text at this point.

\b

Insert a backspace in the text at this point.

\n

Insert a new line in the text at this point.

\r

Insert a carriage return in the text at this point.

\f

Insert a form feed in the text at this point.

\'

Insert a single quote character in the text at this point.

\"

Insert a double quote character in the text at this point.

\\

Insert a backslash character in the text at this point.

Recuperado de http://docs.oracle.com/javase/tutorial/java/data/characters.html

Ferreiras

Java Basico

72

Tipos de datos primitivos en Java


Nombre

Bits

byte

[ -128, +127 ]

short

16

[- 32768, + 32767 ]

int

32

[-2147483648, 2147483647 ]

long

64

[ -9223372036854775808 , + 9223372036854775807 ] 0L

float

32

32-bit IEEE 754 , single-precision floating point

0.0f

double

64

64-bit IEEE 754 , double-precision floating point

0.0d

true Or false

false

16-Bit UNICODE character

'\u0000'

boolean
char

16

Rango

Valor por
defecto

A floating-point literal is of type float if it ends with the letter F or f;


otherwise its type is double, for Example: float s = 1.3; // Error; float s = 1.3f; // OK
Ferreiras

Java Basico

73

El tipo String
El tipo String o tipo cadena es una
secuencia de ceros o mas caracteres
UNICODE;
El valor por defecto del tipo String es
null, como para cualquier objeto en
Java.

Ferreiras

Java Basico

74

String, StringBuilder
La declaracin e inicializacin de un variable tipo String
genera un objeto String.
Los objetos String son inmutables, esto es, su estado
no se puede cambiar despus de creados. Son de solo
lectura.
Internamente, cada vez que se realiza una operacin
sobre un objeto String, en realidad lo que sucede es
que se crea un nuevo objeto String que contiene los
resultados de dicha operacin sobre el objeto String
original.
Ferreiras

Java Basico

75

String, StringBuilder
Se recomienda, si se va a realizar muchas
operaciones sobre un objeto String, usar la clase
StringBuilder para su construccin.
Las cadenas StringBuilder son mutables, esto es, una
vez creados, se pueden modificar cuantas veces sea
requerido, sin que sean creados nuevos objetos
StringBuilder por cada modificacin.
...

Ferreiras

Java Basico

76

package1

En Java, un package es una forma de organizar


grupos de clases.

Un package contiene un conjunto de clases


relacionadas bien por finalidad, por mbito o por
herencia.

Es una forma de hacer libreras de cdigo objeto en


Java.

El nombre de un package es el mismo que el de la


carpeta que contiene los archivos .Java del paquete.
: Ms detalles en el tema package del curso, ms adelante

Ferreiras

Java Basico

77

package
Es un agrupamiento de clases que proporciona
proteccin de acceso y gestin de espacio de nombres.

Resuelve el problema del conflicto entre los nombres de


las clases. Al crecer el nmero de clases crece la
probabilidad de designar con el mismo nombre a dos
clases diferentes.
En un package Las clases tienen ciertos privilegios de
acceso a los miembros dato y a las funciones miembro de
otras clases dentro de un mismo paquete.

Ferreiras

Java Basico

78

API Bsico oficial de Java SE


Es un grupo de unos 200 y tantos
packages, cada uno de los cuales usted
puede acceder en la pagina:
http://docs.oracle.com/javase/8/docs/api/index.html
En este curso usaremos solo una muy pequea cantidad
de los 206, menos de 10 !!
Es recomendable que usted baje este API y lo instale en
su maquina de trabajo con Java. Podra ser que cuando
quiera consultar no tenga disponibilidad de Internet para
conectarse.
Ferreiras

Java Basico

79

API Bsico oficial de Java SE


Es recomendable que usted baje este API y lo instale en su
maquina de trabajo con Java. Podra ser que cuando quiera consultar
no tenga disponibilidad de Internet para conectarse.
Para bajar el API usar un capturador Web. Ver en
http://www.softonic.com/s/capturadores-web
Por ejemplo:
HTTrack WebSite Copier en http://httrack-website-copier.softonic.com/
El cual puede capturar un sitio web a tu disco duro, manteniendo la
estructura de directorios y capturando HTML, imgenes y otros
archivos del servidor.

Ferreiras

Java Basico

80

API Bsico oficial de Java SE


Estas APIs son escritas para ser
usadas por los programadores de
aplicaciones ( nosotros );
Estas APIs son escritas por
programadores de sistemas,
normalmente, usando C++.
Puede usted explicar la diferencias entre esos dos conceptos?

Ferreiras

Java Basico

81

import
Es una forma de incluir libreras (bibliotecas)
de cdigo objeto de Java que esta
almacenado en un package;
Para importar otras bibliotecas se declara
un import con el nombre del paquete que
contiene la librera de inters, al principio del
cdigo fuente.

Ferreiras

Java Basico

82

import

Se puede importar una clase en especfico. Por


ejemplo, del API Java SE 8:

import java.awt.Font;

Se puede importar todas las clases declaradas


pblicas de un paquete completo, usando un
arterisco (*) para reemplazar los nombres de clase
individuales. Por ejemplo, del API Java SE 8:

Ferreiras

import java.awt.*;

Java Basico

83

import

Se puede importar los campos que son final


static, esto es, constantes y los mtodos que
son static en un package. Por ejemplo, del
mismo API:

import static java.lang.Math.*;

Esto ltimo permitira escribir:


double r = cos(PI);
En vez de:
double r =
Ferreiras

Java Basico

Math.cos( Math.PI);
84

import

En Java SE 8, el package
java.lang.*;
Esta importado por defecto.

Ferreiras

Java Basico

85

Estructura general de un
programa simple1 en Java
Esta
actividad
debe
mostrar
el
dominio
del
tema.

<< Hacer AQUI EN VIVO, una


dinmica en vivo de codificacin ( un
cdigo de lgica simple), compilacin y
ejecucin mostrando todos los
conceptos discutidos a partir de este
ttulo >>

1: Esto significa sin trabajar, an, con la definicin


de clases, lo veremos a partir del tema 2Encapsulamiento, constructores
Ferreiras

Java Basico

86

Estructura general de un programa Java


En esta primera parte del curso usaremos la siguiente estructura general de un programa fuente en
Java:
// EstructuraGeneral.java
import <paquete >
import <paquete >
...

public class EstructuraGeneral {

Similar al # include en C++


El paquete podr ser del API estndar de Java
u otro paquete escrito por el programador (Tema
10)

private static tipo <variable1>


public static <mtodo1>
...
// Test-Driver

Obsrvese que el nombre de esta clase, la que


contiene el mtodo main(), o Test-Driver, es el
mismo que el del archivo fuente .java y, adems,
es public ( el modificador de acceso, a ver mas
adelante).

public static void main( String fofi[ ] ) {


<sentencia1>
<sentencia2>
...

} // fin de main()
} // fin de la clase
Ferreiras

En este formato:

Todas la variables es
recomendable que sean private
static; Por encapsulamiento.

Java Basico

Todos los mtodos deben ser


public static; Para poder
accederlos en main solo con el
nombre de la clase.
87

Donde:
public class ProgramaJavaSimple
Es la declaracin de la clase; Las llaves
encierran el cuerpo de la clase que incluye la
lgica principal del programa, junto con otros
bloques de construccin opcionales de una clase.
Es una clase contenedora ( class wrapper );
Observe que el nombre de la clase que contiene
el mtodo main() es el mismo nombre del
archivo con el que usted grada este cdigo fuente.
Ferreiras

Java Basico

88

Donde:
public static void main( String [ ] args )

Sirve como punto de entrada para un programa Java.

args Es un identificador vlido cualquiera, por ejemplo


fofi.

Cuando se ejecuta un programa Java, interpretando los


bycodes con una instancia de la JVM, esta ultima llama el
mtodo main para poner en marcha nuestra aplicacin.

Obviamente, main() tambin puede recibir argumentos


en lnea de comando. Ver ms adelante.
Ferreiras

Java Basico

89

From The Java Tutorial


In the Java programming language, every application must contain
a main method whose signature is:
public static void main(String[] args)
The modifiers public and static can be written in either order (public
static or static public), but the convention is to use public static as shown
above. You can name the argument anything you want, but most
programmers choose "args" or "argv, and fofi as Mr. Ferreiras in DR (-_-).
The main method is similar to the main function in C and C++; it's the entry
point for your application and will subsequently invoke all the other
methods required by your program.

Ferreiras

Java Basico

90

/*
Stdin0.java
jdk1.7.0
Ferreiras / Java / Entrada estandar / Console
*/
import java.io.Console;
public class Stdin0 {
public static void main( String [ ] fofi ) {
Console lector = System.console();
// System.consele() retorna una referencia a un objeto Console, si lo hay.
System.out.println( "\nEntre su nombre completo: " );
String nombre = lector.readLine();
System.out.println( "\nEl nombre : " + nombre );
}
}
Ferreiras

Java Basico

91

/*
C:\Program Files\Java\jdk1.7.0\bin>javac Stdin0.java
C:\Program Files\Java\jdk1.7.0\bin>java Stdin0
Entre su nombre completo:
Filiberto Campoamor Perez Sanchez
El nombre : Filiberto Campoamor Perez Sanchez
C:\Program Files\Java\jdk1.7.0\bin>
*/

Ferreiras

Java Basico

92

/*
Stdin0a.java
jdk1.7.0
Ferreiras / Java / Entrada estandar / Scanner / mextLine()
*/
import java.util.Scanner;
public class Stdin0a {
public static void main( String [ ] fofi ) {
Scanner lector = new Scanner( System.in);
System.out.println( "\nEntre su nombre completo: " );
String nombre = lector.nextLine();
System.out.println( "\nEl nombre : " + nombre );
}
}

Ferreiras

Java Basico

93

/*
C:\Program Files\Java\jdk1.7.0\bin> java Stdin0a
Entre su nombre completo:
PedroAmorCampoFrio del Monte Santana Rosario
El nombre : PedroAmorCampoFrio del Monte Santana Rosario
C:\Program Files\Java\jdk1.7.0\bin>
*/.

Ferreiras

Java Basico

94

main Con Argumentos


From The Java Tutorial
The main method accepts a single argument: an array of
elements of type String.
public static void main(String[ ] args)
This array is the mechanism through which the runtime
system passes information to your application. For
example:
java MyApp arg0 arg1 arg2 ...
Ferreiras

Java Basico

95

/*
SwitchString0a.java
jdk1.7.0
Ferreiras / Java / Switch con String / Usando el tipo String
A partir de Java SE 7, se pude usar un tipo String en la sentencia
switch / case / default, Como veremos en este ejemplo.
Para ejecutar la aplicacin debe escribir, en lnea de comando, lo siguiente:
> java SwitchString0 < un dia de la semana >
Obviamente que sin los < > !!
*/

Ferreiras

Java Basico

96

public class SwitchString0a {


public static void main(String[ ] fofi) {
String diaHoy = fofi[0]; // el primer argumento de la linea de comando.
String unDia = diaHoy.toUpperCase(); // convierte a mayuscula.
switch (unDia) {
case "LUNES":
case "MARTES":
case "MIERCOLES":
System.out.println("\nHoy es " + diaHoy + ", Feliz,A Trabajar, Trabajar, Co... ");
break;
case "JUEVES":
System.out.println("\nHoy es " + diaHoy + " ,Casi fin de semana !!");
break;
case "VIERNES":
System.out.println("\nHoy es " + diaHoy + " ,Por fin ... A Estudiar para Ferreiras!! (~_~)");
break;
case "SABADO":
case "DOMINGO":
System.out.println("\nHoy es " + diaHoy + " ,Feliz como una lombriz, estudiando");
break;
default:
System.out.println("\n" + diaHoy + " No existe, Zoquete || @ !!, Ejecutar de nuevo " );
}
}
}
Ferreiras

Java Basico

97

/*
C:\Program Files\Java\jdk1.7.0\bin> java SwitchString0a SABADO
Hoy es SABADO ,Feliz como una lombriz, estudiando
C:\Program Files\Java\jdk1.7.0\bin>java SwitchString0a lunes
Hoy es lunes, Feliz,A Trabajar, Trabajar, Co...
C:\Program Files\Java\jdk1.7.0\bin>java SwitchString0a MiERcoles
Hoy es MiERcoles, Feliz,A Trabajar, Trabajar, Co...
C:\Program Files\Java\jdk1.7.0\bin>java SwitchString0a Dia de lucha
Dia No existe, Zoquete || @ !!, Ejecutar de nuevo
C:\Program Files\Java\jdk1.7.0\bin>
*/

Ferreiras

Java Basico

98

En Java no hay paso por referencia,


todo es paso por valor
Por ejemplo:
Recordemos que en C++ podemos hacer esto:
// swap0.cpp
// Ferreiras / C++ / funciones / paso por referencia con &
# include <iostream>
using namespace std;
void swap(int &var1, int &var2) { // Paso por referencia
int temp = var1;
var1 = var2;
var2 = temp;
}

Ferreiras

Java Basico

99

En Java no hay paso por referencia,


todo es paso por valor
void usoFuncion(void) {
int x(111);
int y(333);
cout << "\n Valores antes: x = " << x << " y = " << y << endl;
swap( x, y );
cout << "\nValores despues: x = " << x << " y = " << y << endl;
}

Ferreiras

Java Basico

100

En Java no hay paso por referencia,


todo es paso por valor
// Test-driver
int main(void) {
usoFuncion();
}
/*

Perfecto, el swapeo
ocurre exactamente
como esperado.

C:\Borland\BCC55\Bin>swap0
Valores antes: x = 111 y = 333
Valores despues: x = 333 y = 111
C:\Borland\BCC55\Bin>
*/

Ferreiras

Java Basico

101

En Java no hay paso por referencia,


todo es paso por valor

En Java hay que usar algn truco para lograr


algo similar.

Ver mas adelante, en el tema


Encapsulamiento, Constructores, cdigo
fuente del ejemplo PasoPorReferencia0b.java.
En dicho ejemplo, se muestra uno de los tantos
trucos usados en el mundo Java.

Ferreiras

Java Basico

102

En Java no hay paso por referencia,


todo es paso por valor
/*
PasoPorReferencia0b.java
jdk1.7.0_51
Ferreiras / Java / Bsico / Paso por referencia ? NO.
En Java no hay paso por referencia, todo es paso por valor, incluso las
referencias mismas.
Usando una lgica 100 % OO intercambiar los estados entre dos
objetos.
*/

Cdigo a ser mostrado en el tema


Encapsulamiento, Constructores

Ferreiras

Java Basico

103

En Java no hay paso por referencia,


todo es paso por valor
/*
PasoPorReferencia0b.java
C:\Archivos de programa\Java\jdk1.7.0_51\bin>javac PasoPorReferencia0b.java
C:\Archivos de programa\Java\jdk1.7.0_51\bin>java PasoPorReferencia0b
Antes del intercambio:
f1:
X = 222 Y = 333
f2:
X = 555 Y = 888
Despus del intercambio:
f1:
X = 555 Y = 888
f2:
X = 222 Y = 333
C:\Archivos de programa\Java\jdk1.7.0_51\bin>
*/
Ferreiras

Java Basico

104

Arreglos de tamao fijo en Java


Declaracin y asignacin de memoria:
tipoDato nombreArreglo[ ] = new
tipoDato[ elementos ];
Declaracin o Instanciacin

Asignacin de memoria

tipoDato Es el tipo de dato que almacenar el arreglo


nombreArreglo Es la variable para referenciar el arreglo. Solo podr
referenciar el tipo tipoDato establecido en la declaracin.
new En Java los arreglos son objetos que deben ser instanciados
usando el operador new

elementos Es la cantidad mxima de elementos que almacenar el


arreglo

Despus de su declaracin y asignacin de memoria el tamao mximo es


fijo.

Despus de su declaracin y asignacin de memoria hay que hacer la


iniciacin de los elementos.
Ferreiras

Java Basico

105

Arreglos de tamao fijo en Java


Declaracin y asignacin de memoria:
tipoDato nombreArreglo[ ] = new
tipoDato[ elementos ];
Declaracin o Instanciacin

Lo que hace realmente


es declarar un puntero a
un arreglo. Hasta ah no
tiene, an, memoria
asignada

Ferreiras

Java Basico

Asignacin de memoria

Aqu es que se hace la


asignacin de memoria
para los elementos del
arreglo

106

/*
Array0.java
jdk1.7.0
Ferreiras / Java / Arreglos estticos
*/

Ferreiras

Java Basico

107

class Array0 {
public static void main(String[] args) {
// declarar un arreglo de enteros
int arregloEnteros[ ];
// asignar memoria para 10 enteros, usando new
arregloEnteros = new int[10];
// inicializar los elementos
for( int k = 0; k < 10; ++k ) {
arregloEnteros[ k ] = 3 * k + 10;
}
// mostrar los valores almacenados
System.out.println(" " );
for( int j = 0; j < 10; ++j ) {
System.out.println( "arregloEnteros[" + j + " ] " + arregloEnteros[ j ] );
}
}
}

Ferreiras

Java Basico

108

/*
C:\Archivos de programa\Java\jdk1.7.0\bin>java Array0
arregloEnteros[0 ] 10
arregloEnteros[1 ] 13
arregloEnteros[2 ] 16
arregloEnteros[3 ] 19
arregloEnteros[4 ] 22
arregloEnteros[5 ] 25
arregloEnteros[6 ] 28
arregloEnteros[7 ] 31
arregloEnteros[8 ] 34
arregloEnteros[9 ] 37
C:\Archivos de programa\Java\jdk1.7.0\bin>
*/
Ferreiras

Java Basico

109

Arreglos de tamao fijo en Java


La declaracin e inicializacin de los
elementos del arreglo:
tipoDato nombreArreglo[ ] = { valo1, valor2,
valor3, ... };
Declaracin o Instanciacin

Ejemplo, segmento de cdigo:

Inicializacin de los
elementos

//...
double salarioSemanal [ ] = { 1223.45, 3456.23, 345.78,
0.066E+04 } ;
System.out.println("\n" + salarioSemanal[ 3] );
//...
>

> 660.0
Ferreiras

Java Basico

110

Arreglos de tamao fijo en Java


Usando la propiedad intrnseca length se
obtiene la longitud o cantidad de elementos
almacenados en el arreglo.
lenght Es una variable publica del objeto
arreglo.
De acuerdo con la especificacin del lenguaje
Java (10.7. Array Members): The public final
field length, contains the number of
components of the array and may be positive or
zero.
Ferreiras

Java Basico

111

Array0a.java
jdk1.7.0
Ferreiras / Java / Arreglos de tamao fijo en Java
class Array0a {
public static void main(String[] args) {
// declarar e inicializar un arreglo de enteros
int arregloEnteros[ ] = { 10, 22, 33, 44, 55, 66, 77, 88 };
// mostrar los valores almacenados
// Observe que
System.out.println( " " );
length no es una
for( int k = 0; k < arregloEnteros.length; ++k ) {
funcin
System.out.print( arregloEnteros[ k ] + " " );
}
// arregloEnteros[ arregloEnteros.length] = 456; // => Ver # 1
System.out.println( " " );
}
}

Ferreiras

Java Basico

112

/*
C:\Archivos de programa\Java\jdk1.7.0\bin>java Array0a
10 22 33 44 55 66 77 88
C:\Archivos de programa\Java\jdk1.7.0\bin>
+++++++++++++++++++++++++++++
# 1: Si se intenta acceder a un indice mas all de ( length - 1) se
produce un error durante la ejecucin:
ArrayIndexOutOfBoundsException
En el tema Excepciones en Java veremos ese concepto.
*/

Ferreiras

Java Basico

113

Arreglos de tamao fijo en Java


Para copiar arreglos en Java podemos usar el
mtodo arraycopy de la clase System :
public static void arraycopy( Object src, int srcPos,
Object dest, int destPos,
int elements )
src Es el arreglo desde el cual se vas a copiar
dest Es el arreglo hacia el cual se copia
srcPos Es la posicin en el arrego src a partir de la cual se copia
destPos Es la posicin en el arreglo dest a partir de la cual se escribir
lo copiado;
elements Es la cantidad de elementos a ser copiados.

Ferreiras

Java Basico

114

Arreglos de tamao fijo en Java


Arreglos Multidimensionales de Tamao fijo
En java, los arreglos multidimensionales se
consideran arreglos cuyos elementos son tambin
arreglos, permitiendo que las filas varen en tamao.
Se declaran usando [ ] por cada dimensin.
Cada elemento es accedido usando el conjunto
completo de dimensiones, cada una con el ndice
apropiado.

Ferreiras

Java Basico

115

Arreglos de tamao fijo en Java


/*
ArrayMultiDim0.java
jdk1.7.0
Ferreiras / Java / Arreglos / Multidim
No hay que especificar ninguna de las dimensiones.
Las filas pueden variar en longitud.
En C++ habria que especificar, por lo menos, la segunda
dimensin.
*/

Ferreiras

Java Basico

116

Arreglos de tamao fijo en Java


class ArrayMultiDim0 {
public static void main(String[ ] fofi ) {
String[ ][ ] puestos = {
{ "Daniel Reyes", "Wilfredo Mojica" },
{ "Maria Lopez" , "Antonio Guzman"
, "Luisa Soriano" },
{ "Quimico"
, "Ayudante Produccion", "Enc Almacen" },
{ "Contador"
, "Mecanico"
, "Programador" , "Analista" },
};
System.out.println( puestos[0][0] + " " + puestos[1][0]);
System.out.println( puestos[0][1] + " " + puestos[1][1]);
System.out.println( puestos[1][2] + " " + puestos[3][3]);
// System.out.println( puestos[0][2] + " " + puestos[2][0]);
}
}

Ferreiras

Java Basico

117

Arreglos de tamao fijo en Java


C:\Archivos de programa\Java\jdk1.7.0\bin>javac ArrayMultiDim0.java
C:\Archivos de programa\Java\jdk1.7.0\bin>java ArrayMultiDim0
Daniel Reyes Maria Lopez
Wilfredo Mojica Antonio Guzman
Luisa Soriano Analista
C:\Archivos de programa\Java\jdk1.7.0\bin>
++++++++++++++++++++++++++++++++++++++++
System.out.println( puestos[0][2] + " " + puestos[2][0]);
Produce en tiempo de ejecucion el error ArrayIndexOutOfBoundsException.
Explicar a su profesor la causa de dicho error.

Ferreiras

Java Basico

118

Arreglos de tipos mixto de objetos 1

En Java, los elementos de un arreglo pueden ser objetos de diferentes


tipos, esto es, el arreglo puede ser de tipos mezclados.
Para lograrlo, se debe usar Object como el tipo del arreglo.

Lo anterior es posible porque, en Java, todas las clases heredan de la


clase Object y para los tipos primitivos se pueden usar sus respectivas
wrapper classes (Integer, Double, Long, Byte, ..., ver Class Number en el
API )
La clase Object es la raiz de la jerarquia de clases del API de Java. Cada
clase tiene a Object como su superclase. Todos los objetos, incluyendo los
arreglos implementan los mtodos de esta clase.

Ver ejemplos arregloObj.java


1

: A ver despus del tema 02-Encapsulamiento, Constructores


Ferreiras

119

/*
ArregloObject0.java
Ferreiras / Java / Arreglo de objetos con diferentes tipos
En Java, los elementos de un arreglo pueden ser objetos de
diferentes tipos, esto es, el arreglo puede ser de tipos mezclados.
Para lograrlo, se debe usar Object como el tipo del arreglo.
*/

Ferreiras

Java Basico

120

ArregloObject0.java
class A {
private static String x;
public A(String x ) { this.x = x; }
public static String getX() { return x; }
} // fin de la clase A
class B {
private static double x;
public B( double x ) { this.x = x; }
public static double getX() { return x; }

OBSERVESE: El uso de static es


para poder acceder a los
miembros de la clase con solo el
nombre de la clase.
Esto es as porque Objet no tiene
definido los mtodos de inters en
cada clase.

} // fin de la clase B
class C {
private static int x;
public C( int x ) { this.x = x; }
public static int getX() { return x; }
} // fin de la clase C

Ferreiras

Java Basico

121

ArregloObject0.java
// Tester-class
public class ArregloObject0 {
public static void main(String [ ] fofi ) {
Object arrObj [ ] = new Object[5];
arrObj[0] = new A("Curso de Java con los colegas profesores");
arrObj[1] = new B(0.000000000456e+10);
arrObj[2] = new C(12345);
// Mostrar el contenido de cada elemento en el arreglo
System.out.println("\nEn el elemento [0] hay: " + A.getX() );
System.out.println("\nEn el elemento [1] hay: " + B.getX() );
System.out.println("\nEn el elemento [2] hay: " + C.getX() );
}
}

Ferreiras

Java Basico

122

ArregloObject0.java
/*
C:\Archivos de programa\Java\jdk1.7.0_51\bin>javac
ArregloObject0.java
C:\Archivos de programa\Java\jdk1.7.0_51\bin>java ArregloObject0
En el elemento [0] hay: Curso de Java con los colegas profesores
En el elemento [1] hay: 4.56
En el elemento [2] hay: 12345
C:\Archivos de programa\Java\jdk1.7.0_51\bin>
*/

Ferreiras

Java Basico

123

Bucle for Mejorado en Java


Usado para iterar sobre un arreglo o una Collection
Su sintaxis general es:
for ( tipoDelArreglo elemento :
nombreArreglo ) {
// operaciones elemento
}
Es equivalente al siguiente for normal:

Elemento es un ID del
tipo del arreglo, usado
para recorrerlo

for (int i = 0; i < nombreArreglo.length;


i++) {
tipoDelArreglo elemento =
nombreArreglo[i];
//...
}
Ferreiras

Java Basico

124

Bucle for Mejorado en Java

Un ejemplo ( segmento de cdigo )

Sucesivamente, elemento va
double[ ] arreglo = {1.2, 3.0, 0.8};
obteniendo el valor
int suma = 0;
almacenado en cada uno de
for (double elemento : arreglo) los
{ elementos del arreglo
sum = suma + elemento;
}

Restricciones en el uso:
Slo acceso. Los elementos no pueden ser asignados a, por
ejemplo, para incrementar cada elemento en una coleccin.
Slo una sola estructura. No es posible atravesar dos estructuras a la
vez, por ejemplo, para comparar dos arreglos.
Slo un solo elemento. Utilice nicamente para el acceso de un solo
elemento, por ejemplo, no comparar elementos sucesivos.
Slo hacia adelante. Es posible repetir slo hacia adelante por pasos
individuales.

Ferreiras

Java Basico

125

Bucle for Mejorado en Java


Accede a cada uno de los elementos de un
arreglo o de una coleccin ( a ver en el tema
de collection ) sin expresar la manera explcita
de cmo se recorren dichos elementos.
No trabaja con objetos Iterator ( a ver mas
adelante en la clase Iterator )
El bucle es ms compacto y ms fcil de
leer.
El siguiente segmento de cdigo explica su
sintaxis y uso.
Ferreiras

Java Basico

126

Bucle for Mejorado en Java


Ejemplo ( segmento de cdigo ) :
//...
class ForMejorado {
public static void main(String[ ] fofi ) {
int arregloEnteros[ ] = { 1,2,3,4,5,6,7,8,9,10 };
for ( int elemento : arregloEnteros) {
System.out.print( elemento + );
}

La variable elemento
almacena el valor actual
del
arregloEnteros[i],
en el rango [ 0, 9 ]

}
}
//...

Producir la salida:
1 2 3 4 5 6 7 8 9 10
Ferreiras

Java Basico

127

Bucle for Mejorado en Java


/*
Arreglo3.java
jdk1.7.0
Ferreiras / Java / Bucle for mejorado de Java
*/
public class Arreglo3 {
public static void main( String [ ] fofi ) {
String arreglo [ ] = { " Wilfredo Mojica", " Daniel Reyes", " Francisca Fong" };
System.out.println("\n");
// for ( String elemento : arreglo ) { => Ver # 1
for ( String elemento : arreglo ) {
System.out.println( elemento);
}
}

elemento y arreglo
deben ser del mismo
tipo

Ferreiras

Java Basico

128

Bucle for Mejorado en Java


C:\Archivos de programa\Java\jdk1.7.0\bin> java Arreglo3
Wilfredo Mojica
Daniel Reyes
Francisca Fong
C:\Archivos de programa\Java\jdk1.7.0\bin>

# 1 ) (/ - ): elemento y arreglo deben ser del mismo tipo.


Arreglo3.java:18: error: incompatible types
for ( int elemento : arreglo ) {
^
required: int
found: String
1 error

Ferreiras

Java Basico

129

El tipo Array
Class Array
http://docs.oracle.com/javase/7/docs/api/index.html
java.lang.Object
java.lang.reflect.Array
public final class Array extends Object
The Array class provides static methods to dynamically create and
access Java arrays.
Pendiente para
Arrays no tiene constructores !!
desarrollar

Ferreiras

Java Basico

130

El tipo Arrays
Class Arrays
http://docs.oracle.com/javase/7/docs/api/index.html
java.lang.Object
java.util.Arrays

Pendiente para
desarrollar ms

public class Arrays extends Object


This class contains various methods for manipulating
arrays (such as sorting and searching). This class also
contains a static factory that allows arrays to be viewed
as lists.

Ferreiras

Java Basico

131

El tipo Arrays
La clase java.util.Arrays del API de Java
contiene varios mtodos static para ordenar los
elementos de un arreglo, hacer bsqueda de un
elemento dado en el arreglo, comparar arreglos
y llenar los elementos de un arreglo con un
valor dado.
Todos esos mtodos son sobrecargados para
todos los valores de tipo primitivo de Java.
Arrays no tiene constructores !!
Ferreiras

Java Basico

132

El tipo Arrays
Some methods in the Class Arrays
public static int binarySearch(Object[] a, Object key)
Searches the specified array of Object ( Byte, Int , double etc) for the specified value
using the binary search algorithm. The array must be sorted prior to making this call.
This returns index of the search key, if it is contained in the list; otherwise, (-(insertion
point + 1).
public static boolean equals(long[] a, long[] a2)
Returns true if the two specified arrays of longs are equal to one another. Two arrays
are considered equal if both arrays contain the same number of elements, and all
corresponding pairs of elements in the two arrays are equal. This returns true if the two
arrays are equal. Same method could be used by all other premitive data types ( Byte,
short, Int etc.)
public static void fill(int[] a, int val)
Assigns the specified int value to each element of the specified array of ints. Same
method could be used by all other premitive data types ( Byte, short, Int etc.)
public static void sort(Object[] a)
Sorts the specified array of objects into ascending order, according to the natural
ordering of its elements. Same method could be used by all other premitive data types
( Byte, short, Int etc.)

Ferreiras

Java Basico

133

El tipo Arrays
/*
Arreglo4.java
jdk1.7.0
Ferreirar / Java / Clase Arrays
*/

Ferreiras

Java Basico

134

El tipo Arrays
import java.util.Arrays;
public class Arreglo4 {
public static void main( String [ ] fofi ) {
String arreglo [ ] =
{ " Wilfredo Mojica", " Daniel Reyes", " Francisca Fong" };
System.out.println("\n* Arreglo sin ordenar\n");
for ( String elemento : arreglo ) {
System.out.println( elemento);
}
Arrays.sort( arreglo );
System.out.println("\n* Arreglo ordenado\n");
for ( String elemento : arreglo ) {
System.out.println( elemento);
}
}
}

Ferreiras

Java Basico

135

El tipo Arrays
C:\Archivos de programa\Java\jdk1.7.0\bin>javac Arreglo4.java
C:\Archivos de programa\Java\jdk1.7.0\bin>java Arreglo4
* Arreglo sin ordenar
Wilfredo Mojica
Daniel Reyes
Francisca Fong
* Arreglo ordenado
Daniel Reyes
Francisca Fong
Wilfredo Mojica
C:\Archivos de programa\Java\jdk1.7.0\bin>

Ferreiras

Java Basico

136

El tipo Vector<E>
La clase java.util.Vector<E> implementa un
arreglo de objetos E que se puede expandir despus de
creado.
Sus elementos pueden ser accedidos utilizando un
ndice entero al travs del mtodo
nombreVector.get(indice);
nombreVector[indice] NO FUNCIONA !!
El tamao de un Vector<E> puede aumentar o disminuir
segn sea necesario para acomodar la adicin y
eliminacin de elementos.
Ferreiras

Java Basico

137

El tipo Vector<E>
La clase Vector<E> est en el package java.util;
Un objeto Vector<E> es un arreglo dinmico que puede crecer
automticamente de acuerso la necesidad requerida de
almacenamiento;
Un objeto Vector<E> no requiere tener un tamao fijo;
Un objeto Vector<E> usa su metodo add() para agregar un elemento
despus del ltimo;
Un objeto Vector<E> usa su mtodo add(index, valor) para agregar un
elemento en la posicin cuyo ndice sea index;
Un objeto Vector<E> usa su mtodo get(index) para obtener el dato
almacenado en el elemento cuyo ndice es index
Un objeto Vector<E> usa su mtodo size() para obtener la cantidad de
elementos actual que contiene
Ver en el API de Java SE 7 mas mtodos de la clase Vector<E>
Ferreiras

Java Basico

138

El tipo Vector<E>
/*
Vector0a.java
jdk1.7.0
Ferreiras / JAVA / Vector<E>
<E> Es el tipo de los elementos objetos que almacenara el Vector
Por ejemplo, String, Integer, Object, ...
*/

Ferreiras

Java Basico

139

El tipo Vector<E>
import java.util.Vector; // Observe que no es import java.util.Vector<E>;
public class Vector0a {
public static void main(String[ ] fofi ) {
Vector<String> paises = new Vector<String>();
// add elementos String al Vector
paises.add(" Antigua y Bermuda");
paises.add(" Reino de Arabia Saudi");
paises.add(" Republica Democratica y Popular de Argelia");
paises.add(" Republica de Angola");
paises.add(" Monarquia Absoluta Islamica");
// Vemos la capacidad y cantidad actual
System.out.println("\nCapacidad = " + paises.capacity() + " Cantidad =
+ paises.size() );
// Vemos el contenido del Vector
for ( int j = 0; j < paises.size(); ++j ) {
System.out.println( "paises[" + j + "] " + paises.get(j) );
}
Ferreiras

Java Basico

140

El tipo Vector<E>
// add un elemento en el indice 3
paises.add( 3, " Estado de Camboya");
// Vemos la capacidad y cantidad actual
System.out.println("\nCapacidad = " + paises.capacity() + " Cantidad = "
+ paises.size() );
// Vemos el contenido del Vector
for ( int j = 0; j < paises.size(); ++j ) {
System.out.println( "paises[" + j + "] " + paises.get(j) );
}
}
}

Ferreiras

Java Basico

141

El tipo Vector<E>
C:\Program Files\Java\jdk1.7.0\bin>javac Vector0a.java
C:\Program Files\Java\jdk1.7.0\bin>java Vector0a
Capacidad = 10 Cantidad = 5
paises[0] Antigua y Bermuda
paises[1] Reino de Arabia Saudi
paises[2] Republica Democratica y Popular de Argelia
paises[3] Republica de Angola
paises[4] Monarquia Absoluta Islamica
Capacidad = 10 Cantidad = 6
paises[0] Antigua y Bermuda
paises[1] Reino de Arabia Saudi
paises[2] Republica Democratica y Popular de Argelia
paises[3] Estado de Camboya
paises[4] Republica de Angola
paises[5] Monarquia Absoluta Islamica

Observe que al
agregar Estado de
Camboya en el ndice
3, la Republica de
Angola se desplazo al
ndice 4.

C:\Program Files\Java\jdk1.7.0\bin>
Ferreiras

Java Basico

142

Java Programming Style


Guidelines
Java Programming Style Guidelines
Version 6.3, January 2011
Geotechnical Software Services
Copyright 1998 - 2011
This document is available at
http://geosoft.no/development/javastyle.html
Es su responsabilidad descargar este
documento y tenerlo disponible para consulta.
Ferreiras

Java Basico

143

Ejemplos y Ejercicios
Ver en el grupo:
JavaBasicoEjemplos.zip
JavaBasicoEjercicios.doc

Ferreiras

Java Basico

144

Referencias

Java SE 8 for the Really Impatient; Cay S. Horstmann; Addison-Wesley Professional,1st.


edition, 2014

Java SE8 for Programmers; Paul Deitel, Harvey Deitel; Deitel Developer Series; Prentice Hall;
3 edition, 2014

The Java Language Specification; Java SE 7 Edition; James Gosling, Bill Joy, Guy Steele.
Gilad Bracha, Alex Buckley

http://docs.oracle.com/javase/specs/jls/se7/html/index.html

Compiladores: Principios, Tcnicas y Herramientas; Alfred V. Aho, Rave Sethi, Jeffrey D.


Ullman; Addsion-Wesley Iberoamericana, 1990.
Lesson: Language Basics
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/index.html

Ferreiras

Java Basico

145

Ferreiras

Java Basico

146

Das könnte Ihnen auch gefallen