Java 10 grandes de escritura de lujo, la lectura puede salir a presumir que la fuerza!

¿Quieres aprender Java Sao carga de tipo B redacción operación de fantasía?

1, el conjunto de inicialización

La creación de una colección, el paso de asignación, quieres aprender?

, La parte superior dibujar conmigo una lista, en la parte inferior se dibuja un mapa ......

List<String> list = new ArrayList<String>() {{
    add("www."); add("javastack."); add("cn"); }}; Map<String, String> map = new HashMap<String, String>() {{ put("1", "www."); put("2", "javastack."); put("3", "cn"); }};

Jaja, escrito en una pila de altura escrita hace mucho tiempo, si bien el texto se carga X, pero no utilizó ningún huevo.

2, la aritmética

static {
    final int size = -(-128) + 127 + 1; // Load and use the archived cache if it exists VM.initializeFromArchive(ByteCache.class); if (archivedCache == null || archivedCache.length != size) { Byte[] c = new Byte[size]; byte value = (byte)-128; for(int i = 0; i < size; i++) { c[i] = new Byte(value++); } archivedCache = c; } cache = archivedCache; }

Tenga en cuenta que la anterior  size redacción no es?

Obviamente se puede escribir como:

final int size = 256;

Insistió escribió:

final int size = -(-128) + 127 + 1;

B de la escritura tan cargado JDK envasado  java.lang.Byte métodos estáticos dentro.

¿Por qué lo escribió?

Esta redacción en el JDK hay muchos, vemos estos escritos se sentirá muy extraño, Java pila tecnología de grupos de micro-canales, el conocimiento del planeta que ha tenido fans me preguntan por qué.

La verdadera razón incapaz de visita, pero creo que la larga pila de escritura JDK gran Dios realmente quería decirle, Byte 256 es el número -128 a 127. El rango de la composición, funciones, ya que sólo un rango de números de identificación. ¿Por qué tomar este rango de byte menos, ¿por qué los valores de byte -128 a 127 ?? En este artículo pueden ser descifrados.

Si conoces una de las más ronda tras ronda, el mensaje de bienvenida para compartir!

3, el desplazamiento

/**
 * The default initial capacity - MUST be a power of two.
 */
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** * The maximum capacity, used if a higher value is implicitly specified * by either of the constructors with arguments. * MUST be a power of two <= 1<<30. */ static final int MAXIMUM_CAPACITY = 1 << 30;

Estas dos variables de  java.util.HashMap origen, también pueden preguntarse por qué no sólo los números de escritura para conseguir una operación de cambio de Sao?

Esto está diciendo a los desarrolladores, HashMap tamaño de la capacidad debe ser una potencia de dos, o resultará en el espacio desperdiciado. Además, la capacidad de HashMap ¿Por qué es siempre una potencia de 2? , Mira esta recomendación.

4. Copiar la variable

transient Collection<V> values;

public Collection<V> values() { Collection<V> vs = values; if (vs == null) { vs = new Values(); values = vs; } return vs; }

Además de lo anterior  java.util.HashMap fuente, por qué no sólo tiene que utilizar  values:

transient Collection<V> values;

public Collection<V> values() {
    if (values == null) {
        values = new Values(); } return values; }

Y redefinir un  vs vienen en una curva que?

Escribir no es más sencillo?

JDK dentro de un gran número de tales términos, esta es la razón? !

Esto es debido a que el funcionamiento de las variables locales que las variables globales a leer más rápido. Además, yo personalmente considero que hay un beneficio, entonces Aclarar las variables locales, podemos ver claramente que el tipo de la variable, pero no gire ni uso libración tipos de variables plazo.

También menciona que, muy por encima de la operación de copia variable de nuevo me recuerda CopyOnWriteArrayList, que es por lo que no la variable actual se cambia para garantizar que la corriente de consistencia variable de hilo de una manera otros hilos.

Escribir código fuente del JDK son grandes Dios, a través del código fuente, podemos aprender mucho!

5, genéricos

Buscar una cierta flexibilidad en el uso de genéricos:

public <R> Observable<R> compose(Transformer<? super T, ? extends R> transformer) {
    return ((Transformer<T, R>) transformer).call(this); }

Este método genérico para escribir barra de ganado X, T genérico, R, comodines (?), En la frontera (se extiende) y el límite inferior (súper) tienen que pasar!

Comúnmente utilizado significados genéricos:

  • T - Tipo (tipo)
  • R - Resultado (Resultados)
  • K - Key (键)
  • V - Valor (Value)
  • E - Element (elementos)
  • N - Number (número)
  • ? - Tipo de Incertidumbre

Debemos tener por encima de un genérico común a él, no entienden los límites y comodines podemos mirar a este artículo: genéricos de Java me ven afectadas por años y, finalmente, se conoció <? Extiende T> <? Super T>.

Para aprender a utilizar los genéricos, puede aprender a instalar B.

6, Lambda

Las expresiones lambda, una nueva característica añadida de Java 8 en el interior, y para simplificar las clases internas anónimas función de la interfaz de programación de unión.

Como un ejemplo de la siguiente creación del hilo:

// 1
Runnable runnable = () -> System.out.println("javastack.cn");
new Thread(runnable).start();

// 2
new Thread(() -> System.out.println("javastack.cn")).start(); // 3 new Thread(() -> clean()).start();

Tres formas diferentes de escritura, ya no tienen que escribir  new Runnable() un montón de clases internas anónimas, no es muy refrescante!

Si no va a usar  Lambda la expresión, que realmente OUT, puede centrarse en el número de micro-canales públicos: pila de la tecnología Java en el fondo Re: nuevas características, que han escrito una gran cantidad de tutorial.

Aquí es un  Lambada caso real:

@Bean
public CommandLineRunner commandLineRunner(NettyServer nettyServer) {
    return (args) -> {
        Thread thread = new Thread(() -> nettyServer.start()); thread.setDaemon(true); thread.start(); }; }

La eliminación de la nueva ejemplar descrita anteriormente  CommandLineRunner proceso de clases internas anónimas.

7, la programación funcional

La programación funcional antes mencionado, que es una nueva característica añadida en Java 8 en el interior, antes de que yo he escrito un montón de nuevas características en el número de Java tutoriales en público, esto no es una nueva obra, ha estado jugando podrido.

Vistazo a un caso real, el mensaje se envía automáticamente desde la configuración de la primavera de arranque:

private void applyProperties(JavaMailSenderImpl sender) {
    PropertyMapper map = PropertyMapper.get();
    map.from(this.properties::getHost).to(sender::setHost); map.from(this.properties::getPort).whenNonNull().to(sender::setPort); map.from(this.properties::getUsername).to(sender::setUsername); map.from(this.properties::getPassword).to(sender::setPassword); map.from(this.properties::getProtocol).to(sender::setProtocol); map.from(this.properties::getDefaultEncoding).whenNonNull().as(Charset::name) .to(sender::setDefaultEncoding); map.from(this.properties::getProperties).whenNot(Map::isEmpty) .as(this::asProperties).to(sender::setJavaMailProperties); }

La primera vez que vi este código, se rechaza mi corazón, es difícil de entender.

Los métodos anteriores, respectivamente, de y a la utilización  Supplier y  Consumer la interfaz de función, también utiliza el doble de colon  :: se utiliza en combinación, el secreto, sino también en conjunción con  Lambda expresiones.

La programación funcional es muy potente, a pesar de que va a utilizar, pero ahora me siento muy profunda, la legibilidad y comprensibilidad malo, pero instalar X aprenderá, se debe utilizar.

8, la corriente se cierra

MyInputStream mis = new MyInputStream();
MyOutputStream mos = new MyOutputStream();
try (mis; mos) {
    mis.read("1.9"); mos.write("1.9"); } catch (Exception e) { e.printStackTrace(); }

Sí, se ve esta operación se cierra flujo demostrar que el nuevo azúcar sintáctico de Java 9, en comparación con Java 7 y simplifica  try-with-resources el uso, instalar X postura cada vez más.

Sobre  try-with-resources descripción detallada y evolución, podemos leer este artículo: JDK9 de combate nuevas características: una nueva posición de cierre de flujo simplificado, o que pueda centrarse en micro-canales número público: pila de la tecnología Java, responder "nuevas características" en el fondo obtener la versión completa de este artículo .

No sé puede llegar a un regaño, y flujo en el que la acción de cierre, ¿por qué no cierra la corriente, de múltiples pilas junto con los nuevos conocimientos mucho tiempo para aprender, ja, ja.

9, la inferencia de tipos

La tecnología Java pila número de preocupación pública de los viejos lectores debería haber visto, Java 10 acaba de salir, he escrito dos nuevos artículos características:

  • Java 10 10 nuevas características, va a cambiar completamente la forma de escribir código!
  • Java 10 de combate primero: el tipo de variable local de la inferencia

Ven, te escoger dos ejemplos para disfrutar de la siguiente:

Ejemplo 1:

var javastack = "javastack";

Ejemplo 2:

private static void testLoop() { for (var i = 0; i < 3; i++) { for (var m = 10; m < 15; m++) { System.out.println(i + m); } } }

Escribir no jugará? Demasiado fácil!

Después de que el tipo infiere, por ejemplo Java cada vez más como Javascript y Java 10 es en realidad un aumento de azúcar sintáctico, el compilador inferir automáticamente durante el mismo tipo real, el código compilado y el tipo real.

10, la coincidencia de patrones

instanceof coincidencia de patrones de Java 14 Esta es la introducción de las nuevas características:

if (object instanceof Kid kid) { // ... } else if (object instanceof Kiddle kiddle) { // ... }

La creación de objeto directamente después del partido y asignación utilizados directamente, no es necesario añadir código para la conversión de la fuerza, en gran medida mejorar la legibilidad y la seguridad. Específica puede ver este artículo: Modelo de Java de 14 partidos, una nueva característica es increíble!

ideas de programación Java cuarta edición después de la escuela respuesta

Supongo que te gusta

Origin www.cnblogs.com/kehoudaan/p/12645256.html
Recomendado
Clasificación