Lo siento, arrastre hacia arriba! Me acabo de pasar de Java 11

imagen


Un pequeño nudo

Muchos principiantes Java socio menor frecuencia consultar:

  • Al final de la instalación de la versión del JDK es mejor?
  • Java 8 al final también lo suficiente como para usar?
  • Java 11 exactamente cuáles son las mejoras?
  • No es lo más mejor versión nueva de Java?
  • ......

Así que, de hecho, el sitio web oficial ahora para tener una versión de Java 13, y proporciona una descarga.

imagen

Pero en la actualidad en el mercado general de la versión estable de por supuesto, usted tiene que pertenecer a Java 8 y el 11 de Java , y ahora la mayoría de los entornos de producción de la empresa o de Java 8la mayoría. Así que si desde la perspectiva de auto-estudio, creo que estas dos versiones están bien, algún otro intermedio tal Java 9, Java 10estas versiones no estable no habría considerado.


Java11 vs Java8

imagen

Java 11 con respecto a Java 8 es de hecho una parte de la evolución, además de muchas mejoras internas (como el menor costo y la demora de GC, bendición TLS1.3, etc.) que para los usuarios novatos que son también algunos aspectos del uso del lenguaje la evolución.

Recientemente, sólo trato de usar un poco de actualización en su propio proyecto poco personal Java 11(empresa del proyecto que no se atreven a mover, miedo de preguntar, tenía que mover sus objetos personales), este artículo escrito desde la perspectiva del código real de más o menos mi experiencia personal utilizar Java 11después de un tiempo relativamente Java 8sentida por parte de la evolución más profunda, dice la documentación oficial es muy clara:https://docs.oracle.com/en/java/javase/11/

Tengo este experimento instalado Java 11versiones 11.0.6:

imagen

A continuación para probar algunas de las nuevas características probadas hecho, no Java 11sólo la introducción, de hecho, una gran cantidad Java 9y Java 10se han introducido cuando, pero a Java 11la versión estable antes de asentarse.


Tipo de variable inferencia

La nueva versión de Java introduce una nueva palabra clave tipo var, uso de varvariables para definir la necesidad de determinados tipos de escritura, de acuerdo con el compilador puede =inferir automáticamente el tipo de la variable de asignación real de la derecha:

1, las variables locales generales

var name = "codesheep"; // 自动推断name为String类型
System.out.println(name);

¿Qué tal? Es que hay un uso similar de JavaScript en un lenguaje de tipos débiles esta ilusión?

2, para su uso en el bucle

var upList1 = List.of( "刘能", "赵四", "谢广坤" );
var upList2 = List.of( "永强", "玉田", "刘英" );
var upList3 = List.of( "谢飞机", "兰妮", "兰娜" );
var upListAll = List.of( upList1, upList2, upList3 );
for( var i : upListAll ) { // 用var接受局部变量的确非常简洁!
    for( var j : i  ) {
        System.out.println(j);
    }
}

Este lugar puede ser visto con la varventaja de variables locales definidas, y si este ejemplo, el tipo de elemento de colección es más complejo, es similar a List<List<String>>este tipo de anidación, a continuación, varla definición es muy claro y conciso!

3, por supuesto, algunos casos no se pueden utilizar

varUna vez que el tipo de asignación variable y re-asignación de diferentes tipos no es suficiente, por ejemplo:

var name = "codesheep";
name = 666;  // 此时编译会提示不兼容的类型

Definición del vartipo de variables no inicializadas no es suficiente, por ejemplo:

var foo;  // 此时编译会提示无法推断类型
foo = "Foo";

Además, como el tipo 成员变量类型, 方法入参类型, 返回值类型y similares no se pueden utilizar var, por ejemplo:

public class Test {
    
    private var name; // 会提示不允许使用var           

    public void setName( var name ) { // 会提示不允许使用var
        this.name = name;
    }

    public var getName() { // 会提示不允许使用var
        return name;
    }
     
}

bendición oficial de cliente HTTP

Sí!

Ahora JDKoficial se enciende HTTP Client, y se encuentra java.net.httpbajo el paquete, admite el envío, asíncronos síncronos HTTPsolicitudes, por lo que, antes de que usamos la petición HTTP desde el cliente, tales como: OKHttp, HttpClientque ahora se puede renunciar!

Envía una solicitud de sincronización:

var request = HttpRequest.newBuilder()
        .uri( URI.create("https://www.codesheep.cn") )
        .GET()
        .build();
// 同步请求方式,拿到结果前会阻塞当前线程
var httpResponse = HttpClient.newHttpClient()
        .send( request, HttpResponse.BodyHandlers.ofString());
System.out.println( httpResponse.body() ); // 打印获取到的网页内容

solicitud asincrónica se envía:

CompletableFuture<String> future = HttpClient.newHttpClient().
        sendAsync( request, HttpResponse.BodyHandlers.ofString() )
        .thenApply( HttpResponse::body );
System.out.println("我先继续干点别的事情...");
System.out.println( future.get() ); // 打印获取到的网页内容

Por supuesto, también puede personalizar el encabezado de la solicitud, como el transporte de JWT Tokenautoridad para solicitar información, tales como:

