Java笔记第十二弹
Lambda表达式的标准格式
三要素:形式参数、箭头、代码块
格式:(形式参数)->(代码块)
形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可
->代表指向动作
Lamabda表达式练习1(抽象方法无参无返回值)
//Main.java(测试类)
public class Main{
public static void main(String[] args){
//在主方法中调用useFanxing方法
Fanxing f=new Fanxing();
useFanxing(f);
//匿名内部类
useFanxing(new Fanxing(){
public void eat(){
System.out.println("一天一苹果,医生远离我");
}
});
//Lambda表达式
useFanxing(()->{
System.out.println("一天一苹果,医生远离我");
});
//
}
private static void useFanxing(Fanxing f){
f.eat();
}
}
//Fanxing.java(接口)
public interface Fanxing {
void eat();
}
//Eatablelmp.java(类实现接口)
public class Eatablelmp implements Fanxing{
@Override
public void eat(){
System.out.println("一天一苹果,医生远离我");
}
}
Lambda表达式的练习2(抽象方法带参无返回值)
//Main.java(测试类)
public class Main{
public static void main(String[] args){
//匿名内部类
useFlyable(new Flyable(){
@Override
public void fly(String s){
System.out.println(s);
System.out.println("飞机自驾游");
}
});
//Lambda
useFlyable((String s)->{
System.out.println(s);
System.out.println("飞机自驾游");
});
}
//定义一个方法
private static void useFlyable(Flyable f){
f.fly("风和日丽,晴空万里");
}
}
//Flyable.java(接口)
public interface Flyable{
void fly(String s);
}
Lambda表达式的练习3(抽象方法带参带返回值)
//Main.java(测试类)
public class Main{
public static void main(String[] args){
//Lambda
useAddable((int x,int y)->{
return (x+y);//控制具体实现
});
}
private static void useAddable(Addable a){
a.add(1,100);
}
}
//Addable.java(接口)
public interface Addale{
int sum=int add(int x,int y);
System.out.println(sum);
}
Lambda表达式的省略模式
//就练习三为例
//1--参数的类型可以省略-----有多个参数的情况下不可以只省略一个
useAddable((x,y)->{
return x+y;//101
});
//如果参数类型仅有一个,那么小括号可以省略
useFlyable(s->{
System.out.println(s);
});
//如果代码块的语句只有一条,可以省略大括号和分号
useFlyable(s->System.out.println(s));
//如果有return,那么return也要省略掉
useAddable((x,y)->x+y);
Lambda表达式的注意事项
//使用Lambda必须要有接口,并且要求接口中1有且仅有一个抽象方法
//使用Lambda必须有上下环境,才能推导出Lambda对应的接口
Lambda表达式和匿名内部类的区别
//匿名内部类--可以是接口、抽象类和具体类
//Lambda只能是接口
//接口中有且仅有一个抽象方法,可以用Lambda表达式,也可以用匿名内部类
//多个抽象方法,只能使用匿名内部类
//匿名内部类--编译之后,产生一个单独的class字节码文件
//Lambda--编译之后,没有产生,对应的字节码会在运行的时候动态生成
接口组成更新
接口组成更新概述
加入了默认方法、静态方法、私有方法
接口中的默认方法
default--代表默认方法
//public可以省略,default不能省略
接口中的静态方法
static--代表静态方法
//只能通过接口调用
//public可以省略,static不能省略
接口中的私有方法
private
默认方法可以调用私有的静态方法和非静态方法
静态方法只能调用私有的静态方法
方法引用
方法引用符::
//Lambda表达式
usePrintable(s->System.out.println(s));
//方法引用
usePrintable(System.out::println);
//二者孪生兄弟
相关应用:
//Main.java
public class Main{
public static void main(String[] args){
//Lambda表达式
usePrintable(s->System.out.println(s));
//方法引用
usePrintable(System.out::println);
}
private static void usePrintable(MyInterface my){
my.show("12345678910");
}
}
//MyInterface.java(接口)
public interface MyInterface {
void show(String s);
}
Lambda表达式支持的方法引用
1、引用类方法
//格式:类名::静态方法
相关应用:
//Main.java
public class Main{
public static void main(String[] args){
useConverter(s-> Integer.parseInt(s));
//引用类方法
useConverter(Integer::parseInt);
}
private static void useConverter(Converter c){
int num=c.converter("123");
System.out.println(num);
}
}
//Converter.java
public interface Converter {
int converter(String s);
}
引用对象的实例化方法
//格式:对象::成员方法
相关应用:
//Main.java
public class Main{
public static void main(String[] args){
usePrinter(s-> System.out.println(s.toUpperCase()));
//引用方法
printString ps=new printString();
usePrinter(ps::printerUpper);
}
private static void usePrinter(Printer p){
p.printUpperCase("a");
}
}
//Printer.java
public interface Printer {
void printUpperCase(String s);
}
//printString.java
public class printString {
public void printerUpper(String s){
String result=s.toUpperCase();
System.out.println(result);
}
}
引用类的实例方法
//引用类中的成员方法
//格式:类名::成员方法
相关应用:
//Main.java
public class Main{
public static void main(String[] args){
useMyString((String s,int x,int y)->{
return s.substring(x,y);//截取部分字符串
});
useMyString((s,x,y)->s.substring(x,y));
//引用方法
useMyString(String::substring);
}
private static void useMyString(MyString mm){
String s=mm.mySubString("helloworld",1,6);
System.out.println(s);
}
}
//MyString.java
public interface MyString {
String mySubString(String s,int x,int y);
}
引用构造器
//格式:类名::new
相关应用:
//Main.java
public class Main{
public static void main(String[] args){
useStudentBuilder((String name,int age)->{
//Student s=new Student(name,age);
//return s;
return new Student(name,age);
});
useStudentBuilder((name,age)->new Student(name,age));
//引用方法
useStudentBuilder(Student::new);
}
private static void useStudentBuilder(StudentBuilder sb){
Student s=sb.Build("lili",19);
System.out.println(s.getName()+" "+s.getAge());
}
}
//StudentBuilder.java
public interface StudentBuilder {
Student Build(String name,int age);
}
//Student.java
public class Student{
private String name;
private int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public void setName(){}
public void setName(String name) {
this.name = name;
}
public void setAge(){}
public void setAge(int age){
this.age=age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
}
Java笔记第十二弹的更多相关文章
- Java笔记(十二) 文件基础技术
文件基础技术 一.文件概述 一)基本概念 1.文件的分类: 1)文本文件:文件中每个二进制字节都是某个可打印字符的一部分.如.java文件 2)二进制文件:文件中每个二进制字节不一定用来表示字符,也可 ...
- 菜鸡的Java笔记 第二十二 - java 对象多态性
本次只是围绕着多态性的概念来进行讲解,但是所讲解的代码与实际的开发几乎没有关系,而且多态一定是在继承性的基础上才可以操作的, 而本次将使用类继承的关系来描述多态的性质,实际的开发中不会出 ...
- 菜鸡的Java笔记 第十二 - java 构造方法与匿名对象
1.点 构造方法的作用以及定义要求 匿名对象的使用 构造方法: 只要出现()的都表示方法 构造方法就是类构造对象时调用的方法,主要用来实例化对象.> ...
- Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验
Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...
- OllyDbg 使用笔记 (十二)
OllyDbg 使用笔记 (十二) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 演示样例程序下载地址:http://pan.baidu.com/s/1eQiV6aI 安装好程序 ...
- Java设计模式(十二) 策略模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...
- VSTO 学习笔记(十二)自定义公式与Ribbon
原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...
- 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条
http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...
- Java进阶(三十二) HttpClient使用详解
Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...
- Java进阶(五十二)利用LOG4J生成服务日志
Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...
随机推荐
- Linux 系统挂载 ntfs 移动硬盘无法写入的问题
linux 下挂载 ntfs 移动硬盘无法写入问题 在机房使用移动硬盘时发现无法写入硬盘,具体是 Ubuntu 21.04 ,移动硬盘是 SSD ,分区类型是 NTFS . 首先百度得知最优办法是安装 ...
- c语言中位运算符及用法 异或
a&b: 00000000 00000000 a&b=0x0 a|b : 00000000 01011111 a|b=0x5f a^b : 00000000 01011111 ...
- flutter-linux(未完成)
运行命令 flutter run -d linux --no-sound-null-safety 打包(build/linux/x64/release/bundle/) flutter build l ...
- HCIP-进阶实验02-ISIS协议部署
进阶实验02-ISIS协议部署 1 实验需求 设备 接口 IP地址 备注 R1 G0/0/0 10.1.123.1/24 R2 G0/0/0 10.1.123.2/24 G0/0/1 10.1.24. ...
- phpExcel常用方法详解
phpExcel常用方法详解[附有php导出excel加超级链接] 发表于4年前(2012-07-20 12:57) 阅读(510) | 评论(0) 0人收藏此文章, 我要收藏 赞0 http://w ...
- 中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告4
中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告 实验四 恶意代码技术 学生姓名 陈禹 年级 2018 区队 ...
- python基于word模板批量生成word文件
1.需要用到docxtpl库,用于操作word模板 安装:pip insatll docxtpl 处理之前的word模板 处理后的word 下面直接上代码揭开它的神秘面纱:第一步,读取excel中的内 ...
- 三大常用集群leader选举+哨兵模式原理
一,Zookeeper集群的leader选举 Zookeeper的选举机制两个触发条件:集群启动阶段和集群运行阶段leader挂机(这2种场景下选举的流程基本一致) 1,Zookeeper集群中的fo ...
- SpringIOC以及AOP注解开发
和 XML 配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框架检测到注解标记的位置,然后针对这个位置按照注解标记的功能来执行具体操作. 本质上:所有一切的操作都是 Java ...
- Alibaba Cloud Linux 3.2104 64位安装php7.2.12
1 安装php所需要的扩展 yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel curl curl ...