文档章节

java10 新特性 详解

就叫程舰
 就叫程舰
发布于 02/12 11:52
字数 975
阅读 14
收藏 0

引言:

点击--》java11 新特性 详解

点击--》java9 新特性 详解

点击--》java8 新特性 详解

正题:

1、局部变量var

将前端思想var关键字引入java后段,自动检测所属于类型,一种情况除外,不能为null,因为不能判断具体类型,会报异常。

@Test
public void test1(){
    var number = 10;
    var str    = "i like java";
    var list   = new ArrayList<>();
    var map    = new HashMap<>();
    var set    = new HashSet<>();

    list.add("test var is list");

    map.put("1","test var is map");

    set.add("test var is set");

    System.out.println(number);

    System.out.println(str);

    System.out.println(list.toString());

    System.out.println(map.toString());

    System.out.println(set.toString());

}

结果:

10
i like java
[test var is list]
{1=test var is map}
[test var is set]

var可以用于任何类型,基本类型,集合,以及实体类等等都可以,省略了我们在前面写入具体的类型,我们尽管var,让它自己去判断就好了。

2、copyOf方法

在java.util.List、java.util.Set、java.util.Map新增加了一个静态方法copyOf,这些方法按照其迭代顺序返回一个不可修改的列表、集合或映射包含了给定的元素的集合。但是如果将返回后的集合继续修改,那么会保异常

@Test
public void test2(){
    var list = new ArrayList<>();

    list.add("first");
    list.add("second");
    list.add("third");

    var result = List.copyOf(list);

    System.out.println(result.toString());
}

结果:

[first, second, third]

3、ByteArrayOutputStream:toString(Charset)

Java.io.ByteArrayOutputStream,重载toString()方法,通过使用指定的字符集编码字节,将缓冲区的内容转换为字符串,以前是默认没有参数,现在加了一个编码的字符方法。

public static void main(String[] args) throws Exception {
    String str = "我喜欢java";
    ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes("utf-8"));

    ByteArrayOutputStream bos = new ByteArrayOutputStream();

    int c = 0;
    while((c = bis.read()) != -1) {
        bos.write(c);
    }
    //bos.toString() 默认的使用的UTF-8编码
    System.out.println(bos.toString());
}

这个是我们正常的格式,但是当我们修改代码,str.getBytes("gbk")的时候,创建的txt为乱码,那么我们使用toString()的新增方法,替换gbk

4、PrintStream、PrintWriter

Java.io.PrintStream,Java.io.PrintWriter,这两个类都有三个新的构造方法,他们需要而外的参数charset

@Test
public void test3() throws FileNotFoundException, UnsupportedEncodingException {
    String str = "我也特别喜欢java";
    var pri    = new PrintWriter("/Users/tentsuuhou/Desktop/11.txt");
    pri.println(str);
    pri.flush();
    pri.close();
}

我这个路径是mac电脑的,如果你是windows,可以写“d:/aa.txt“ 不过都需要提前创建好txt文件夹

结果为:

但是我们这个txt默认的都是utf-8格式的,如果突然改成gbk的话,格式会不匹配出现乱码,毕竟txt文件格式要和输出的格式一致才可以,这是我们可以使用一下

var pri    = new PrintWriter("/Users/tentsuuhou/Desktop/11.txt","gbk");

我们直接在后面添加一个格式参数就可以直接解决啦

5、Reader:transferTo方法

Java.io.Reader:transferTo从这个Reader中读取所有字符串,并按照所读取的顺序将字符串写入给指定的Writer

@Test
public void test4() throws IOException {
    var reader = new BufferedReader(new InputStreamReader(new FileInputStream("/Users/tentsuuhou/Desktop/11.txt"), "utf-8"));
    var p = new PrintWriter(new File("/Users/tentsuuhou/Desktop/12.txt"));
    reader.transferTo(p);
    p.flush();
    p.close();
    reader.close();
}

结果:12.txt文件将11.txt文件拷贝过来了,注意编码格式也要一致才可以。用这个方法方便了许多。

6、Formatter、Scanner

java.util.Formatter、java.util.Scanner新增三个构造方法,除了其他参数之外,都需要一个charset参数

