sun certified java programmer (scjp) capÍtulo 10: development

27
SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Upload: dianne

Post on 23-Jan-2016

48 views

Category:

Documents


0 download

DESCRIPTION

SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT. Compiling with javac. javac [options] [source files]. [options] y [source files] son partes opcionales del comando, y ambas permiten multiples entradas. Ej: javac -help javac -classpath com:. -g Foo.java Bar.java. argument. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

SUN CERTIFIED JAVA PROGRAMMER (SCJP)

CAPÍTULO 10: DEVELOPMENT

Page 2: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Compiling with javac

javac [options] [source files]

[options] y [source files] son partes opcionales del comando, y ambas permiten multiples entradas. Ej:

javac -helpjavac -classpath com:. -g Foo.java Bar.java

option optionargument

Source files

Page 3: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Compiling with -d

La opcion -d option permite decirle al compilador en que directory se colocarán lo archivos .class que este genera (d is fordestination). Ej:myProject||--source| || |-- MyClass.java||-- classes||-- cd myProject

javac -d classes source/MyClass.java

Page 4: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Compilando con -d

package com.wickedlysmart;public class MyClass { }

javac -d classes source/com/wickedlysmart/MyClass.java

Page 5: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Compiling with -d

package com.wickedlysmart;public class MyClass { }

And the following command (the same as last time):

javac -d classes source/com/wickedlysmart/MyClass.java

El compilador construye dos directorios llamados com y com/wickedlysmart para colocar el resltado MyClass.class dentro del paquete correcto (com/wickedlysmart/).

Page 6: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Launching Applications with java

java [options] class [args]

Se debe especificar exactamente un archivo a ejecutar, y el comando java asume que se trata de un .class, por ello no se debe especificar la extension en la línea de comando.

cd My Project/classes

java -DmyProp=myValue MyClass x 1

-D Agregamos una propiedad

Page 7: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Using System Properties

Java 5 tiene una clase llamada java.util.Properties que puede ser usada para acceder a informacion del sistema como: las versiones actuales del sistema operativo, del compilador java y de la maquina virtual. Además provee información default, y se puede también añadir propiedades.

java -DcmdProp=cmdVal TestPropsjava -DcmdProp="cmdVal take 2" TestProps

El método getProperty() es usado para retornar una propiedad. Esté puede ser invocado con un argumento simple (un string que representa el key), o puede ser invocado con dos arguments (un String que representa el key, y un valor String default para ser usado como la propiedad si esta aun no existe). En ambos casos, getProperty() retorna la propiedad como String

Page 8: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Handling Command-Line ArgumentsDeclaraciones legales paa main():• static public void main(String[] args)• public static void main(String... x)• static public void main(String bang_a_gong[])

Page 9: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Searching for Other Classes

• El siguiente caso común se da cuando nosotros queremos compilar un archivo o correr una clase que usa otras clases, creadas fuera de lo que la Sun provee.

• Recordar que para cualquier clase dada, la máquina virtual necesitará encontrar exactamente las mismas clases que el compilador javac necesitará encontrar en tiempo de compilación.

• En otras palabras, si javac necesita acceder a java.util.HashMap entonces el comando java también necesitará acceder a java.util.HashMap.

Page 10: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Searching for Other Classes

Java y javac usan el mismo algoritmo básico de búsqueda:

• 1. Ambos tienen las mismas listas de lugares (directorios) para buscar clases.• 2. Ambos buscan a través de la listas de directorios en el mismo orden.• 3. Cuando encuentran la clase paran la búsqueda de esa clase. En el caso que sus

listas de búsquedas contengan dos o más achivos, el primer archivo encontrado será el usado.

• 4. El primer lugar en el que buscan es en los directoros que contienen las clases estandares que vienen con J2SE.

• 5. El segundo lugar es en los directorios definidos por los classpaths.• 6. Classpaths “directorios de búsqueda de clases." Son listas de directorios en los

cuales las clases pueden ser encontradas.• 7. Estos son lugares donde los classpaths pueden ser encontrados:

o Un classpath puede ser declarado como una variable de ambiente del sistema operativo.o El classpath declarado aquí es usado por default, cuandoquiera que java o javac sean

invocados.o Un classpath puede ser declarado como una opción en línea de comando para java o

javac.o Classpaths declarado como command-line sobreescribe el classpath declarado como

vaiable de ambiente, pero ellos persisten solo durante la invocación.

Page 11: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Declaring and Using Classpaths• Classpaths consiten en variables de

locaciones de directorios, separados por delimitadores. o For Unix: -classpath /com/foo/acct:/com/fooo For Windows: -classpath com\foo\acct;com\foo

• Específica dos directorios en los cuales las clases pueden ser encontradas: /com/foo/acct y /com/foo.

• En ambos casos, estos directorios son absolutamente ligados a la raíz del sistemas de archivos.

• La mayor parte del examen usará convenciones Unix.

