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生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...
随机推荐
- 037_Clone Button
ResolutionTo do this first go to Setup | Customize | Accounts | Buttons and Links | New. Enter the f ...
- JS篇(010)-JavaScript 继承的方式和优缺点
答案:六种方式 一.原型链继承 缺点: 引用类型的属性被所有实例共享 在创建 Child 的实例时,不能向 Parent 传参 二.借用构造函数(经典继承) 优点: 避免了引用类型的属性被所有实例共享 ...
- bootstrap-select使用、relation-graph使用
bootstrap-select 这里要实现的是带有搜索功能的select框, bootstrap 官网没有可以直接拿来用的.如下是官网给出的解释,带搜索功能的select需要自定义. 在网上找到了有 ...
- Ubuntu系统运行Steam中VR游戏的相关软件环境配置说明
ubuntu下的SteamVR(HTCVive)设置教程 贴吧链接 https://tieba.baidu.com/p/5333529880 运行SteamVR出现的一些问题解决方案参考链接 ...
- Vue 防抖节流获取this问题
1. 防抖 debounce(func, delay = 500) { let _this = this; let args = arguments; return (function () { if ...
- ESXI不重启增加硬盘空间更新
ESXI虚拟机Linux添加新磁盘后,可以通过重新扫描SCSI总线,在不重启虚拟机的情况下添加SCSI设备在线扩容磁盘(不停机)后,添加磁盘无法识别的问题,尝试了多种办法,最终通过重新扫描SCSI设备 ...
- axios取消重复请求与更新token并续订上次请求
一.问题引入 当用户发起一个请求时,判断token是否已过期,若已过期则先调refreshToken接口,拿到新的token后再继续执行之前的请求. 难点:当同时发起多个请求,token 过期会调用多 ...
- ant design upload组件的beforeUpload阻止默认上传行为
const onImportExcel = (file) => { return new Promise(async (resolve, reject) => { ... //要执行的语句 ...
- echarts属性大全
// 全图默认背景 // backgroundColor: 'rgba(0,0,0,0)', // 默认色板 color: ['#ff7f50','#87cefa','#da70d6','#32cd ...
- Nginx系列---【配置文件中静态资源文件禁止通过目录查看】
配置文件中静态资源文件禁止通过目录查看 1.问题 nginx作为文件服务器时,默认是可以通过目录路径查看该目录下的所有文件的,这样很不安全,容易造成静态资源泄露. 2.方案 location /ima ...