Curso JAVA
Unidad 2: "Aspectos básicos del
lenguaje"
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)
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://www.nomagic.com/magicdrawuml/jvm_list.html
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
http://www.meurrens.org/ip-Links/Java/codeEngineering/jonMeyer/index3.html
Al igual que en otros lenguajes Java es
decompilable 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), como JOVE (http://www.instantiations.com) para procesadores Intel o como FastJ
(http://www.ddi.com/products/fastjdescription.htm) 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á Patriot Scientific Corp. (http://www.ptsc.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, Win95 y
NT 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.
Puede encontarse una introducción en http://www.ddj.com/articles/2000/0065/0065i/0065i.htm. 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/developers/devtools/languages/java.html
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();
}
}
Unidad Anterior Unidad siguiente
Copyright DENVIR STUDIOS ®
Lima - Perú, 2002