var requestWithAuth = HttpRequest.newBuilder()
        .uri( URI.create("http://www.xxxxxx.com/sth") )
        .header("Authorization", "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxNTIwNTE2MTE5NiIsImNyZWF0ZWQiOjE1ODMzMTA2ODk0MzYsImV4cCI6MTU4MzM5NzA4OSwidXNlcmlkIjoxMDAwNH0.OE9R5PxxsvtVJZn8ne-ksTb2aXXi7ipzuW9kbCiQ0uNoW0fJJr_wckLFmgDzxmBs3IdzIhWDAtaSIvmTshK_RQ")
        .GET()
        .build();
var response = HttpClient.newHttpClient()
        .send( requestWithAuth, HttpResponse.BodyHandlers.ofString() );
System.out.println( response.body() ); // 打印获取到的接口返回内容

mejoras de manejo de cadenas

La nueva cadena Stringtipo tales como un aumento: isBlank(), strip(), repeat()y similares para facilitar el método de procesamiento de cadenas

String myName = " codesheep ";
System.out.println( "  ".isBlank() ); // 打印:true
System.out.println( "  ".isEmpty() ); // 打印:false

System.out.println( myName.strip() );         // 打印codesheep,前后空格均移除
System.out.println( myName.stripLeading() );  // 打印codesheep ,仅头部空格移除
System.out.println( myName.stripTrailing() ); // 打印 codesheep,仅尾部空格移除
System.out.println( myName.repeat(2) );       // 打印 codesheep  codesheep

colección mejorada

Principalmente para aumentar dichos of()y copyOf()métodos para más conveniente para crear y copiar tipos de colección

var upList = List.of( "刘能", "赵四", "谢广坤" );
var upListCopy = List.copyOf( upList );
System.out.println(upList);     // 打印 [刘能, 赵四, 谢广坤]
System.out.println(upListCopy); // 打印 [刘能, 赵四, 谢广坤]

var upSet = Set.of("刘能","赵四");
var upSetCopy = Set.copyOf( upSet );
System.out.println(upSet);      // 打印 [赵四, 刘能]
System.out.println(upSetCopy);  // 打印 [赵四, 刘能]

var upMap = Map.of("刘能","58岁","赵四","59岁");
var upMapCopy = Map.copyOf( upMap );
System.out.println(upMap);      // 打印 {刘能=58岁, 赵四=59岁}
System.out.println(upMapCopy);  // 打印 {刘能=58岁, 赵四=59岁}

mejoras de la programación funcional

Lo que más me impresionó es Streamla corriente, como el aumento takeWhile()y dropWhile()el método de liquidación de corte:

var upList = List.of( "刘能", "赵四", "谢广坤" );

// 从集合中依次删除满足条件的元素,直到不满足条件为止
var upListSub1 = upList.stream()
        .dropWhile( item -> item.equals("刘能") )
        .collect( Collectors.toList() );
System.out.println(upListSub1);  // 打印 [赵四, 谢广坤]

// 从集合中依次获取满足条件的元素,知道不满足条件为止
var upListSub2 = upList.stream()
        .takeWhile( item -> item.equals("刘能") )
        .collect( Collectors.toList() );
System.out.println( upListSub2 ); // 打印 [刘能]

lectura de archivos mejorada y escritura

1, mejora de archivos de clase

Podemos dirigir su mente y corazón antes de que los contenidos del archivo para leer Stringy Stringcaracterísticas Parte posterior escrito en el archivo finalmente apoyada, por Filesel método estático de la clase writeString()y readString()completa:

Path path = Paths.get("/Users/CodeSheep/test.txt");
String content = Files.readString(path, StandardCharsets.UTF_8);
System.out.println(content);
Files.writeString( path, "王老七", StandardCharsets.UTF_8 );

2, InputStream mejorada

InputStreamAumentó en un transferTo()método, los datos directamente arrojados a la OutputStreamvez:

InputStream inputStream = new FileInputStream( "/Users/CodeSheep/test.txt" );
OutputStream outputStream = new FileOutputStream( "/Users/CodeSheep/test2.txt" );
inputStream.transferTo( outputStream );

archivos de origen de soporte que llevan directamente (666!)

Por ejemplo, escribí un sencillo Hello Worldprograma:

public class Hello {
    
    public static void main( String[] args ) {
        System.out.println("hello world");
    }
     
}

Y guardarlo como hello.javaun archivo, esta vez directamente con el javacomando para ejecutar los archivos fuente de Java, eliminando directamente el anterior javacproceso de compilar el archivo fuente:

java hello.java

imagen

¿Qué tal? No es el origen y el funcionamiento pitón poco como? La cantidad de información que un poco grande, podemos hacerlo por su propio cerebro


resumen

Java 11 tiene mucho que mejorar, pero por otra parte, para los principiantes Java 8, no hay necesidad de forma deliberada la novedad, la estabilidad es el más importante!


Publicado 76 artículos originales · ganado elogios 202 · Vistas a 70000 +

Supongo que te gusta

Origin blog.csdn.net/wangshuaiwsws95/article/details/104771248
Recomendado
Clasificación