将11.txt内容替换成这样

@Test
public void test5() throws FileNotFoundException {
    var scan = new Scanner(new FileInputStream(new File("/Users/tentsuuhou/Desktop/11.txt")),"utf-8");
    scan.useDelimiter(" |,");
    while(scan.hasNext()) {
        System.out.println(scan.next());
    }

}

scan.useDelimiter(" |,"); 这是空格或者‘,’ 都要分割,如下结果为:

7、垃圾收集器的优化

7.1 JDK9垃圾收集器

新生代:ParNew收集器;老年代:Parallel Old收集器   Stop The World

7.2 JDK10垃圾收集器

JDK10:G1(Garbage-Frist)全收集器

 

© 著作权归作者所有

共有 人打赏支持
就叫程舰

就叫程舰

粉丝 114
博文 199
码字总数 142903
作品 0
海淀
程序员
私信 提问
Java9新特性系列(总结)

Java9新特性系列 Java9新特性系列(序) Java9新特性系列(JDK与JRE) Java9新特性系列(模块化系统:Jigsaw->Modularity) Java9新特性系列(深入理解模块化) Java9新特性系列(module&ma...

码上论剑
2018/03/05
0
0
五分钟了解Java10针对垃圾收集的改进

Java10 已经发布了大概有一个多月了。我们在之前的文中介绍过10为我们带来的一些新特性:JDK10要来了:下一代 Java 有哪些新特性?。其中就提到了10 关于G1垃圾收集器的一些改进。G1在Java ...

ImportSource
2018/04/15
0
0
Java 9、10、11,哪个才是 Java 程序员的本命?

之前,我们在《Java 10无跳票发布,主推的新特性引争议》的文章中做了一个小的调查,主要是调查现在的Java程序员都在使用哪个版本的Java?根据调查结果,绝大部分的程序员都在使用Java 8。 无独...

Java的博客
2018/07/03
0
0
命令行输出java版本与环境变量配置的不一样问题解决

问题:java10刚出来,本着好奇的心,急切的装了体验一下,然后实际项目需求还是java8,所以体验完了就把环境变量改回来了,但是出现了一个问题,命令行输出java版本与环境变量配置的不一样,...

消散了的诗意
2018/06/20
0
0
因为Java10发布所以学些Java8

前言 不知不觉间Java10TM都发布了,看了下新特性,好激动啊,然后回过头来继续工作,叹一口气,看着这个已经上线在改造过程中的Java7项目开始暗自神伤 总想找点代码来写,可是这些年太依赖客...

天下无敌强
2018/03/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka入门

1、Kafka使用背景 在我们大量使用分布式数据库、分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户的搜索关键词...

watermelon11
昨天
0
0
Cannot list resources Permission denied: user=Administrator, access=READ_EXECUTE, inode="/tmp"

Cannot list resources Permission denied: user=ÁõÎĺÁ, access=READ_EXECUTE, inode="/tmp":root:supergroup:drwx-wx-wx windows系统 Spring boot 整合hadoop时报错。 java.lang.Ille......

lwenhao
昨天
0
0
【结构型】- 享元模式

享元模式 作用:利用共享技术有效地支持大量细粒度对象的复用 享元模式状态 内部状态:在享元对象内部不随外界环境改变而改变的共享部分,存储于享元对象内部 外部状态:随着环境的改变而改变...

ZeroneLove
昨天
2
0
Vue 中使用UEditor富文本编辑器-亲测可用-vue-ueditor-wrap

一、Vue中在使用Vue CLI开发中默认没法使用UEditor 其中UEditor中也存在不少错误,再引用过程中。 但是UEditor相对还是比较好用的一个富文本编辑器。 vue-ueditor-wrap说明 Vue + UEditor + ...

tianma3798
昨天
5
0
php-fpm配置

php-fpm配置 修改bbs.wangzb.cc.conf配置文件,将端口9000改为9001,重新访问网站是失败的 修改配置文件 # vim /etc/nginx/conf.d/bbs.wangzb.cc.conf# nginx -s reloadfastcgi_pass 1...

wzb88
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部