JDK10.0新特性
1.局部变量类型推断
2.垃圾收集器优化
3.新增加73个新功能扩展API类库
4.copyof方法
5.ByteArrayOutputStream下的toString()方法
6.Java.io.PrintStream、java.io.PrintWriter
7.Java.io.Reader:transferTo方法
8.java.util.Formatter、java.util.Scanner
使用jdk10需要最新版eclipse
局部变量类型推断
- var:保留类型,不是关键字
- 意味着我们还可以用var来定义变量名字或方法名
- 只针对局部变量
- 所有定义类型或返回值类型都可以用var表示
- var 不允许赋值null
/**
* JDK10新特性讲解:局部变量类型推断
* @author Administrator
* 定义一个javabean
*/
class Users{
private String username;
private Integer userage;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getUserage() {
return userage;
}
public void setUserage(Integer userage) {
this.userage = userage;
}
@Override
public String toString() {
return "Users [username=" + username + ", userage=" + userage + "]";
}
}
public class Demo1 {
/**
* 该特定注意点:
* 1.只针对局部变量
* 2.var 是保留类型不是关键字。意味着我们还可以用var来定义变量名或者是方法名
* 3.var 不允许赋值null
* @param args
*/
public static void main(String[] args) {
var i = 10;
var str="abc";
var list = new ArrayList<>();
list.add("list test var");
var set = new HashSet<>();
set.add("set test var");
var map = new HashMap<String,String>();
map.put("test", "map test var");
var users = new Users();
users.setUserage(20);
users.setUsername("user test var");
System.out.println(i);
System.out.println(str);
for(var i1=0;i1<list.size();i1++) {
System.out.println(list.get(i1));
}
for(var temp :set) {
System.out.println(temp);
}
Set<String> keys = map.keySet();
for(var key :keys) {
System.out.println(map.get(key));
}
System.out.println(users);
}
}
垃圾收集器优化
- jdk9:新生代:parnew收集器.老年代:parallel oldl收集器
- jdk10:G1(Garbage-First)全收集器
- 找到安装路径下D:\Java\jdk-10.0.1\bin\jmc.exe
新增加73个新功能扩展API类库
copyof方法
- 在java.util.List、java.util.Set、java.util.Map新增加了一个静态方法copyOf
- 这些方法按照其迭代顺序返回一个不可修改的列表、集合或映射包含了给定的元素的集合
public class Demo2 {
public static void main(String[] args) {
//list集合
var list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
var list2 = List.copyOf(list);
//如果你此时要修改list2就会报错
//list2.add("e");这个代码会报错
/*for (String string : list2) {
System.out.println(string);
}*/
//set集合
var set = new HashSet<String>();
set.add("b");
set.add("a");
set.add("c");
set.add("d");
var set2 = Set.copyOf(set);
/*for (String string : set2) {
System.out.println(string);
}*/
//map集合
var map = new HashMap<>();
map.put("k1", "a");
map.put("k2", "b");
var map2 = Map.copyOf(map);
var keys = map2.keySet();
for (Object object : keys) {
System.out.println(map2.get(object));
}
}
}
ByteArrayOutputStream下的toString()方法
- java.io.ByteArrayOutputStream:toString(Charset)
- 重载toString()方法,通过使用指定的字符集编码字节,将缓冲区的内容转换为字符串。
public class Demo3 {
public static void main(String[] args) throws Exception {
//定义一个字符串
String str = "我是中国人";
//输入流将字符串转换成字节,并以gbk编码格式输入
ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes("gbk"));
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int c = 0;
while((c = bis.read()) != -1) {
bos.write(c);
}
//bos.toString() 默认的使用的UTF-8编码
System.out.println(bos.toString());
//所以上面输入使用gbk那么后面输出也要使用gbk
System.out.println(bos.toString("gbk"));
}
}
Java.io.PrintStream、java.io.PrintWriter
- 这两个类都有三个新的构造方法,他们需要额外的参数charset
public class Demo4 {
public static void main(String[] args) throws Exception{
//定义一个字符串
String str = "中是中国人";
//使用输出流,在d盘写一个aa.txt文件,指定编码GBK
var p = new PrintWriter("d:/aa.txt", "gbk");
//输出字符串
p.println(str);
//刷新
p.flush();
//关流
p.close();
}
}
Java.io.Reader:transferTo方法
- 从这个Reader中读取所有字符串,并按照所读取的顺序将字符串写入给指定的Writer
- 就是说你不要再写读一行写一行这样的代码
public class Demo5 {
public static void main(String[] args) throws Exception{
//拷贝文件案例
//读取文件
var reader = new BufferedReader(new InputStreamReader(new FileInputStream("d:/aa.txt"), "gbk"));
//输出文件
var p = new PrintWriter(new File("d:/cc.txt"));
//使用读这个方法,省略读一行写一行的代码
reader.transferTo(p);
//刷新和关流
p.flush();
p.close();
reader.close();
}
}
java.util.Formatter、java.util.Scanner
- 新增三个构造方法,除了其他参数之外,都需要一个charset参数
public class Demo6 {
public static void main(String[] args) throws Exception {
//读文件
var scan = new Scanner(new FileInputStream(new File("d:/aa.txt")),"gbk");
//如果你文件内容中有空格或者逗号,那么使用这个方法
scan.useDelimiter(" |,");
while(scan.hasNext()) {
//然后这里要使用next方法读
System.out.println(scan.next());
//System.out.println(scan.nextLine());读出所有的内容包括空格
}
}
}
转载请注明出处,如有错误请帮我指出谢谢^!