1. Nuevas características de Java JDK1.5
1. Generics:
List <String> strs = new ArrayList <String> (); // Especifique el tipo de almacenamiento para la colección. Al almacenar datos en la recopilación anterior, los datos de la cadena deben almacenarse, de lo contrario, el compilador informará un error
2. para cada uno
Por ejemplo, podemos atravesar la colección anterior a través de cada
for (string s: strs) {system.out.println (s);}NOTA: Cuando se usa para cada uno para atravesar una colección, la colección para atravesar debe implementar la interfaz Iterator
3. Funciones automáticas de Unboxing and Embacking
La copia del código es la siguiente:
¿Qué significa?
JDK1.5 Define una clase de encapsulación para cada tipo de datos básicos. Hacer que los tipos de datos básicos en Java también tengan sus propios objetos, por ejemplo: int -> entero,
Doble -> Doble,
largo -> largo,
char -> personaje,
flotante -> flotador,
booleano -> booleano,
corto -> corto,
byte -> byte
Empaque automático: convertir tipos básicos en objetos, por ejemplo: int -> entero
Desempaquetado automático: convertir objetos en tipos de datos básicos, por ejemplo: Integer -> int
El problema de que la recopilación no podía almacenar los tipos de datos básicos antes de JDK1.5 ahora se puede resolver.
4. Enumeración:
La enumeración es una característica comparativa introducida por JDK1.5. La palabra clave es enum
Por ejemplo: Defina una enumeración que representa un semáforo
public enum myenum {rojo, verde, amarillo}5. Parámetros variables
¿Qué significa? Permítanme darle un ejemplo: antes de JDK1.5, cuando queríamos pasar múltiples parámetros del mismo tipo a un método, teníamos dos métodos para resolverlo, 1. Pase directamente una matriz, 2. Pase tantos parámetros como hay.
Por ejemplo:
public void printColor (string rojo, cadena verde, cadena amarilla) {} o
public void printColor (string [] colores) {} Aunque los parámetros del método de escritura de esta manera pueden lograr el efecto que queremos, ¿no es un poco problemático? Además, ¿qué debemos hacer si el número de parámetros es incierto? Los parámetros variables proporcionados por Java JDK1.5 pueden resolver perfectamente este problema, por ejemplo:
public void printColor (string ... colores) {}
Se puede definir así, ¿qué significa? Si los parámetros son del mismo tipo, puede usar el formulario "Tipo + tres puntos, seguido de un nombre de parámetro". La ventaja de esto es que mientras los tipos de parámetros sean los mismos, no hay límite para el número de parámetros pasados: el parámetro variable debe ser el último elemento en la lista de parámetros (esta característica se aplica tanto a los tipos de datos de objetos como básicos)
6. Importación estática
Ventajas: el uso de la importación estática puede hacer todas las variables estáticas y métodos estáticos de la clase importada directamente visible en la clase actual. Usar estos miembros estáticos no necesita dar sus nombres de clase.
Desventajas: el uso excesivo reducirá la legibilidad del código
7. Biblioteca de concurrencia de hilo
La biblioteca de concurrencia de hilo es una característica avanzada de múltiples lectura propuesta por Java 1.5. Se encuentra en el paquete: java.util.concurrent
incluir
1. Hilo Mutex Descripción de la clase de herramienta: bloqueo, redwritelock
2. Descripción de la comunicación del hilo: condición
3. Piscina de hilo
Servicio de ejecutor
3. Sincronice la cola
Arrayblockingqueue
4. Sincronizar colecciones
Concurrenthashmap, copyOnwritearrayList
5. Herramienta de sincronización de hilos
Semáforo
Todavía hay muchos contenidos (muy importantes) sobre las bibliotecas de concurrencia de hilos, por lo que no las enumeraré una por una aquí. Los amigos interesados pueden ver los documentos de ayuda.
2. Nuevas características de JDK1.6
1.Desktop Clase y SystemTray Clase
El primero se puede usar para abrir el navegador predeterminado del sistema para navegar por la URL especificada, abra el cliente de correo electrónico predeterminado del sistema para enviar correos electrónicos a la dirección de correo electrónico especificada, use la aplicación predeterminada para abrir o editar archivos (por ejemplo, use el bloc de notas para abrir un archivo con txt como sufijo) y use la impresora predeterminada del sistema para imprimir documentos; Este último se puede usar para crear un programa de bandeja en el área de la bandeja del sistema.
2. Use Jaxb2 para implementar la asignación entre objetos y XML
Jaxb es la abreviatura de la arquitectura de Java para la unión XML, que puede convertir un objeto Java en formato XML y viceversa.
Llamamos al mapeo entre objetos y bases de datos relacionales ORM, y de hecho, el mapeo entre objetos y XML también se puede llamar OXM (mapeo XML de objetos). Resulta que Jaxb es parte de Java EE. En JDK1.6, Sun lo pone en Java SE, que también es la práctica habitual de Sun. La versión JAXB que viene con JDK1.6 es 2.0. En comparación con 1.0 (JSR 31), Jaxb2 (JSR 222) utiliza la nueva anotación de características JDK5 para identificar las clases y atributos que estarán atados, lo que simplifica en gran medida la carga de trabajo de desarrollo. De hecho, en Java EE 5.0, EJB y los servicios web también simplifican el desarrollo a través de la anotación. Además, JAXB2 usa Stax (JSR 173) para procesar documentos XML en la parte inferior.
Además de JAXB, también podemos lograr las mismas funciones a través de XMLBeans y Castor, etc.
3. Comprender Stax
Stax (JSR 173) es otra API para procesar documentos XML en JDK1.6.0 además de DOM y SAX.
Origen de Stax: hay dos formas de procesar documentos XML en JAXP1.3 (JSR 206): DOM (modelo de objeto de documento) y SAX (API simple para XML).
Dado que JAXB2 (JSR 222) y Jax-WS 2.0 (JSR 224) en JDK1.6.0 usa Stax, Sun decidió agregar Stax a la familia Jaxp y actualizar la versión JAXP a 1.4 (Jaxp1.4 es la versión de mantenimiento de Jaxp1.3). La versión JAXP en JDK1.6 es 1.4. Stax es la API de transmisión para la abreviatura de XML, una API que utiliza documentos XML de emparejamiento. Stax proporciona una API basada en un iterador de eventos para permitir que los programadores controlen el proceso de análisis del documento XML. El programa atraviesa este iterador del evento para procesar cada evento de análisis. El programa de análisis puede considerarse que el programa saca el programa, es decir, el programa solicita al analizador que genere un evento de análisis y luego maneja el evento, y luego hace que el analizador genere el próximo evento de análisis. Esto se encuentra hasta que se encuentra el personaje final del documento. SAX también procesa documentos XML basados en eventos, pero utiliza el modo Push para analizar. Después de que el analizador analice el documento XML completo, solo genera eventos de análisis y luego los empuja al programa para procesar estos eventos. El DOM adopta el método para asignar todo el documento XML a un árbol de memoria, de modo que los datos del nodo principal, el nodo infantil y los nodos hermanos se puedan obtener fácilmente, pero si el documento es grande, afectará seriamente el rendimiento.
4. Use la API del compilador
Ahora podemos usar la API del compilador de JDK1.6 (JSR 199) para compilar dinámicamente los archivos de origen Java. La API del compilador combina la función de reflexión para lograr una generación dinámica de código Java y compilar y ejecutar estos códigos, que es una característica de lenguaje dinámico.
Esta característica es muy útil para algunas aplicaciones que requieren una compilación dinámica, como el servidor web JSP. Cuando modificamos manualmente JSP, no queremos reiniciar el servidor web para ver el efecto. En este momento, podemos usar la API del compilador para implementar la compilación dinámica de los archivos JSP. Por supuesto, el servidor web JSP actual también admite la implementación de Hot Hot. El servidor web JSP actual llama a Javac a través de Runtime.exec o ProcessBuilder para compilar el código durante la operación. Este método requiere que generemos otro proceso para hacer compilación, lo cual no es lo suficientemente elegante y es fácil hacer que el código dependa de un sistema operativo específico. La API del compilador proporciona una forma más rica de hacer una compilación dinámica a través de un conjunto de API estándar fáciles de usar, y es multiplataforma.
5. API de servidor HTTP ligero
JDK1.6 proporciona una API simple del servidor HTTP. Según esto, podemos construir nuestro propio servidor HTTP integrado, que admite los protocolos HTTP y HTTPS y proporciona parte de la implementación de HTTP1.1. La parte que no se implementa se puede implementar extendiendo la API del servidor HTTP existente. Los programadores deben implementar la interfaz Httphandler por sí mismos. Httpserver llamará al método de devolución de llamada de la clase de implementación httphandler para manejar las solicitudes del cliente. Aquí, llamamos a una solicitud HTTP y su respuesta es un intercambio, que está envuelto en una clase HTTPEXCHIVE. Httpserver es responsable de pasar httpexchange al método de devolución de llamada de la clase de implementación httphandler.
6. API de procesamiento de anotaciones conectables (API de procesamiento de anotación conectable)
La API de procesamiento de anotación de plug-in (JSR 269) proporciona una API estándar para manejar anotaciones (JSR 175)
De hecho, JSR 269 no solo se usa para lidiar con la anotación. Creo que la función más poderosa es que establece un modelo del lenguaje Java en sí. Mapea elementos del lenguaje Java como método, paquete, constructor, tipo, variable, enum, anotación en tipos y elementos (¿cuál es la diferencia entre los dos?), Mapeando así la semántica del lenguaje Java en objetos. Podemos ver estas clases bajo el paquete Javax.Lang.Model. Por lo tanto, podemos usar la API proporcionada por JSR 269 para construir un entorno de metaprogramación rico en características. JSR 269 utiliza el procesador de anotación para procesar la anotación durante la compilación en lugar de durante la operación. El procesador de anotaciones es equivalente a un complemento del compilador, por lo que se llama procesamiento de anotación de inserción. Si se genera un nuevo código Java cuando el procesador de anotación procesa la anotación (ejecutando el método de proceso), el compilador volverá a llamar al procesador de anotación. Si se genera un nuevo código para el segundo procesamiento, llamará al procesador de anotación hasta que no se genere un nuevo código. Cada vez que se ejecuta el método Process (), se denomina "ronda", de modo que todo el proceso de procesamiento de anotación se puede considerar como una secuencia redonda.
JSR 269 se diseña principalmente como API para herramientas o contenedores. Por ejemplo, queremos establecer un marco de prueba unitario basado en anotaciones (como TestNG) para usar la anotación para identificar los métodos de prueba que deben ejecutarse durante la prueba.
7. Use la consola para desarrollar programas de consola
JDK1.6 proporciona la clase java.io.console utilizada específicamente para acceder a dispositivos de consola basados en personajes. Si su programa quiere interactuar con CMD en Windows o Terminal en Linux, puede usar la clase de consola para hacerlo. Pero no siempre obtenemos la consola disponible, si un JVM tiene la consola disponible depende de la plataforma subyacente y cómo se llama al JVM. Si el JVM se inicia en una línea de comando interactiva (como Windows CMD) y la entrada y salida no se redirigen en otro lugar, entonces puede obtener una instancia de consola disponible.
8. Soporte para idiomas de secuencias de comandos
Como: Ruby, Groovy, JavaScript.
9. Anotaciones comunes
Las anotaciones comunes eran originalmente parte de la especificación Java EE 5.0 (JSR 244), y ahora Sun pone parte de ella en Java SE 6.0.
Con la adición de la función de metadatos de anotación (JSR 175) a Java SE 5.0, muchas tecnologías Java (como EJB y Servicios Web) utilizarán la parte de anotación para reemplazar archivos XML para configurar los parámetros en ejecución (o admitir programación declarativa, como las transacciones declarativas de EJB). Si estas tecnologías definen sus propias otaciones por separado para fines generales, obviamente es una construcción un poco duplicada. Por lo tanto, es valioso definir un conjunto de anotaciones públicas para otras tecnologías Java relacionadas. Puede evitar la construcción duplicada al tiempo que garantiza la consistencia de varias tecnologías de Java SE y Java EE.
Las siguientes enumeras 10 anotaciones anotaciones comunes de retención de anotaciones Descripción del objetivo generado SourceAnnotation_type, constructor, campo, local_variable, método, paquete, parámetro, tipo. El código fuente generado por la anotación se utiliza para etiquetar el recurso generado. El contenedor inyecta dependencias de recursos externas de acuerdo con esto. Hay dos métodos: inyección basada en el campo y inyección basada en el setter. Tiempo de ejecución de recursos. Escriba etiquetas múltiples dependencias externas al mismo tiempo. El contenedor inyectará todas estas dependencias externas en el método PostConstructoreMe. El método se ejecuta después de que el contenedor inyecta todas las dependencias para realizar el trabajo de inicialización después de la inyección de dependencia. Solo se puede etiquetar un método posterior al método de tiempo de ejecución predestroy. Antes de que la instancia del objeto esté a punto de eliminarse del contenedor, el método de devolución de llamada que se ejecutará debe etiquetarse como el tipo de tiempo de ejecución de Predestroy Runas para etiquetar qué rol de seguridad ejecutar el método de la clase etiquetada. Este papel de seguridad debe ser consistente con el papel de seguridad del contenedor. El método de tiempo de ejecución de RolesLowned, se utiliza para etiquetar los roles de seguridad que permiten la ejecución de clases o métodos etiquetados. Este rol de seguridad debe ser consistente con el rol de seguridad del contenedor. El método permite que todos los roles ejecuten clases o métodos etiquetados. DenyAll Tipo de tiempo de ejecución. El método no permite que ningún rol ejecute clases o métodos etiquetados, lo que indica que la clase o los métodos no pueden ejecutarse en el contenedor Java EE. El tipo de tiempo de ejecución de los declarantes se utiliza para definir roles de seguridad que la aplicación puede probar. Por lo general, se usa para usar isuserInrole para verificar los roles de seguridad.
Aviso:
1. Roles realizó, permita y no se puede aplicar a los roles de una clase o método realizados, permitidos y denegados en la clase sobrescribirán los roles realizados, permitidos, denyallrunas, roles realizados, permisos, denyall y declaraciones no agregadas a java 6.0 para manejar el trabajo de anotaciones anteriores realizadas por el contenedor de java. Java SE6.0 solo contiene las clases de definición de las primeras cinco anotaciones en la tabla anterior, y no contiene el motor para manejar estas anotaciones. Este trabajo se puede realizar mediante la API de procesamiento de anotaciones conectables (JSR 269).
En comparación con las nuevas características de 1.6, las nuevas características de 1.7 nos emocionan más porque es algo que hemos estado esperando y visibles y tangibles.
3. Nuevas características de JDK1.7
1. Valor nominal binario
En Java7, el valor del tipo de modelado (byte, corto, int, largo) puede representarse mediante tipos binarios. Al usar valores binarios, OB u OB deben agregarse frente a él, por ejemplo:
int a = 0b01111_00000_11111_00000_10101_01010_10; corto b = (corto) 0b01100_00000_11111_0; byte c = (byte) 0b00000_0001;
2. Soporte de variables digitales para líneas deslizantes
JDK1.7 puede agregar una línea de deslizamiento a una variable de tipo numérico.
Pero hay algunos lugares que no se pueden agregar
1. El comienzo y el final del número
2. Antes y después del punto decimal
3. Antes de F o L, por ejemplo:
int num = 1234_5678_9;
float num2 = 222_33f;
Num3 = 123_000_111l;
3. Soporte de Switch para Cadena
¿Siempre has tenido un signo de interrogación antes? ¿Por qué C# está disponible en Java pero no? HA, pero Java también está bien después de JDK1.7, por ejemplo:
Status de cadena = "OrderState"; switch (status) {Case "OrderCancel": System.out.println ("Cancelación de pedidos"); romper; caso "OrderSuccess": System.out.println ("suscripción exitosa"); romper; predeterminado: system.out.println ("estado desconocido"); }4.Tre-with recursos
Try-With-Resources es una declaración de intento que define uno o más recursos. Este recurso se refiere al objeto que el programa necesita cerrar después de que se haya procesado. Try-with recursos asegurar que cada recurso esté cerrado después de que se complete el procesamiento.
Los recursos que pueden usar con recursos Try-with son:
Cualquier objeto que implementa la interfaz java.lang.autoclosable Java.io.Closable Interface.
Por ejemplo:
public static string readFirstLineFromFile (string ruta) lanza ioexception {try (bufferedReader br = new BufferedReader (new FileReader (ruta))) {return br.readline (); }}
En las versiones Java 7 y posteriores, BufferedReader implementa la interfaz java.lang.autoclosable.
Dado que el BufferedReader se define en la declaración de prueba con recursos, se apagará automáticamente independientemente de si la declaración de prueba es normal o anormal. Antes de Java7, debe usar finalmente bloques para cerrar este objeto.
5. Captre múltiples excepciones y vuelva a retirar la excepción con una verificación de tipo mejorada
Por ejemplo:
public static void primero () {try {bufferedReader lector = new BufferedReader (new FileReader ("")); Conexión con = nulo; Instrucción stmt = con.createStatement (); } catch (ioException | sqlexception e) {// captura de excepciones múltiples, e es el tipo final E.PrintStackTrace (); }}Ventajas: usar una captura para manejar múltiples excepciones es más pequeña y más eficiente que usar múltiples capturas para manejar una excepción al bytecode generado por procesar una excepción.
6. Escriba la inferencia al crear genéricos
Mientras el compilador pueda inferir parámetros de tipo desde el contexto, puede reemplazar los parámetros genéricos con un par de soportes de ángulo vacío <>. Este par de soportes se llama de forma privada. Antes de Java SE 7, debes hacer esto al declarar un objeto genérico
List <String> list = new ArrayList <String> ();
Y después de Java SE7, puedes hacer esto
List <String> list = new ArrayList <> ();
Debido a que el compilador puede inferir parámetros de tipo de la anterior (lista), ya no puede escribir parámetros genéricos después de la lista de matrices posterior, solo use un par de soportes de ángulo vacío. Por supuesto, debe llevar un "diamante" <>, de lo contrario habrá una advertencia.
Java SE7 solo admite inferencia de tipo limitado: solo puede usar la inferencia de tipo si el tipo parametrizado del constructor se declara significativamente en el contexto, de lo contrario no funcionará.
List <String> list = new ArrayList <> (); list.add ("a"); // Esto no funciona list.addall (new ArrayList <> ()); // Esto puede ser list <? extiende String> list2 = new ArrayList <> (); list.addall (list2);
7. (Ninguno)
8. Agregue algunas herramientas y métodos nuevas para obtener información ambiental
Por ejemplo:
System de archivos
9. Adición segura, resta, multiplicación y división
Por ejemplo:
int Math.SafeToint (Long Value) int Math.Safenegate (Valor largo) int Math.Safeadd (Int Value1, Int Value2) Long Math.Safeadd (Long Value1, Int Value2) Long Math.Safeadd (Long Value1, Long Value2) Int Math.Safesubact (int value1, int value2)
Bueno, tanto se ha resuelto hasta ahora. Lo agregaré más tarde.
Cabe señalar que si no está seguro de su versión JDK anterior, no use nuevas funciones, de lo contrario puede haber problemas de esto o aquello.