匿名内部类

参考:https://www.runoob.com/w3cnote/java-inner-class-intro.html

进入后搜索匿名内部类。

函数型接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

例如,我们常用的Runnable接口,翻看源码发现,它只有一个抽象方法run,它就是一个函数型接口。

@FunctionalInterface
public interface Runnable {
public abstract void run();
}

  参考:https://www.runoob.com/java/java8-functional-interfaces.html

匿名内部类与函数型接口简化一个线程案例:

简化前:

package _20191203;
/**
* 创建线程的方法一:继承Thread
* @author UID
*
*/
public class ThreadTest{
public static void main(String[] args) {
new Thread(new ThreadRun()).start();//主要看这里
for(int i = 0;i < 200;i++) {
System.out.println("一边听歌");
}
} } class ThreadRun implements Runnable{
@Override
public void run() { //必需重写run方法
for(int i = 0;i < 200;i++) {
System.out.println("一边敲代码");
}
}
}

  

简化后:

package _20191203;
/**
* 创建线程的方法一:继承Thread
* @author UID
*
*/
public class ThreadTest{
public static void main(String[] args) {
new Thread(new Runnable(){ //主要看这里
@Override
public void run() {
for(int i = 0;i < 200;i++) {
System.out.println("一边敲代码");
}
}
}).start();
for(int i = 0;i < 200;i++) {
System.out.println("一边听歌");
}
}
}

 

引入lamda表达式 

emm...不好讲啊。

上面的代码还可以使用lamda表达式进一步简化。

lamada时jdk 8 的新特性,它不是java独创的,实际上它来源自scale社区,并且被越来越多的程序中使用,它可以大大简化代码。

参考:https://baike.baidu.com/item/Lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F/4585794?fr=aladdin

lamda表达式的使用方法参考:https://www.cnblogs.com/coprince/p/8692972.html

可以使用lamda表达式的接口就是函数型接口,在上面的案例中,Runnable接口就是一个函数型接口,所以这里我们可以使用lamda表示式对上面的例子进行简化:

public class ThreadTest{
public static void main(String[] args) {
//new Thread(new ThreadRun()).start();
new Thread(()->{ //主要看这里 lamda表达式
for(int i = 0;i < 200;i++) {
System.out.println("一边敲代码");
}
}).start();
for(int i = 0;i < 200;i++) {
System.out.println("一边听歌");
}
}
}

  

当抽象方法有参数时,对应写成的(参数)->{代码}

而且不必写参数类型

29 匿名内部类、函数型接口、lamda表达式的引入的更多相关文章

  1. 第六章 接口,lamda表达式与内部类

    接口 接口可以包含常量, 且不需要publish static final修饰, 接口的域会自动添加该修饰符. Java建议不要写多余的代码,因此省略修饰符更简洁. 全部都是常量的接口背离了接口的初衷 ...

  2. 匿名函数和lamda表达式

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. c# 匿名函数和lamda表达式语法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. Lamda表达式学习笔记一

    Lamda表达式学习笔记一 一.Lamda语法诠释 三傻大闹宝莱坞的主人公兰彻说的一句话让我映像深刻:用简单的语言来表达同样的意 我并不是说书上的定义怎么怎么不对,而是应该理解书本上的定义,并用简单的 ...

  5. jdk8系列一、jdk8 Lamda表达式语法、接口的默认方法和静态方法、supplier用法

    一.简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性. 在本文中我们将学习这些新特性,并用实际 ...

  6. Lambda01 编程范式、lambda表达式与匿名内部类、函数式接口、lambda表达式的写法

    1 编程范式 主要的编程范式有三种:命令式编程,声明式编程和函数式编程. 1.1 命令式编程 关注计算机执行的步骤,就是告诉计算机先做什么后做什么 1.2 声明式编程 表达程序的执行逻辑,就是告诉计算 ...

  7. 委托、泛型委托、多播委托、匿名函数、lamda表达式、事件

    1.为什么要使用委托 将一个方法作为参数传递给另一个方法 2.委托概念 public delegate int 委托名(int a, int b); 声明一个委托类型,可以用访问修饰符修饰,deleg ...

  8. 匿名内部类与lamda表达式

    1.为什么要使用lamda表达式 从JDK1.8开始为了简化使用者进行代码开发,专门提供有Lambda表达式的支持,利用此操作形式可以实现函数式的编程,对于函数式编程比较著名的语言:haskell,S ...

  9. python 内置函数 lamda表达式。 open 文件方法

    lamda 表达式 lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: 普通的条件语句 if 1 == 1: name = 'kaixin' else: ...

随机推荐

  1. Jmeter+ant+jekins环境配置

    Jmeter+ant+jekins 一.ant安装 1. ant安装 官网下载http://ant.apache.org 解压到想要的盘里面 2. 配置环境变量 (1)变量名:ANT_HOME 变量值 ...

  2. 【loj3120】【CTS2019】珍珠

    题目 ​ $laofu $出的题 ​ \(n\)个离散型随机变量\(X_i\)可能的值为\([1,D]\) ,求有至少\(m\)对的概率 ​ $0 \le m \le 10^9  ,  1 \le n ...

  3. C博客作业01--分支顺序结构

    1.展示PTA总分 2.本章学习总结 ①C语言数据类型 ② if-else语句 if (条件) { 语句A; } else { 语句B; } 在if (条件)后不加":" 要用&q ...

  4. java内存dump文件导出与查看

    生成dump文件的命令:jmap -dump:format=b,file=20170307.dump 16048file后面的是自定义的文件名,最后的数字是进程的pid 使用jvisualvm来分析d ...

  5. D3.js的v5版本入门教程(第十章)

    在这一章我们干点有趣的事——让我们上一章绘制的图表动起来,这样岂不是很有意思 为了让图表动起来,我们还是需要以下新的知识点 .attr(xxx) .transition() .attr(xxx),tr ...

  6. 设置应用程序的样式并对其进行部署——《Python编程从入门到实践》

    我们将使用应用程序django-bootstrap3为Web应用程序设计样式.我们将把项目"学习笔记"部署到Heroku,这个网站能让我们们将项目推送到其服务器,让任何有网络连接的 ...

  7. SpringMVC(上)

    一.SpringMVC简介 (1)springMVC概述 Spring MVC属于SpringFrameWork的后续产品,Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块. 使用 ...

  8. .net core facebook 容易进的一个坑

    Microsoft.AspNetCore.Authentication.Facebook 库 services.AddAuthentication(CookieAuthenticationDefaul ...

  9. Real-time Multiple People Tracking with Deeply Learned Candidate Selection and Person Re-identification

    Real-time Multiple People Tracking with Deeply Learned Candidate Selection and Person Re-identificat ...

  10. Nginx正向代理设置

    Nginx不仅可以做反向代理,实现负载均衡.还能用作正向代理来进行上网等功能. 正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代 ...