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

前置文章回顾:

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().count();返回的是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有更多的功能
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗水人间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值