首页 > 编程语言 >java9&10&11

java9&10&11

时间:2023-05-31 12:55:10浏览次数:42  
标签:11 10 Optional System 接口 var println java9 out

java9

语法改进:接口的私有方法

Java 8中规定接口中的方法除了抽象方法之外,还可以定义静态方法和默认方法。一定程度上,扩展了接口的功能,此时的接口更像是一个抽象类。
在Java 9中,接口更加的灵活和强大,连方法的权限修饰符都可以声明为private的了,此时方法将不会称为你对外暴露API的一部分。

public interface MyInterface{

//如下的三个方法修饰符都是public
	void methodAbstract();
	
	static void methodStatic(){
		System.out.println("我是接口中的静态方法");
	}
	
	default void methodDefault(){
		System.out.println("我是接口中的默认方法");
	}
	//jdk9中允许接口中定义私有的方法
	private void methodPrivate(){
		System.out.println("我是接口中的私有方法");
	}
}
public class MyInterfaceImp implements MyInterface{
	@Override
	public void methodAbstract(){
	
	}
	@Override
	public void methodDefault(){
		System.out.println("实现类实现了接口中的默认方法")
	}
	
	
	
	public static void main(String[] args){
	//接口中的静态方法只能由接口自己调用,接口的实现类不能调用接口的静态方法
		MyInterface.methodStatic();
		MyInterfaceImpl impl = new MyInterfaceImpl();
		impl.methodDefault();
		//私有方法不能调用
		//impl.methodPrivate();
	}
}

钻石操作符使用升级

我们将能够与匿名实现类共同使用钻石操作符(diamond operator)在Java8中如下操作时会报错的:

Comparator<Object> com = new Comparator<>(){
	@Override
	public int compare(Object o1,Object o2){
		return 0;
	}
}

try语句

Java8中,可以实现资源的自动关闭,但是要求执行后必须关闭的所有资源必须在try子句中初始化,否则编译不通过,如下例所示:

//java8中资源关闭操作
try(InputStreamReader reader = new InputStreamReader(System.in)){
	//读取数据细节省略
}catch(IOException e){
	e.printStackTrace();
}
//Java9中资源关闭操作
//此时的资源属性是常量
InputStreamReader reader = new InputStreamReader(System.in);
try(read){
	//读取数据细节省略
}catch(IOException e){
	e.printStackTrace();
}

String存储结构的变更

Java8用的是char[],java9用的是byte[]

集合工厂方法:创建只读集合

//java8的写法
List<String> namesList = new ArrayList<>();
namesList.add("joe");
namesList.add("Bob");
namesList.add("Bill");
namesList = Collections.unmodifiableList(nameList);
System.out.println(namesList);

//此时集合只是一个只读集合
List<Integer> list = Arrays.asLisst(1,2,3,4);

//java9
List<Integer> list11 = List.of(1,2,3,4,5);

InputStream加强

transferTo:可以用来将数据直接传输到OuptputStream,这是在处理原始数据流时非常常见的一种观念用法

ClassLoader c1 = this.getClass().getClassLoader();
try(InputStream is = c1.getResourceAsStream("hello.txt");OutputStream os = new FileOutPutStream("src\\hello.txt")){
	is.transferTo(os);
}catch(IOException e){
	e.printStackTrace();
}

增强的StreamAPI

//takeWhile()的使用:返回从开头开始的按照指定规则尽量多的元素
List<Integer> list = Arrays.asList(23,43,35,543,23,45,334);
list.stream().takeWhile(x->x<60).forEach(System.out::println);
//dropWhile()的使用:返回剩余的元素
list.stream().dropWhiele(x0>x<60).forEach(System.out::println);
//ofNullable()使用
//java8中Stream不能完全为null,否则会报空指针异常。而java9中的ofNullable方法允许我们创建一个单元素Stream,可以包含一个非空元素,也可以创建一个空的Stream
//of()参数中的多个元素,可以包含null值
Stream<Integer> stream1 = Stream.of(1,2,3,null);
stream1.forEach(System.out::println);
//of()参数不能只存储单个null值,否则报异常
//ofNullable():形参变量是可以为null值得单个元素
Integer i = 10;
i = null;
Stream<Integer> stream 3 = Stream.ofNullablle(i);
//java8
Stream.iterate(0,x->x+1).limit(10).forEach(System.out::print);
//java9 添加终止条件
Stream.iterate(0,x->x<100,x->x+1).forEach(System.out::println);

Optional获取Stream

List<String> list = new ArrayList<>;
list.add("Tom");
list.add("Jerry");
list.add("Tim");
Optional<List<String>> optional = Optional.ofNullable(list);
Stream<List<String>> stream = option.stream();
stream.flatMap(x->x.stream()).forEach(System.out::println);

java10 特性

局部变量类型推断

不适用得情况
初始值为null,方法引用,Lambda表达式,为数组静态初始化

var num = 10;
var list = new ArrayList<>(Integer);
for(var i : list){
	System.out.println(i);
}

集合中新增copyOf(),用于创建一个只读的集合

var list1 = List.of("java","python","c");
var copy1 = List.copyOf(list1);
System.out.println(list1==copy1);//true

