![]() |
Curso
JAVA |
|
www.bit.es - Calendario de cursos - Solicitud de información |
Curso
Java
Curso Analista Programador
entorno Java
Objetivos de la Unidad:
APIs:
2.1 Referencias
bibliográficas:
Java Pro (http://www.java-pro.com)
Java Developer's Journal (http://www.javadevelopersjournal.com) de la potente editorial www.sys-con.com
Java Report (http://www.javareport.com)
Java Magazine (revista española)
(http://www.prensatecnica.com)
XML Journal (http://www.xml-journal.com)
Javaworld (http://www.javaworld.com)
Javalobby (http://www.javalobby.org) - Es una asociación de ámbito
mundial con vocación de grupo de presión.
2.2 Máquina Virtual Java
Los
ficheros compilados .class contienen código máquina (bytecodes). Sin embargo sobre
PC no es un código máquina Intel, sino que es un código máquina Java. Por ello
se dice que Java es interpretado por p-code.
Una lista de máquinas virtuales
Java con los enlaces para descargarlas se puede encontrar en http://en.wikipedia.org/wiki/List_of_Java_virtual_machines
Para una introducción de cómo son los bytecodes del lenguaje máquina de Java
se puede consultar http://www.javaworld.com/javaworld/jw-09-1996/jw-09-bytecodes.html. Una lista de los opcodes se puede encontrar
en la especificación oficial
http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html
Al igual que en otros lenguajes Java
es descompilable si no se toma ninguna precaución. Se puede encotrar más información
al respecto en http://www.devdaily.com/java/edu/pj/pj010021/
Java compilado en código nativo
La
característica de lenguaje p-code ofrece unas características de portabilidad
fabulosas. Sin embargo es posible que en algunos casos sea necesaria una velocidadd
de ejecución superior.
Existen compiladores compiladores que generan ejecutables
nativos como JET (http://www.excelsior-usa.com) que genera código nativo para sistemas
embedded sobre diversos procesadores. Otra vía es generar código C a partir de
Java. Es esta línea está Toba. Se puede obtener en http://www.cs.arizona.edu/sumatra/toba/
Una nueva línea emergente es
la de los procesadores que soportan Java. Sun ha anunciado que en un futuro habrá
una interesante gama de procesadores que ejecutarán el código máquina de Java
en modo nativo. En esta línea también está AuroraVLSI. (http://vodka.auroravlsi.com) que ofrece ya Java en silicio.
Multiplataforma
Java está disponible para numerosos sistemas operativos y plataformas. Una recopilación de ellas se puede encontrar en http://www.geocities.com/marcoschmidt.geo/java.html
La utilización de
Java en UNIX/Linux y Windows es bastante similar. Con el comando javac se compila
y con java, jre o jview (JVM de Microsoft) se invoca la ejecución. Como regla
general se puede decir que lo que en formato MS-DOS son "punto y coma"
(separaciones en PATH o CLASSPATH) en UNIX son "dos puntos".
IBM ha desarrollado un producto Open Source denominado Jikes (http://www.jikes.org)
que consiste en un compilador de Java.
Para
AS/400 la sintaxis es distinta. IBM ha puesto en marcha una iniciativa Open Source
denominada JTOpen que permite la integración desde Linux, Unix o Windows con la
plataforma AS mediante Java. La
información general del AS/400 Toolbox for Java está en http://www.as400.ibm.com/toolbox.
Para Apple Macintosh en http://www.apple.com/java se explica cómo operar con el MRJ (Traducido:
JDK para Mac)
Para Silicon Graphics la página de JDKs Java está en http://www.sgi.com/products/evaluation
HP/Compaq juega la carta de la anticipación en su misma línea de siempre. Desarrolló Java de 64 bits antes que Sun tal y como se indica en http://www.compaq.com/java
Y en caso de no disponer de Java en un momento dado se pueden utilizar compiladores Java vía Web tal como http://javaboutique.webdeveloper.com/compiler.html
Nota para el resto de apartados de esta Unidad
2.3 Tipos de datos primitivos
Boolean
Char
Tipos
enteros
Tipos coma flotante
...
double x = 1234.1234
DecimalFormat df =
new DecimalFormat("#,##0.##");
System.out.println(df.format(x));
...
La salida es según
nuestro Locale
1.234,12
También podría separarse la creación del
formateador respecto a la selección del patrón a aplicar:
...
double x = 1234.1234
DecimalFormat df = new DecimalFormat();
df.applyPattern("#,##0.##");
System.out.println(df.format(x));
...
Para utilizar directamente la puntuación de la localización del sistema (en nuestro caso cambio de puntos por comas y viceversa) podría utilizarse applyLocalizadPattern("#.##0,##")Para obtener un formateador localizado se puede utilizar:
NumberFormat nf = NumberFormat.getInstance(Locale.ITALIAN);
Para el ámbito español se puede utilizar Locale.ITALIAN o Locale.FRENCHNo siempre es necesario utilizar un patrón. Para establecer el mínimo y el máximo número de decimales a mostra la clase NumberFormat (base de DecimalFormat) dispone de los métodos setMinimumFractionDigits(int) y setMaximumFractionDigits(int)
Tipos
no primitivos (Reference types)
Strings
public class PruebaCadenas extends Applet
{
public void paint( Graphics g )
{
String
s="Hola";
char bs[];
bs = s.toCharArray(); // pasa de String a char[]
bs[2] = 'z';
// String.valueOf(obj) convierte obj a String
g.drawString( String.valueOf(bs), 25, 25 );
// se imprime "Hoza"
}
}
2.4 Control de flujo y operadores
Los lenguajes C, C++, JavaScript
y Java utilizan la misma sintaxis para las estructuras de control de flujo (estructuras
algorítmicas)
Estructura alternativa en pseudocódigo:
Si
condicion entonces
acción
1
sino
acción 2
fin
si
Estructura alternativa en Java (estilo Whitesmith, tipo "industrial"):
if
(condición)
{
acción 1
}
else
{
acción 2
}
Estructura
alternativa en Java (estilo Kernel, tipo "académico"):
if
(condición){
acción 1
}else{
acción
2
}
Estructura repetitiva en pseudocódigo:
mientras
condicion hacer
acción
fin mientras
Estructura repetitiva en Java (estilo Whitesmith):
while
(condición)
{
acción 1
}
Estructura
repetitiva en Java (estilo Kernel):
while
(condición){
acción 1
}
Otras
Las estructuras Para i = 0 hasta n-1 paso p corresponden
a for(i = 0; i
< n; i+=p)
Las estructuras tipo Do Case corresponden en Java
a la switch(opcion){...
Operadores relacionales
y lógicos:
if
(x == 3) //
Si x = 3 entonces
if (x != 3) //
Si x <> 3 entonces
if (x > 4 && y <= 3) //
Si x > 4 Y y <= 3 entonces
if (x > 4 || y < 3) //
Si x > 4 O y < 3 entonces
if (!(x > 4 && y < 3))
// Si NO(x > 4 Y y < 3) entonces
2.5 Arrays
int x[] = {2, 5, 41, 0, 8};
String s[] = {"Hola", " que", " tal"};
int x[] = new int[5];
int array2D[][] = {{2, 3, 0}, {1, -3, 5}};
int arrat2D[][] = new[2][3];
String paramInfo[][] ={ {"-d", "blanco", "30"},
{"-f", "negro", "10"} };
int[] x = {2, 5, 41, 0, 8};
String[] s = {"Hola", " que", " tal"};
int[] x = new int[5];
int[][] array2D = {{2, 3, 0}, {1, -3, 5}};
int[][] arrat2D = new[2][3];
String[][] paramInfo ={ {"-d", "blanco", "30"},
{"-f", "negro", "10"} };
Si se intenta acceder fuera de los límites del array se lanza una excepción tipo ArrayIndexOutOfBoundsException
for(i=0;
i<4; i++)
for(j=0; j<5; j++)
{
twoD[i][j] = k;
k++;
}
for(i=0; i<4; i++)
{
for(j=0; j<5; j++)
System.out.print(twoD[i][j]
+ " ");
System.out.println();
}
}
}
// alternativa de reserva de memoria por etapas
int
twoD[][] = new int[4][];
twoD[0] = new int[5];
twoD[1] = new int[5];
twoD[2] = new int[5];
twoD[3] = new int[5];
class
TwoDAgain
{
public static void main(String args[])
{
int twoD[][] = new int[4][];
twoD[0] = new int[1];
twoD[1] = new int[2];
twoD[2] = new int[3];
twoD[3] = new int[4];
int i, j, k = 0;
for(i=0; i<4; i++)
for(j=0; j<i+1; j++)
{
twoD[i][j] = k;
k++;
}
for(i=0; i<4; i++) {
for(j=0; j<i+1;
j++)
System.out.print(twoD[i][j]
+ " ");
System.out.println();
}
}
}
//
Alternativa de inicialización
class Matrix
{
public static
void main(String args[])
{
double m[][] =
{
{ 0*0, 1*0, 2*0,
3*0 },
{ 0*1, 1*1, 2*1, 3*1 },
{ 0*2, 1*2, 2*2, 3*2 },
{ 0*3, 1*3, 2*3, 3*3
}
};
int i, j;
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
System.out.print(m[i][j]
+ " ");
System.out.println();
}
}
}
//
Array tridimensional
class threeDMatrix
{
public static
void main(String args[])
{
int threeD[][][]
= new int[3][4][5];
int i, j, k;
for(i=0; i<3; i++)
for(j=0; j<4; j++)
for(k=0; k<5; k++)
threeD[i][j][k] = i * j * k;
for(i=0; i<3; i++)
{
for(j=0; j<4; j++)
{
for(k=0; k<5; k++)
System.out.print(threeD[i][j][k] + " ");
System.out.println();
}
System.out.println();
}
}
}
Nuevos operadores respecto
C
if (x instanceof String)
{...
Lenguajes de script en Java
Hay varias iniciativas de scripting basado en Java. Rhino (http://www.mozilla.org/rhino) es un intérprete de JavaScript desarrollado en Java que permite ser utilizado tanto desde un shell propio con posibilidad de usar classes de Java como incorporar en nuetro código Java un objeto intérprete de JavaScript. En la Unidad 12 se muestra un ejemplo de como evaluar expresiones de forna dinámica.
2.6 Programas tipo cónsola que no se detienen
class HolaMundo
{
public static void main(String args[])
{
String a;
a = "pep";
System.out.println("Hola mundo");
System.in.read();
}
}
¿Por
qué del error? Las funciones pueden retornar valores o lanzar excepciones
System.out.println("Hola mundo");
System.in.read();
}
}