1.jdk1.5
1.1 静态导入:
导入静态方法方便使用,优先加载
1.2 可变参数
格式:数据类型…—可变参数(只能接收对应类型的数据)
可以接收任意多个参数(0个,1个,多个)
底层根据数组来实现的,接收到的每个参数值赋值给数组元素
只能出现在参数列表的最右边并且最多只能有一个
1.3 枚举
将值一一列举(枚举常量)
枚举常量在首行
定义属性和方法
构造方法私有化
定义抽象方法
switch-case的表达式从jdk1.5开始支持枚举类型
package cn.tedu.jdkx.jdk5;
public class EnumDemo {
public static void main(String[] args) {
Season spring = Season.spring;
//switch表达式支持枚举类型
switch (spring){
case spring:
System.out.println("春游!!!");
break;
case summer:
System.out.println("游泳");
break;
case autumn:
System.out.println("爬山");
break;
case winter:
System.out.println("打雪仗");
break;
}
}
}
//枚举类
enum Season{
//将值一一列举
//spring--等效--public final static Season spring=new Season();
//列举的是枚举常量(要在首行)
spring{
@Override
public void n() {
}
},summer{
@Override
public void n() {
}
},autumn{
@Override
public void n() {
}
},winter{
@Override
public void n() {
}
};
//属性
int age;
//方法
public void m(){
}
//私有化构造方法
private Season(){
}
//定义抽象方法
//保证每个枚举常量都通过匿名内部类重写抽象方法
public abstract void n();
}
//定义类---代表季节的类,创建的对象就是具体季节
//一年四季,类只能创建四个对象
/*class Season{
//私有化的构造方法
private Season(){}
//创建四个对象---四个季节
public final static Season spring=new Season();
public final static Season summer=new Season();
public final static Season autumn=new Season();
public final static Season winter=new Season();
}*/
2.jdk1.8
接口可以定义实体方法(1.默认方法(default)2.静态方法(static))
Lambda表达式可以实现接口重写抽象方法(前提就是接口必须是函数式接口才能使用)
package cn.tedu.jdkx.jdk8;
public class LambdaDemo1 {
public static void main(String[] args) {
/* //创建接口实现类对象调用接口的默认的实体方法
System.out.println(new CalcImpl().cj(1,2));
//创建匿名内部类对象调用接口里实体方法
System.out.println(new Calc(){}.cj(1,2));*/
//接口直接调用实体方法(静态方法)
// System.out.println(Calc.sum(1,2));
//Lambda表达式---实现接口重写抽象方法
//前提:接口里只有一个抽象方法
//(参数列表)->{重写方法的方法体}
//Calc c=(int x,int y)->{return x>y?x:y;};
//由前推导出参数类型,可以省略参数类型不写
//如果重写方法的方法体只有一句话可以省略{}和return不写
Calc c=(x,y)->x>y?x:y;
System.out.println(c.max(1,2));
}
}
//接口---计算器
//接口里只有一个抽象---函数式接口---函数式编程
@FunctionalInterface
interface Calc{
//求大小---抽象方法
int max(int x,int y);
//求乘积---体方法(默认方法)
public default int cj(int x,int y){
return x*y;
}
//求和---实体方法(静态方法)
public static int sum(int x,int y){
return x+y;
}
}
//接口的实现类
/*class CalcImpl implements Calc{
}*/
Stream(操作集合的流式结构)
提供了大量的函数式接口可以使用Lambda表达式来操作集合元素对象
package cn.tedu.jdkx.jdk8;
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;
public class StreamDemo {
public static void main(String[] args) {
//创建集合对象
Collection<String> c=new ArrayList<>();
//添加元素
c.add("JAVA");
c.add("C");
c.add("Python");
c.add("PHP");
c.add("C#");
c.add("C++");
c.add("GO");
//筛选出以C开头的元素
/*for(String s:c){
//判断每个元素对象内容是否以C开头
if(s.startsWith("C")){
System.out.println(s);
}
}*/
//调用方法返回流式结构
Stream<String> stream = c.stream();
//过滤指定元素
/*stream.filter(new Predicate<String>() {
//重写方法指定过滤规则
//重写方法可以接收每个元素对象
@Override
public boolean test(String s) {
return s.startsWith("C");
}
}).forEach(new Consumer<String>() {
//输出过滤之后的元素对象内容
@Override
public void accept(String s) {
System.out.println(s);
}
});*/
//Lambda表达式改写
stream.filter(s->s.startsWith("C")).sorted
((s1,s2)->s2.compareTo(s1))
.forEach(str-> System.out.println(str));
}
}