var list2 = new ArrayList<String>();
list2.add("aaa")
var copy2 = List.copyOf(list2);
System.out.print(list2==copy2);//false
//copyOf(Xxx coll):如果参数coll本身就是一个只读集合,则copyOf()返回值即为只读集合,如果参数coll不是一个只读集合,则copyOf()返回一个新的集合,这个集合是只读的

java11新特性:GC

String中新增的方法

isBank():判断字符串是否为空
strip():去除首尾空格
stripTrailing():去除尾部的空格
stripLeading():去除首部的空格
repeat():复制字符串
lines().count():行数统计

Optional加强

新增方法:
boolean isEmptly():判断value是否为空 11
ifPresentOrElse(Consumer<? super T> action,Runnable emptyAction):value非空执行参数1 功能,如果value为空执行参数2功能 9
Optional<T> or(Supplier<? extends Optional<? extends T>> supplier:value非空,返回对应的Optional;value为空返回形参封装的Optional 9
Stream<T> stream():value非空,返回仅包含此value的Stream,否则返回一个空的Stream 9
T orElseThrow():value非空,返回value;否则抛异常NoSuchEmelmentException 10

var op = Optional.empty();
op = Optional.of("abc");
Optional<String> op1 = Optional.of("hello");
op.or(()->op1);

局部类型推断升级

//错误的形式:必须要有类型,可以加上var
//Consumer<String> con1 = (@Deprecated t)-> System.out.println(t.toUpperCase());
//正确的形式
//使用var的好处是在使用lambda表达式时给参数加上注解
Consumer<String> con2  = (@Deprecated var t) ->System.out.println(t.toUpperCase);

编译和运行合为一个 java javatest.java

标签:11,10,Optional,System,接口,var,println,java9,out
From: https://www.cnblogs.com/rhy2103/p/17445816.html

相关文章

  • error LNK1104: 无法打开文件“d3dx10d.lib”
    将库目录默认的$(DXSDK_DIR)\Lib\x86删除,改为绝对路径就可以了。。奇怪。。明明已经在电脑的环境变量里配置了DXSDK_DIR变量了。而且include目录能找到啊。。怎么就lib文件夹找不到呢? 参考:https://www.cnblogs.com/Thermo/p/15755273.html......
  • SSO2.0 11-20230530
           ......
  • 1107 Social Clusters
    题目:Whenregisteronasocialnetwork,youarealwaysaskedtospecifyyourhobbiesinordertofindsomepotentialfriendswiththesamehobbies.A socialcluster isasetofpeoplewhohavesomeoftheirhobbiesincommon.Youaresupposedtofindallt......
  • 10.UG钣金使用方法详解
    1.创建钣金件或者拉伸后转换为钣金2.    ......
  • Gym - 101174F[(DSU)+树状数组]
    题目链接:https://vjudge.net/problem/Gym-101174F 解题思路:其实这题不同启发式合并也可以做,对rank排个序,然后在做个dfs序,把rank值小的先插入树状数组中更新,然后对每个节点查询它的dfs序的区间和就好了。对于DSU来说就更加无脑了,本来就是"暴力",所以我们直接DSU再加一个树状数组维......
  • Gym - 101170H[格雷码规律]
    题目链接:https://vjudge.net/problem/Gym-101170H 解题思路:如果用一个值给他们做排名,可以发现一个格雷码的值是从高位开始间隔性+,-变化2^(i)-1。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;chara[105],b[105];intmain(){ intn; scanf("%d",&n)......
  • Gym - 101170A[DP+思维]
    题目链接:https://vjudge.net/problem/Gym-101170A 解题思路:首先要确定的是,改变次数最多不会超过2*n次,因为n最多40,所以我们只要改变每个数的前两个最高位,肯定可以让n个数有序。然后我们就可以想办法搞个DP[i][j]表示将前i个数变成有序花了j次的最小值。为什么是最小值呢,维护最小......
  • Gym - 101480J[判环+Hash]
    题目链接:https://vjudge.net/problem/Gym-101480J 解题思路:因为度最多为3所以流量最多不超过3对于在同一个连通块上:flow==1对于在同一个环上(可以看做有向图强连通):flow==2对于某一个点对,删除任意一条边他们还是在同一个环上,说明去掉一个流量他们的流量还是2,所以这种情况:f......
  • Gym - 100851J [随机+01集合]
    题目链接:https://vjudge.net/problem/Gym-100851J 解题思路:出题故意不给501次,就是要让我们去随机找出值为n/2的串,每次最坏的情况随机一个串值是n/2的概率是:约等于0.022。那我们随机400不中的概率是 = 0.000309336,概率非常低,所以几乎是可以找到的。找到之后s串后,同时改变0和i......
  • Gym - 100851L [二分+线性推导]
    题目链接:https://vjudge.net/problem/Gym-100851L 解题思路:根据题目知道,墙的两边是不能放石头的,所以最终的结果肯定会收到两边墙的限制,从而使得答案不会超过1e9+1e5。此外我们再去二分最大高度,一个明显的结论就是以i为最高点建墙的话最少花费肯定是建一个金字塔形的墙面。但由于......