En estas entregas, voy a poner tips que resumi de este libro.
(Mas que recomendable!)
Author: Bert Bates, Kathy Sierra
Publisher: McGraw-Hill Osborne
ISBN-10: 0072253606
ISBN-13: 9780072253603
Mi idea no es que con esta info puedan dar el examen, pero si un repaso luego de haber estudiado, es solo un RESUMEN.
Me lo hice para mi, y pensé en "porque no compartirlo?" (puede no ser muy "técnico" u "objetoso" al principio.)
Son datos rápidos de que no me tengo que olvidar en el momento de la certificación.
Es un gran trabajo hacer este resumen, espero que les sea util, luego publicare mi score a ver si realmente me sirvió :)
Ni se les ocurra mencionar la orto grafia!, si pueden criticar y mejorar errores de concepto y demases.
Sin mas, estos son los capitulos:
Capitulo1: parte 1, parte 2, parte 3, parte 4, parte 5
SCJP: Intro, cap1, cap2, cap3, cap4, cap5, cap6, cap7, cap8
Eclipse: Instalacion, Primer error, Mas...
Linux: Adm archivos, User, Com, Compresion, RAID, Compiz, Mas...
Java: Instalacion JDK (Java), Mas...
SCJP - Sun Certified Java Programmer - Tips
SCJP C1P5: Declaracion de variables/metodos y acceso (2)
Capitulo 1, parte 5
viene de: parte 4
Variables "Final":
No se pueden modificar, son CONSTANTES.
final class Food ... no se puede heredar.
final void method()... no se puede sobreescribir
final int size = 40; ... no se puede cambiar
Variables Transient:
Solo se aplica a variables de instancia.
ver capitulo 6
Variables Volatile:
solo se aplica a variables de instancia.
ver capitulo 9
Static variables:
Lo que se puede declarar con el modificador static:
Methods
Variables
Clases anidadas
Initialization blocks
Que NO se puede declarar static:
Constructores (ya que solo se utiliza cuando se instancia la clase al que corresponde)
Classes (que no esten anidadas)
Interfaces
Metodos locales dentro de inner classes
Local variables
Enum:
Es un "tipo" de clases especializada para contener constantes enumeradas.
declaracion:
enum numeros {UNO, DOS, TRES};
solo se puede declarar fuera de una clase o dentro como variable de instancia (nonlocal)
es opcional el punto y coma final.
Tambien puede tener constructor y miembros, de la misma manera que una clase comun.
SCJP C1P4: Declaracion de variables/metodos y acceso
Capitulo 1, parte 4
viene de: parte 3
Constructor:
* Nunca devuelven tipo
* Mismo nombre que la clase
* Modificadores: public o private
(Luego lo veremos mas en detalle)
Declaracion de variable:
Variables tipo primitivas: 8 tipos, de las cuales seis son numéricas
Variables tipo Referencias: Objects y todo lo que heredan de este (o sea, todos)
Rangos:
| Type | Bits | Bytes | Minimum | Maximum |
| byte | 8 | 1 | -128 | 127 |
| short | 16 | 2 | -32768 | 32767 |
| int | 32 | 4 | -2147483648 | 2147483647 |
| long | 64 | 8 | -263 | 263 -1 |
| float | 32 | 4 | n/a | n/a |
| double | 64 | 8 | n/a | n/a |
Variable Argument Lists (var-args) (lista de argumentos variables):
Con esta implementacion, a partir de java 5, se puede enviar por medio de un argumento un numero indeterminado de objetos del mismo tipo.
Reglas:
* Tiene que ser de un tipo o primitiva
* Se utiliza tres puntos seguido en la declaración "..."
* Puede haber otros parámetros en los argumentos del metodo
* Solo un parámetro de este tipo
* Tiene que ser el ultimo parámetro
Ejemplo:
abstract void pepe2(int a, String... b);
(Luego lo veremos mejor)
Variables de instancia:
Son las variables de la clase, también son conocidas como "field", "attribute" y "properties".
* Se puede usar cualquier modificador de acceso
* Solo pueden utilizar un modificador de no-acceso: final, transient, static
* No se pueden utilizar modificadores de no-acceso: abstract, syncronized, strictfp, native
Variables locales:
Son aquellas que se declaran dentro de algún método, no se puede utilizar la mayoría de los modificadores, solo final.
Estas variables no se almacena en la memoria heap, solo en el stack (hasta que termine el bloque donde se declaró)
Modificadores posibles:
| Local Variables | Variables (non-local) | Methods |
| final | final public protected private static transient volatile | final public protected private static abstract syncronized strictfp native |
Tecnicas:
shadowing: utiliza el mismo nombre una variable local que una de instancia, y se utiliza solamente en ese mismo metodo,
ejemplo:
class testServer{
int count = 9;
public void login(){
int count = 10;
system.out.println("count "+ count);
}
}
this: para referirse a una variable de instancia o local y no de argumento, se "debe" utilizar la palabra this, que también le da mejor legibilidad al código,
ejemplo:
class testServer{
int a;
public void setA(int a){
this.a = a;
system.out.println("a: "+ a);
}
}
Array:
Coleccion de objetos del mismo tipo "empaquetados" en una variable y con un indice
Thread[] thread; //valido
Thread thread[]; //valido pero feo
thread = new Thread[3]; // prepara espacio ("alloca") para 3 elementos
thread[1] = new Thread(); // para crear las instancias
Thread[] thread2 = {new Thread(),new Thread()}; //valido 2 elementos nuevos, crea el array y las instancias
Thread[] thread3 = new Thread[]{new Thread(),new Thread()}; //valido, pero no se suele usar
pueden tener mas de una dimencion, o sea arrays de arrays
String[][] variosNombres;
* No se puede "allocar" memoria anticipadamente, esto no ese puede hacer: Thread[3] threads;
NOTA: De todas maneras se recomienda utilizar clases del tipo Collection, que luego veremos en detalle.
continua en: parte 5
SCJP C1P3: Declaracion de interfaces
Capitulo 1, parte 3
viene de: parte 2
Declaración de interfaces
Una interfaz es un contrato, no dice como va a hacer, simplemente se especifica los requerimientos.
Es 100% abstracta, no se define nada, es solo declarativa
* Todos los métodos de las interfaces, implícitamente son públicos y abstractos, no es necesario declararlo
* Todas las variables definidas deben ser public, final y static, o sea, solo puede tener constantes
* Los métodos no pueden ser static, final, strictfp o native
* Una interfaz puede extender de una o varias interfaces
* Una interfaz no puede implementar otra interfaz o clase
* Se declara con la palabra "interface"
* Los tipos de interfaz pueden ser polimorficas
Declaracion de miembros de clase
Access:
Igual que los modificadores de clases, pero para los métodos hay un modificador mas: "protected", en interfaces no.
Public, protected, default, private
Protected
Es igual a default, con la salvedad de que no es visible desde otros packages, solo son visibles si se esta heredando. En otras palabras los métodos protected solo son visibles por medio de la herencia, o desde el mismo package, usado para declarar metodos que tienen funcionalidad solo a travez de la herencia.
Es recomendable usar la metodología de los beans (atributos = setters/getters)
Los metodos privados de una superclase "no se pueden" sobreescribir
Nonaccess:
Final, Abstract, Syncronized, Native, Strictfp
Final: Prohíbe sobrescribir el método (también se pueden usar final en la linea de la declaración de un método, como argumento de una variable)
Abstract: SOLO se utiliza en clases abstractas y no contiene implementacion, con esto se fuerza a que las clases que extienden deban implementar dicho metodo.
Algo a tener en cuenta es que como no lleva implementacion, la declaración es sin llaves y termina con punto y coma
abstract void pepe2();
Syncronized: Este modificador fuerza a que solo un thread a la vez pueda acceder a dicho método.
Native: Con este modificador se puede codificar en C y compilar a nivel maquina, no maquina virtual.
Strictfp: Fuerza a que se utilize la norma IEEE754 para los cálculos con coma flotante (float)
continua en: parte 4
SCJP C1P2: Declaracion de clases
Capitulo 1, parte 2
viene de: parte 1
Declaracion de clases
Nomenclatura:
* Solo puede haber un clase publica por archivo
* Los comentarios pueden estar al comienzo o al final del archivo
* El nombre del archivo debe coincidir con el nombre de la clase public
* La linea del package debe estar en la primera linea, arriba de todo el codigo.
* Puede contener varias clases no publicas
* Los imports deben estar debajo del package y arriba de la declaración de la clase
* Los imports y el package son para todo el archivo sin importar cuantas clases contenga
* Las clases no publicas no deben tener el mismo nombre del archivo
Modificadores:
De acceso: default, public, protected, private
De no-acceso: strictfp, final, abstract
De acceso:
Default: sin ningun moficador de acceso explicito, solo permite acceso al package donde se encuentra, y solo en ese nivel.
Public: acceso desde cualquier package, se encuentra en el JU (java universe)
Luego detallare los otros modificadores de acceso.
No-acceso:
strictfp: utiliza una norma IEEE754 para numeros flotantes
final:Se utiliza para no permitir herencia de la clase
abstract: nunca se inicializa, su unica razon de ser es, para que se pueda heredar de ella, para representar "cosas" genericas que todos los descendientes deberian implementar/tener
tip: cuando se declaran metodos en una clase abstracta no deben tener llaves (si es que no tiene contenido)
tip: Las clases abstractas pueden tener metodos abstractos, las clases concretas no pueden tenerlos.
no se pueden marcar con abstract y final modificadores a la vez
Continua en: parte3
SCJP C1P1: Convenciones, Identificadores y propiedades
Capitulo 1, parte 1:
***
Identificadores (variables) y JavaBeans
* Las variables deben comenzar con letra o caracter $ o _
* Después del primer carácter, puede contener cualquier combinación de letras o caracteres: $ _ numéricos
* No hay limites de caracteres para los nombres de las variables
* No se pueden usar keywords de java (plabras reservadas)
* Los nombres de las variables son case sensitive
Convenciones de sun:
Usar la tabulacion para las estructuras de código
Utilizar camelCase: Cada palabra concatenada su primera letra debe estar en mayuscula.
Classes:
* Primera letra debe ser mayúscula, luego utilizar camelCase.
* Suelen ser sustantivos
Interfaces:
* Suelen ser adjetivos, casi siempre en ingles termina con "ble"
Ejemplo:
Runnable
Serializable
Metodos:
* Primera letra en minúscula, luego camelCase
* Suele ser verbo-sustantivo
Ejemplo:
getBalance
doCalculation
setCustomerName
Variables:
* Primera letra en minúscula, luego camelCase
* nombres lo mas corto posible, pero que tenga un buen significado, pensar en utilizar combinaciones de nombres que sean facil de recordar.
Constantes:
* nombre en mayúscula
* utilizar como separador de palabras el underscore
JavaBeans:
Propiedades o atributos.
Se utilizan propiedades (variables con métodos propios de lectura y escritura, mas conocido como: setters and getters)
Ejemplo de invocaciones:
setPropiedad(valor);
getPropiedad();
Return: Si lo que devuelve no es booleano, se debe utilizar "get"+variable, de lo contrario, si es booleano se puede utilizar "is"+variable
isTrue();
Ejemplo:
private int size;
public int getSize(){
return size:
}
public void setSize(int n){
size=n;
}
* utilizar public para los métodos
* private para las variables
Métodos Listener
* Para registrar listeners utilizar el prefijo "add"
* Para eliminar el registro utilizar el prefijo "remove"
* Todos los Listener deben contener la palabra "Listener" al final del metodo
continua en: part2
Eclipse & java error - Ubuntu 7.10 Gutsy Gibbon
Bajamos a eclipse (3.3) y lo dejamos en un dir temporal, luego le cambiamos los permisos y descomprimimos.
Si lo ejecutamos dara un error como este:
JVM terminated. Exit code=13
/usr/bin/java
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
-jar /media/work/ides/Eclipse33L/plugins/org.eclipse.equinox.launcher_1.0.1.R33x_v20070828.jar
-os linux
-ws gtk
-arch x86
-showsplash
-launcher /media/work/ides/Eclipse33L/eclipse
-name Eclipse
--launcher.library /media/work/ides/Eclipse33L/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.0.1.R33x_v20070828/eclipse_1020.so
-startup /media/work/ides/Eclipse33L/plugins/org.eclipse.equinox.launcher_1.0.1.R33x_v20070828.jar
-exitdata 220011
-vm /usr/bin/java
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
-jar /media/work/ides/Eclipse33L/plugins/org.eclipse.equinox.launcher_1.0.1.R33x_v20070828.jar
Significa que falta instalar una nueva version o mas completa de java, seguir con este tutorial.
Una vez instalado el JDK, lo unico que tenemos que hacer es bajar de la web a y ponerle
Instalacion JDK (JAVA) - Ubuntu 7.10 Gutsy Gibbon
Instalacion de java:
Bajar el bin desde http://java.sun.com/javase/downloads/index_jdk5.jsp (por ej: JDK 5.0 Update 13, Linux self-extracting file) a /usr/local/ u otro.
Cambiar permisos (ver permisos, chmod) y luego ejecutarlo (lo descomprime)
chmod +x jdk-1_5_0_12-linux-i586.bin
Luego es necesario avisarle al SO que tenemos otro "JAVA", por defecto viene uno "basico".
Se puede hacer de dos maneras, con comandos o con una GUI:
1) Utilizamos el comando:
sudo update-alternatives --install /usr/bin/java java /home/crystian/dev/java/jdk1.5.0_12/bin 70
Comando: update-alternatives
Parametro de instalcion: --install
Lugar original del enlace: /usr/bin/java
Nombre del enlace: java
Ubicacion del JDK: /home/crystian/dev/java/jdk1.5.0_12/bin
Prioridad: 70 (cuanto mas alto, mas prioridad tendra)
Luego ejecutamos:
sudo update-alternatives --config java
nos aparece una lista, seleccionamos (poniendo el numero de la fila) la nueva entrada.
2) Con GUI
Si no te llevas bien con los comandos, tenes a galternatives, esta aplicacion es con interfaz grafica, para bajar y utilizar:
sudo aptitude install galternatives
sudo galternatives
Buscar y seleccionar "java", ir a "añadir" el directorio del nuevo SDK, aparecerá en la lista (el numero de prioridad cuanto mas alto tiene mas prioridad), verificar que quede seleccionado el nuevo jdk.
Con eso estaria instalado y listo, para comprobar ejecutar: java -version
Recomendacion:
seria util tambien crear las variables del entorno de java:
sudo vi /etc/bash.bashrc:
agregar al final:
export JAVA_HOME=directorio raiz donde está jdk
export PATH=$JAVA_HOME/bin:$PATH
Etiquetas: instalacion, java, linux, ubuntu