Your SlideShare is downloading. ×
Caracteristicas avanzadas
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Caracteristicas avanzadas

108
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
108
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 1 Sun Educación México Características Avanzadas
  • 2. 2 Sun Educación México SCJP y JSE 6.0 • Podemos decir que los principales cambios son: > Inclusión de nuevas características del lenguaje: – Enums – static imports – variable-length argument list – covariant returns – enhanced for loop (for-each) – (auto) boxing & unboxing – Generics > Nuevas topicos relacionados a tema anteriores a 6.0 – java.util.Locale, expresiones regulares, los métodos PrintWriter.format/printf y las interfaces java.util.Comparator/java.lang.Comparable
  • 3. 3 Sun Educación México Clases Internas • Tipos > Inner classes > Method-local inner classes > Anonymous inner classes > Static nested classes • Conceptos basicos > class Externa { > class Interna { } > } > Al compilar Externa.java, genera: – Externa.class – Externa$Interna.class
  • 4. 4 Sun Educación México Usos public class Externa1 { public static void main(String[] args) { Externa1 e = new Externa1(); e.creaInterna(); } public void creaInterna(){ Interna i = new Interna(); } public class Interna{ public Interna(){ System.out.println("Interna"); } } } public class Externa2 { public static void main(String[] args) { Externa1.Interna ei = new Externa1().new Interna(); } }
  • 5. 5 Sun Educación México Consideraciones • Los miembros de la clase contenedora tambien son miembros de la clase interna/anidada • La referencia “this” corresponde al objeto en “curso” > Para resolver la ambiguedad entre la clase contenedora/ contenida se puede anteponer a “this” el nombre de la clase. – Ejemplo: – Externa.this.x; – Interna.this.x; • Una clase Interna puede usar todos los modificadores de acceso.
  • 6. 6 Sun Educación México Clases Locales public class ClaseLocal1 { public static void main(String[] args) { ClaseLocal1 cl = new ClaseLocal1(); cl.metodo(); } public void metodo(){ class ClaseLocal{ public ClaseLocal(){ System.out.println("ClaseLocal"); } } ClaseLocal cl = new ClaseLocal(); } }
  • 7. 7 Sun Educación México Consideraciones • Los miembros de la clase contenedora son visibles en la clase local. • Las variables locales NO son visibles en la clase local. > A menos que sean finales • El orden es estricto > No podemos crear un objeto de la clase local y despues declarar la clase local.
  • 8. 8 Sun Educación México Clases Anonimas • Bienvenidos al lado oscuro de Java... • Basicamente Extienden una clase ó Implementan una Interfaz • No hay palabras para explicarlas...solo codigo en Java...
  • 9. 9 Sun Educación México Extendiendo/Implementando public class Anonimas2 { public static void main(String[] args) { ClaseAnonima ca = new ClaseAnonima() { public void metodo() { System.out.println("Implementando"); } }; ca.metodo(); } } interface ClaseAnonima { public void metodo(); } public class Anonimas1 { public static void main(String[] args) { ClaseAnonima ca = new ClaseAnonima() { public void metodo() { System.out.println("Extendiendo"); } }; ca.metodo(); } } class ClaseAnonima { public void metodo() { System.out.println("ClaseAnonima...o no?"); } }
  • 10. 10 Sun Educación México En un parametro... public class Anonimas3 { public static void main(String[] args) { Otra o = new Otra(); o.metodo(new ClaseAnonima() { public void metodo() { System.out.println("Como parametro!!!"); } }); } } interface ClaseAnonima { public void metodo(); } class Otra{ public void metodo(ClaseAnonima ca){ ca.metodo(); } }
  • 11. 11 Sun Educación México Clases Anidadas Estaticas public class Estaticas { private static int x=10; public static void main(String[] args) { ClaseEstatica ce = new ClaseEstatica(); } public static class ClaseEstatica{ public ClaseEstatica(){ System.out.println("ClaseEstatica " + x); } } } public class Estaticas2 { public static void main(String[] args) { Estaticas.ClaseEstatica ce = new Estaticas.ClaseEstatica(); } }
  • 12. 12 Sun Educación México Assertions • Permite remplazar a las nunca bien ponderadas “banderas” • Permite probar ciertas condiciones, mas alla de lo que deberia hacer una apliacacion > Algo que solo a un programador podria interesarle. • Sintaxis > assert (expresion booleana) > assert (expresion booleana) : expresion (a String) • Si la expresion booleana es evaluada a false, entonces la excepción AssertionError es lanzada > La segunda version agrega “expresion” al stacktrace
  • 13. 13 Sun Educación México Consideraciones 1 • Compilación > No se requiere nada especial en Java 5, por defecto “assert” es considerada como una palabra clave. > Si queremos usar “assert” como identificador debemos compilar con “-source 1.3” • Ejecución > Por defecto las aserciones estan deshabilitadas – Para habilitarlas debemos agregar “-ea” al comando “java” > Pordemos especificar un paquete o clase en especifico usando ademas “-da:” – da:paquete1.paquete – da:paquete1.paquete.Clase
  • 14. 14 Sun Educación México Consideraciones 2 • Ojo con las preguntas conceptuales!! • Se “recomienda” no usar aserciones para: > Validar argumentos de metodos publicos. > Validar argumentos de metodos privados. > Validar parametros de la linea de comandos. > No usar aserciones que causen efectos secundarios! – assert (metodo()) – //continua el programa (efecto “lineas fuera de alcance”) • Si se recomienda > Comprobar condiciones de borde – default: assert false;
  • 15. 15 Sun Educación México Enums • Reconocer las “enumeraciones” como un nuevo tipo de dato. > Restringido a un conjunto de valores simbólicos • Sus ventajas > Tipo seguro de datos > Agregar nuevas constantes (sin recompilar clientes) > Constantes enumeradas (permite recorrerlas) > Conjuntos de valores validos definidos > Soporte a limites (superior e inferior) > Valores agrupados en un espacio de nombres
  • 16. 16 Sun Educación México Características • Son como una clase: > Tienen las mismas propiedades de declaración – Pueden declararse en un archivo fuente – Este debe tener el mismo nombre de la “clase” Enum – Pueden ser Anidadas – Pero NO locales • Tienen constructores > No se instancian – Basta con la declaración y asignación a uno de sus valores. • El método values() retorna un arreglo con todos los valores de una Enum > Se puede combinar con “enhanced for” • Los valores (miembros) de una Enum son estaticos > Se puede combinar con “static imports”
  • 17. 17 Sun Educación México Uso public class EnumBasico { enum Numero {UNO,DOS,TRES} public static void main(String[] args) { Numero num1 = Numero.UNO; switch(num1){ case UNO: System.out.println("UNO");break; case DOS: System.out.println("DOS");break; case TRES: System.out.println("TRES");break; } }
  • 18. 18 Sun Educación México Static Imports • Permite un acceso “unqualified” a los miembros estáticos de una clase. > Es decir podemos acceder a un miembro estático son poner el nombre de la clase que lo contiene. • Ejemplo > import static java.lang.Thread.*; > > public class Thread1 implements Runnable{ > public void run(){ > try { > sleep(2000); > } catch (InterruptedException ex) { > ....
  • 19. 19 Sun Educación México Consideraciones • Se debe usar el nombre totalmente calificado de la clase, interfaz o enum. • Dos “static import” que importen miembros con los mismos nombres generan un error de compilación.
  • 20. 20 Sun Educación México Lista Variable de Argumentos • Esta característica permite pasar un numero arbitrario de argumentos (del mismo tipo) a una invocación de un método. • “Varargs” es el bloque de construcción para nuevas características del lenguaje como por ejemplo: printf • Los parámetros son tratados como un arreglo > No es necesario crear arreglos adicionales • Son compatibles con “enhanced for” • Son compatibles con autoboxing • Pueden ser vacíos y nulos
  • 21. 21 Sun Educación México Consideraciones de Var-args • Su uso puede dar como resultado situaciones difíciles de determinar a menos que se conozcan las siguientes reglas: > Los argumentos var-args son tratados como un arreglo – La siguiente definición del método main es totalmente valida: – public static void main(String... args) – Y el tamaño esta dado por el atributo length – La siguiente sobrecarga NO es valida: – public static void prueba(int[] a){... – public static void prueba(int... a){... – Ambas declaraciones son “exactamente” iguales > Los var-args tienen menos “peso” que un arreglo – Ante la llamada: test(1,2); – test(int a, int b) tiene preferencia sobre test(int... a)
  • 22. 22 Sun Educación México Covariant Returns • La - por todos conocida - regla de sobre escritura: “Debe retornar el mismo tipo” ahora tiene una excepción > Puede ser distinto tipo, siempre y cuando sea un sub tipo. > Ejemplo: – public class Padre{ – public Object metodo(){.... – public class Hijo extends Padre{... – public String metodo(){...
  • 23. 23 Sun Educación México Enhanced for loop (for-each) • Es una mejora al “for” convencional • Otorga una manera distinta de iterar arreglos o colecciones > No es necesario contar con un iterador como en el caso de las colecciones. • Simplifica el código disminuyendo la cantidad de lineas o instrucciones necesarias. • Ejemplo: > for(Shape s : c) { – System.out.println(s); > } > Se lee para cada “Shape s” en c, donde c es una colección • Solo se pueden iterar arreglos o colecciones.
  • 24. 24 Sun Educación México Boxing & Unboxing • Boxing y Unboxing es el proceso de convertir un primitivo a su clase Wapper y vice versa automáticamente • Ejemplo: > Integer i = 10; – Es valido, ya que la conversión al Wrapper Integer es automática > int i = new Integer(10); – Es valido, ya que la asignación del primitivo que contiene el Wrapper es automática • Esto se aplica no solo a las asignaciones, si no que a cualquier tipo de expresión valida, como switch, for, llamadas a métodos, a operandos, etc.
  • 25. 25 Sun Educación México Consideraciones • Esta característica impacta fuertemente en el comportamiento del lenguaje, dando situaciones de ambigüedad > Con a una llamada test(1,2); – test(int a, int b) se ejecuta – test(Integer a, Integer b) NO se ejecuta > Con a una llamada test(1,new Integer(2)); – test(int a, int b) – test(Integer a, Integer b) – NO Compila ya que la llamada es ambigua