Page 12: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Declaring and Using Classpaths• Por default los comandos javac y java no buscan los

archivos .class en el directorio actual. Se debe especificar que busque ahí.

• El modo para decirle a java o javac que busuqe en el directorio actual es añadir un (.) al classpath:

-classpath /com/foo/acct:/com/foo:.

Page 13: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Declaring and Using Classpaths• Classpaths son búscados de izquierda a derecha. Por

lo tanto habrá diferentes resultados en una situación donde existen nombres de clases duplicados en diferentes directorios definidos por el classpath.

-classpath /com:/foo:. No es lo mismo que:

-classpath .:/foo:/com

• Finalmente el comando java permite abreviar classpath con -cp. La documentación de java es inconsistente en si javac permite la abreviación –cp. En la mayoría de máquinas virtuales si lo es, pero esto no está garantizado.

Page 14: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Packages and Searching

• Una vez que una clase está dentro de un paquete, el paquete es parte de su nombre completo — este nunca puede ser dividido. No se puede dividir en una línea de comandos, ni se puede dividir en un import.

Page 15: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Packages and Searching

• El import statement es como un alias para el nombre completo. Se define el nombre completo para la clase con un import statement (o con un wildcard en un import statement del paquete).

• Una vez definido el nombre completo, se puede usar el alias en el código ------ pero el alias se refiere siempre al nombre completo.

• javac -classpath classes -d classes source/Another.java• Cuando se usa un classpath, el último directorio en le path debe ser el super-

directory del directorio raiz del paquete. En el ejemplo anterior, classes es el directorio raiz para el paquete com.foo

Page 16: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Relative and Absolute Paths

• Cada path en un classpath es absoluto o relativo.

• Un path absoluto en Unix inicia con un slash (/) (en windows c:\).

• El slash al inicio indica que este path esta iniciando desde el directorio raiz del sistema.

• Un path relativo es lo que no inicia desde la raiz

Page 17: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Relative and Absolute Paths

Page 18: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Relative and Absolute Paths

Page 19: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

JAR Files and Searching

• JAR son usados para comprimir datos y archivar.

• Crear un jaro jar -cf MyJar.jar myApp

• Ver el contenido de un jaro jar -tf MyJar.jar

Page 20: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

JAR Files and Searching

• Encontrar un archivo jar usando un classpath es similar a encontrar un archivo de un paquete.

• La diferencia es que cuando se especifica un path para un jar, se debe incluir el nombre del jar al final del path.

Page 21: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

• javac -classpath ws/myApp.jar UseStuff.java

• javac -classpath ws UseStuff.java

Page 22: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT
Page 23: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Using .../jre/lib/ext with JAR files• Buried deep inside of your Java directory tree

is a subdirectory tree named jre/lib/ext. If you put JAR files into the ext subdirectory, java and javac can find them, and use the class files they contain.

• Sun recommends, however, that you use this feature only for your own internal testing and development, and not for software that you intend to distribute.

Page 24: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Using Static Imports

• En Java 5, el import statement fue mejorao para proveer mayor capacidad de reduccion de escritura.

• Esta nueva caractrísitica es conocida como static imports.

• Static imports pueden ser usados cuando se desee usar miembros de una clase estática.

Page 25: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Using Static Imports

Antes de static imports:public class TestStatic {public static void main(String[] args) {System.out.println(Integer.MAX_VALUE);System.out.println(Integer.toHexString(42));}}

Después de static imports:import static java.lang.System.out; // 1import static java.lang.Integer.*; // 2public class TestStaticImport {public static void main(String[] args) {out.println(MAX_VALUE); // 3out.println(toHexString(42)); // 4}}

Page 26: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Using Static Imports

• 1. La sintaxis debe ser import static, seguido del nombre completo del miembro estático que se quiera importar o un wildcard(*).

• 2. En este caso se podría querer usar muchos de los miembros de la clase java.lang.Integer class. El static import statement usa el wildcard para decir “Yo quiero hacer un static imports de todos los miembros estáticoas de esta clase."

• 3. Podemos ver las ventajas de static import! No debemos tipear el System en System.out.println.

• 4. No tipeamos el Integer en Integer.MAX_VALUE. • Así en está lineas de código somos capaces de usar un

shortcut para un método y una constante estática.

Page 27: SUN CERTIFIED JAVA PROGRAMMER (SCJP) CAPÍTULO 10: DEVELOPMENT

Using Static Imports

Algunas reglas para import estáticos:• Se debe decir import static; no se debe decir

static import.• Tener cuidado con las ambiguedades. Si tu haces

un import estático para la clase Integer y para la clase Long, y se realiza una referencia a MAX_VALUE, esto causará un error de compilación, porque Integer y Long tienen una constante MAX_VALUE, y Java no sabrá a cual de las dos referirse.

• Se puede hacer un import estático sobre referencias a objetos estáticos, constantes (final y static) y métodos estáticos.