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.
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 8
la 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 10
estas versiones no estable no habría considerado.
Java11 vs Java8
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 11
después de un tiempo relativamente Java 8
sentida 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 11
versiones 11.0.6
:
A continuación para probar algunas de las nuevas características probadas hecho, no
Java 11
sólo la introducción, de hecho, una gran cantidadJava 9
yJava 10
se han introducido cuando, pero aJava 11
la 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 var
variables 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 var
ventaja 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, var
la definición es muy claro y conciso!
3, por supuesto, algunos casos no se pueden utilizar
var
Una 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 var
tipo 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 JDK
oficial se enciende HTTP Client
, y se encuentra java.net.http
bajo el paquete, admite el envío, asíncronos síncronos HTTP
solicitudes, por lo que, antes de que usamos la petición HTTP desde el cliente, tales como: OKHttp
, HttpClient
que 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 Token
autoridad 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 String
tipo 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 Stream
la 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 String
y String
características Parte posterior escrito en el archivo finalmente apoyada, por Files
el 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
InputStream
Aumentó en un transferTo()
método, los datos directamente arrojados a la OutputStream
vez:
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 World
programa:
public class Hello {
public static void main( String[] args ) {
System.out.println("hello world");
}
}
Y guardarlo como hello.java
un archivo, esta vez directamente con el java
comando para ejecutar los archivos fuente de Java, eliminando directamente el anterior javac
proceso de compilar el archivo fuente:
java hello.java
¿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!