java10-11新特性----大总结--建议收藏、点赞、关注 三连

   日期:2020-09-01     浏览:78    评论:0    
核心提示:前置文章回顾:java8新特性—大总结–建议收藏、点赞、加关注!!!java9新特性----大总结–建议收藏、点赞、关注 三连java 9 和 java 10两个版本的生命周期很短java 10是2018年3月发布的,才经过6个月java11就发布了2014年发布的java 8,2018年9月发布java 11java11是一个LTS版本(Long-term support)因此也是一个很重要的版本。新特性一:类型推断varvar的主要作用是可以使用在lambda表达式上,当然也可以是用
前置文章回顾:

java8新特性—大总结–建议收藏、点赞、加关注!!!
java9新特性----大总结–建议收藏、点赞、关注 三连

java 9 和 java 10两个版本的生命周期很短
java 10是2018年3月发布的,才经过6个月java11就发布了
2014年发布的java 8,2018年9月发布java 11

java11是一个LTS版本(Long-term support)因此也是一个很重要的版本。

新特性一:类型推断var

var的主要作用是可以使用在lambda表达式上,当然也可以是用在局部变量中。

主要使用在lambda表达式上通过注解可以校验类型是否符合注解规则

Consumer<String> consumer= (@Deprecated var a)->a.toUpperCase();
consumer.accept("abcdef");

下面是错误的用法,会报错
因为注解需要有一个类型,相当于底层给你转换了一下。

Consumer<String> consumer= (@Deprecated a)->a.toUpperCase();//错误的写法
consumer.accept("abcdef");

新特性二:新增字符串方法

源码:
isBlank()判断字符串是否全为空白(空格、tab、换行等)

public boolean isBlank() {
    return indexOfNonWhitespace() == length();
}

strip()去除字符串首尾的空白,与trim()不同的是,trim()只能去除ASCII码小于32的字符,这种方式有明显的缺点(例如中文全角空格就不能去除),而strip()可以去除所有语言中的空白字符,因此建议使用strip()字符代替原先的trim()
源码:

public String strip() {
    String ret = isLatin1() ? StringLatin1.strip(value)
                            : StringUTF16.strip(value);
    return ret == null ? this : ret;
}

stripLeading()去除首部的空白,和strip()一样可以去除中文的空白
源码:

public String stripLeading() {
    String ret = isLatin1() ? StringLatin1.stripLeading(value)
                            : StringUTF16.stripLeading(value);
    return ret == null ? this : ret;
}

stripTrailing()去除尾部的空白,和前面一样的设计可以去除任意语言的空白
源码:

public String stripTrailing() {
    String ret = isLatin1() ? StringLatin1.stripTrailing(value)
                            : StringUTF16.stripTrailing(value);
    return ret == null ? this : ret;
}

repeat()复制字符串,可以将字符串复制,例如"java".repeat(3);得到的是"javajavajava"字符串
源码:

public String repeat(int count) {
    if (count < 0) {
        throw new IllegalArgumentException("count is negative: " + count);
    }
    if (count == 1) {
        return this;
    }
    final int len = value.length;
    if (len == 0 || count == 0) {
        return "";
    }
    if (len == 1) {
        final byte[] single = new byte[count];
        Arrays.fill(single, value[0]);
        return new String(single, coder);
    }
    if (Integer.MAX_VALUE / count < len) {
        throw new OutOfMemoryError("Repeating " + len + " bytes String " + count +
                " times will produce a String exceeding maximum size.");
    }
    final int limit = len * count;
    final byte[] multiple = new byte[limit];
    System.arraycopy(value, 0, multiple, 0, len);
    int copied = len;
    for (; copied < limit - copied; copied <<= 1) {
        System.arraycopy(multiple, 0, multiple, copied, copied);
    }
    System.arraycopy(multiple, 0, multiple, copied, limit - copied);
    return new String(multiple, coder);
}

lines()行数统计,注意这里返回的是一个流,因此之前java8中的Stream操作你懂的!骚操作。

行数统计案例①:"A\nB\nC\n".lines().cpunt();返回的是3
源码:

public Stream<String> lines() {
    return isLatin1() ? StringLatin1.lines(value) : StringUTF16.lines(value);
}

lines案例②:利用了java9中的try()流会自动关闭,并且通过获取流,在控制台中打印了文件内容

try(FileInputStream fis=new FileInputStream("文件路径")){
    byte[] buffer=new byte[fis.available()];
    fis.read(buffer);
    String s = new String(buffer);
    s.lines().forEach(System.out::println);//调用字符串新增的方法,使用Stream流进行打印字符串
} catch (IOException e) {
    e.printStackTrace();
}

新特性三:可以直接通过java执行.java文件不需要javac编译

jdk11可以不需要javac编译java文件然后再通过java命令执行,可以直接java命令执行java源程序。
如下位置

jdk11就有的新特性

使用java直接执行java文件的约束
①会以第一个类作为主方法的入口,也就是说第一个类要有main方法
②不可以使用外部文件定义的.java源文件定义的类

透过本质,猜测使用的是jshell执行源文件,相当于将源文件的代码读取出来放到jshell执行

新特性四:Epsilon垃圾收集器(不回收内存,只分配内存)

Epsilon只进行内存分配但不实现回收的GC,当堆内存被用完,JVM就会退出。

Epsilon有什么作用?

  1. 做性能测试 (可以过滤GC引起的性能假象,默认的GC会自带回收垃圾!)
  2. 内存压力测试 ()

新特性五:ZGC垃圾收集器(STW延迟的时间<=10ms)

  • ZGC处理的位数时64 bit= 8 byte,之前的GC是62 bit =4 byte
  • 吞吐量影响率小于15%
  • 因为ZGC多了4byte长度空间,指令就会更多,后面版本的ZGC有更多的功能
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服