【译】JAVA11功能简单解释转载
在本文中,我们将简单讨论java11中的一些重要功能
使用单个命令运行Java文件:
在早期版本的java中,我们必须先编译java文件,然后我们可以执行代码,但从java11中,我们可以直接执行代码,而无需编译代码
假设如果我们有Sample.java文件,我们可以直接运行java Sample.java在JAVA11中执行代码,而无需编译它
集合到数组:
我们只需在java11中使用.toArray()将集合转换为数组
public class Test {
public static void main(String[] args) {
List<String> sampleList = Arrays.asList("LoveToLearn", "Anil");
String[] sampleArray = sampleList.toArray(String[]::new);
System.out.println(Arrays.toString(sampleArray));
}
}
控制台输出:
String类中的新实用程序方法:
Java11在字符串类中引入了6种新方法,让我们讨论一下:
repeat(int):重复方法只是以int的形式重复方法中提到的许多次字符串
public class Repeat {
public static void main(String[] args) {
String s = "java11";
String str = s.repeat(10);
System.out.println(str);
}
}
控制台输出:
lines():此方法返回字符串流,这是按行拆分的所有子字符串的集合。
public class Lines {
public static void main(String[] args) {
String str = "JD\nJD\nJD";
System.out.println(str);
System.out.println(str.lines().collect(Collectors.toList()));
}
}
控制台输出:
isBlank() — 此实例方法返回布尔值。空字符串和只有空格的字符串被视为空白:
public class Blank {
public static void main(String[] args) {
String str = "";
String str1 = " ";
System.out.println(str.isBlank());
System.out.println(str1.isBlank());
}
}
控制台输出:
stripLeading():它用于删除字符串开头的空白
public class Check {
public static void main(String[] args) {
String str = " java ";
System.out.println("before using strip-leading method");
System.out.print("+");
System.out.print(str);
System.out.println("+");
System.out.println("after using strip-leading method");
System.out.print("+");
System.out.print(str.stripLeading());
System.out.print("+");
}
}
控制台输出:
stripTrailing():它用于删除字符串末尾的空白:
public class Check {
public static void main(String[] args) {
String str = " java ";
System.out.println("before using strip-trailing method");
System.out.print("+");
System.out.print(str);
System.out.println("+");
System.out.println("after using strip-trailing method");
System.out.print("+");
System.out.print(str.stripTrailing());
System.out.print("+");
}
}
控制台输出:
strip():它删除了前导和后导的空白:
public class StripCheck {
public static void main(String[] args) {
String str = " java ";
System.out.println("before using strip-trailing method");
System.out.print("+");
System.out.print(str);
System.out.println("+");
System.out.println("after using strip-trailing method");
System.out.print("+");
System.out.print(str.strip());
System.out.print("+");
}
}
控制台输出:
Lambda参数的局部变量语法:
var是Java中的一个关键字,用于声明局部变量。它在JAVA10中引入,以改善Java中的类型推断。
在Java 11中,我们可以将var与lambda表达式参数一起使用,以避免将类型名称与变量名一起使用。在早期版本的Java中,在使用lambda表达式时,不允许使用var关键字,但现在我们可以使用它了。
(var s1,s2)-> s1 + s2 //不允许跳过
(var s1,字符串y)-> s1 + y //不允许混合var s1 -> s1 //不允许。如果您在lambda中使用var,则需要括号。
(var s1,s2)-> s1 + s2:
interface Add{
int sum(int a, int b);
}
public class Check {
public static void main(String[] args) {
//before java11 only below two are possible
Add Add = ( a, b)-> a+b;
int result = Add.sum(10, 20);
System.out.println(result);
Add Add1 = (int a, int b)-> a+b;
int result1 = Add.sum(10, 20);
System.out.println(result1);
//after java11 we can also var
Add Add2 = (var a, var b)-> a+b;
int result2 = Add.sum(10, 20);
System.out.println(result2);
}
}
但你必须记住,如果你要使用var,不允许跳过
我试图将var用于参数a,但被跳过b,所以我得到了以下错误:
(var s1,字符串y)-> s1 + y //不允许混合:
切勿将var与变量类型混合,如果你将其混合,将获得以下错误:
var s1 -> s1 //不允许。如果在lambda中使用var,则需要括号
观察上述示例,如果我使用括号没有收到任何错误,那么当使用var时,使用括号是强制性规则
基于嵌套的访问控制:
Java 11引入了基于巢穴的访问控制,允许类访问彼此的私有成员,而无需编译器创建的桥接方法。这些方法被称为可访问性宽桥接方法,编译器在程序执行期间将它们插入代码中。
在Java 11之前,如果我们的代码中有私有成员,那么编译器会创建可访问性宽阔的桥接方法,从而增加已部署应用程序的大小,并可能导致混乱。这就是为什么Java改进了基于巢穴的访问控制。
Java 11允许类和接口相互嵌套。这些嵌套类型可以是private
字段、方法和构造函数
HTTP客户端:
来自java.net.http软件包的新HTTP客户端是在Java 9中引入的。它现在已成为Java 11的标准功能
新的HTTP API提高了整体性能,并为HTTP/1.1和HTTP/2提供支持
读取/写入文件的字符串:
它引入了以下读取和写入文件的方法
writeString():此方法用于在文件中写入一些内容。
Files.writeString(Path.of(“D:\test.txt”), “AnilAppana”)
使用上面的代码,我们可以在该位置将一些文本插入文件,但如果我们想从中读取数据,请检查下面的片段
readString():此方法用于读取文件的内容。
String s1 = Files.readString(Path.of("D:\\test.txt"));
控制台输出:
isSameFile():此方法用于了解两个路径是否定位同一文件,isSameFile()如果文件是sae,则返回布尔值,如果文件不匹配,则返回true,则返回false
Files.isSameFile(Path.of(“example1.txt”), Path.of(“example1.txt”));
模式识别方法:
asMatchPredicate():如果模式与输入字符串匹配,此方法将创建一个谓词
var str = Pattern.compile("aba").asMatchPredicate();
System.out.println(str.test("aba"));
//it returns true if pattern matched else it returns false
Output: true
Optional.isEmpty():如果任何对象的值为空,则此方法返回true,否则返回false。
Optional str = Optional.empty();
System.out.println(str.isEmpty());
Output: true
TimeUnit转换:此方法用于将给定时间转换为日期、月、年等单位,以及时间
让我们尝试将天转换为分钟:
TimeUnit c1 = TimeUnit.MINUTES;
System.out.println(c1.convert(Duration.ofDays(3)));
Output:4320
希望对大家有用,谢谢!
原文作者:Anil Appana