Lambda表达式基本写法
(参数)->结果
如(String s)->s.length()
如 x->x*x
如 ()->{System.out.println("aaa");}
大体上相当于其他语言的“匿名函数”或“函数指针”
在java中它实际上是”匿名类的一个实例“
原来写法
Runnable dolt=new Runnable(){
public void run(){
System.out.println("aaa");
}
};
new Thread(dolt).start();
lambda表达式
后来写法
Runnable dolt=()->System.println("aaa");
new Thread(dolt).start();
lambda表达式本质上和原来写法一样,是匿名类的一个对象实例
用lambda表达式后就可以写的简单,甚至可以写的更简单一点
new Thread(()->System.out.println("aaa")).start();
有了lambda表达式可以把匿名类、对象写的更简单。
Lambda表达式时接口或者说是接口函数的简写
其基本写法是 参数->结果
这里参数是()或1个或多个参数
结果是指表达式或语句或{语句}
求积分
interface Fun{double fun(double x);}
double d=Integral(new Fun(){
public double fun(double){
return Math.sin(x);
}
},0,Math.PI,1e-5);
用lambda表达式
double d=Intergral(x->Math.sin(x),0,Math.PI,1e-5);
Lambda大大简化了书写
在线程例子中
new Thread(()->{...}).start();
在积分例子中
d=Integral(x->Math.sin(x),0,1,EPS);
d=Integral(x->x*x,0,1,EPS);
d=Integral(x->1,0,1,EPS);
Lambda只能表示一个函数
能写成Lambda的接口 要求包含最多只能由一个抽象函数
这样的接口可以用来注计
@FunctionalInterface来表示,称为函数式接口
如 @FunctionalInterface
interface Fun{double fun(double(x);}
Comparator<Person>compareAge=(p1,p2)->p1.age-p2.age;
Arrays.sort(people,compareAge);
Arrays.sort(people,(p1,p2)->p1.age-p2.age);
Arrays.sort(people,(int)(p1.score-p2.score));
Arrays.sort(people,(p1,p2)->p1.name.compareTo(p2.name));
Arrays.sort(people,(p1,p2)->-p1.name.compareTo(p2.name));
分别是按照年龄,分数,姓名,进行排序
装箱、枚举、注解
基本类型的包装类
他将基本类型包装成Object(引用类型) 因为有些时候,接口时引用类型的所以要包装一下
如 int 变成 Interger
共8类:Boolean、Byte、Short、Character、Integer、Long、Float、Double
Integer I=new Integer(10);//将int类型转换成引用类型 ,但每次这样挺麻烦的 所有由装箱,拆箱
装箱:Integer=10; 拆箱:int i=I;实际上(Integer I=Integer.valueOf(10); int i=I.intValue();)
主要方便应用于集合中,Object[]ary={1,"aaa"}
枚举(enum)时一种特殊的class类型
在简单的情况下,用法和其他语言的enum相似
enum Light{Red,Yellow,Green};
Light light=Light.Red;
但实际上,它生成了 class Light extends java.lang.Enum
可以在enum定义体中,添加字段、方法、构造方法
enum Direction{
EAST("东",1),SOUTH(”南“,2),WEST("西",3),NORTH("北",4);
private Direction(String desc,int num){
this.desc=desc;this.num=num;
}
private String desc;
private int num;
public String getDesc(){return desc;}
public int getNum(){return num;}
}
注解,又称为注记、标记、标注、注释 不同于comments,是在各种语法要素上加上附加信息,以供编译器或其他程序使用
所有的注解都是 java.lang.annotation.Annotation的子类
常用的注解
@Override 表示覆盖父类的方法
@Deprecated 表示过时的方法
@SuppressWarnings 表示让编译器不产生警告
自定义注解 比较复杂
public @interface Author{
String name();
}