函数式编程思想

强调的是做什么,而不是以什么样的方式来做,它忽略了面向对象的复杂语法,只要能够获取到结果,谁去做的,怎么做的,都不重要,重要的是结果,不重视过程。

冗余的Runnable代码

传统的写法:

1 public classDemo01Runnable{2 public static voidmain(String[] args){3 //匿名内部类的方式

4 new Thread(newRunnable(){5 @Overrride6 public voidrun(){7 System.out.println("开启了一个新的线程");8 }9 } ).start();//启动新线程

10 }11 }

代码分析:

对于Runnable的匿名内部类用法,可以分析出以下内容:

Thread类需要Runnable接口作为参数,其中抽象方法run用来指定线程任务内容的核心。

为了制定run方法的方法体,不得不需要Runnable接口的实现类

为了省去定义一个RunnableImpl实现类的麻烦,不得不使用匿名内部类。

必须重写抽象方法run方法,所以方法的名称、方法的参数、方法的返回值不得不再写一遍,且不能写错。

从这里可以看出,只有方法体才是线程任务的关键性内容

编程思想的转换

强调做什么而不是怎么做

我们真正希望做的事情是:将run方法体内的代码传递给Thread类知晓,能够加载到即可。

传递一段代码———这是我们真正的目的。

我们需要将程序关注的重点从怎么做回归到做什么的本质上,过程与形式并不重要。

2014年3月Oracle官方所发布的Java8(JDK1.8)中,加入了Lambda表达式

体验Lambda表达式的更优写法

Java 8的新特性,优化刚才的代码

public classDemo01Runnable{public static voidmain(String[] args){//使用Lambda表达式的方式

new Thread(()->{

System.out.println("开启了一个新的线程");

}

).start();//启动新线程

}

}

从上面的代码可以看出:没有创建接口实现类对象的操作,不再有抽象方法覆盖重写的操作,只写了线程任务的内容。

从上面的代码能够推导出Lambda的语法:

() -> {System.out.println("开启了一个新的线程");}

前面的一对小括号即run方法,参数为无,里面是空的,此时不需要任何的条件

中间的一个箭头代表将前面的参数传递给后面的代码

后面的输出语句即业务逻辑代码(线程任务内容)

Lambda的标准格式:

格式由三个部分组成:

一些参数

一个箭头

一段代码

Lambda表达式的标准格式:

(参数类型1 参数名称1,参数类型2 参数名称2,...) -> {代码语句}

格式说明:

小括号内的语法与传统方法参数列表一致,无参数则留空,多个参数则用逗号隔开

->是新引入的语法格式,代表指向的动作

大括号内的语法与传统方法体要求基本一致。

Lambda省略格式

可推导即可省略

Lambda强调的是"做什么",而不是"怎么做",所以凡是可以根据上下文推倒得知的信息,都可以省略。比如:

1 invokeSum(3.14, 3.15, (double d1,double d2)->{2 return d1 +d2;3 });4

5 //省略格式表达

6 invokeSum(3.14,3.15,(d1,d2)->d1 + d2);

省略的规则:

在Lambda标准格式的表达式的基础上,使用省略写法的规则是:

小括号内参数的类型可以省略。

如果小括号内有且仅有一个参数,则小括号也可以省略

如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字和语句的分号。

Lambda的使用前提

Lambda的语法非常的简洁,使用非常的简单,但是有以下注意事项:

1.使用Lambda表达式必须具有接口,且要求接口中有且仅有一个抽象方法,无论JDK内置的Runnable、Comparator接口还是自定义的接口,只有当接口中的抽象方法存在且唯一,才可以使用Lambda

2.使用Lambda必须具有上下文推断。也就是方法的参数或者是局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。

备注:如果有且仅有一个抽象方法的接口,称为函数式接口。

File类

概述

java.io.File类是文件和目录路径名的抽象表示。主要用于文件和目录的创建、查找、删除等操作。

Java把电脑中的文件和文件夹(目录)封装为了一个File类,我们可以使用File类对文件和文件夹进行操作。

可以使用File类的方法:

创建一个文件、文件夹

删除一个文件、文件夹

获取一个文件、文件夹

判断文件、文件夹是否存在

对文件夹进行遍历

获取文件的大小

File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法。

路径 :

绝对路径:是一个完整的路径,一般以盘符(D:,C:,c:)为开头如:

D:\Developer\Java\jdk1.8.0_191

相对路径:是一个简化的路径,相对指的是相对于当前项目的根目录如:(E:\code\workspace\day26_Lambda)

如果使用当前项目的根目录,路径可以简化书写,E:\code\workspace\day26_Lambda\.classpath ----> 简化为:.classpath(可以省略前面项目的根目录)

注意:

1.路径是不区分大小写;

2.路径中的文件名称分隔符windows使用反斜杠(\),反斜杠是转义字符,两个反斜杠才代表一个普通的反斜杠;

构造方法

public File(String pathname):通过将给定路径名字符串转换为抽象路径名来创建一个新File实例

public File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File实例。

public File(File parent ,String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File实例。

常用API方法

获取功能的方法

判断功能的方法

路径功能的方法

创建删除的方法

目录遍历功能的方法

获取功能的方法

public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。

public String getPath(): 将此File转换为路径名字符串

public String getName() 返回由此抽象路径名表示的文件或目录的名称。

public long length():返回此File表示的文件的长度。

判断功能的方法

public boolean exists():判断File表示的文件或者文件夹是否实际存在

public boolean isDirectory() 判断此File表示的文件夹是否存在。

public boolean isFile():判断此File表示的文件是否存在

创建和删除文件的方法

public boolean cteateNewFile():当且仅当具有该名称的文件不存在时,创建一个新的空的文件,返回值是true

public boolean delete():删除由此File表示的文件或者目录

public boolean mkdir():创建由此File表示的文件夹

public boolean mkdirs():创建由此File表示的文件夹,包括任何必须但是又不存在的父目录

目录的遍历

public String[] list() : 返回一个String数组,表示该File目录中的所有的子目录或者子文件

public File[] listFile():返回一个File数组,表示该File目录中的所有的子目录或者子文件。

java 文件路径表达式_Java基础(二十二) Lambda表达式和File类相关推荐

  1. java冰法_Java基础学习笔记二 Java基础语法

    注释 注释用来解释和说明程序的文字,注释是不会被执行的. 单行注释 //这是一条单行注释 public int i; 多行注释 /*这是 * 一段注释, * 它跨越了多个行*/ public void ...

  2. 先有java后有天_Java基础第十四天总结——面向对象(下)

    一.关键字:static 二.理解main方法的语法 三.类的成员之四:代码块 四.关键字:final /*-------------------分割线------------------*/ 一.关 ...

  3. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

  4. Java基础二十二:函数式接口介绍,函数式接口作为方法参数、返回值,Supplier接口、Consumer接口、Predicate接口、Function接口基本介绍及其案例小练习

    函数式接口 1. 函数式接口概念及基本使用 1.函数式接口:有且仅有一个抽象方法的接口,函数式接口就是Lambda表达式使用的前提 2. Java中的函数式编程体现的就是Lambda表达式,所以函数式 ...

  5. LINUX学习基础篇(二十二)硬盘结构

    LINUX学习基础篇(二十二)文件系统管理 硬盘 磁盘结构 硬盘接口 硬盘 磁盘结构 扇区是磁盘的最小存储单位,每个扇区的大小是固定的,为512Byte.硬盘里有多个磁盘,每个磁盘中,有多个同心圆,这 ...

  6. python基础(十二):字符字节编码解码

    基础(十二) 字符串概述 类型 编码架构 字符串存储 常用字符编码 ASCII latin-1 UTF-8(通用性更好) UTF-16 UTF-32 内置函数 ord() chr() str.enco ...

  7. java高级规范_Java高级规范之二

    二十一.提交java代码前应该检查是否有没用的语句,如:System.out.println(); jsp页面上面是否有alert调试信息 不规范示例:暂无 规范实例:暂无 解析:因为如果保留了有可能 ...

  8. 计算机基础函数运用,计算机应用基础第十二讲:EXCEL中函数的实际运用.doc

    文档介绍: 计算机应用基础第十二讲:EXCEL中函数的实际运用.doc计算机应用基础第十二讲:EXCEL中函数的实际运用课 题EXCEL屮函数的实际运用课型多媒体课授课时间第20周教学目的实例分析,掌 ...

  9. 零基础带你学习MySQL—单行子查询和多行子查询(二十二)

    零基础带你学习MySQL-多行子查询(二十二) 一.什么是子查询? 子查询是指嵌入在其它 sql 语句中的 select 语句,也叫嵌套查询 二.什么是单行子查询? 单行子查询是指只返回一行数据的子查 ...

最新文章

  1. 文件创建与文件格式的修改
  2. MATLAB实现实时录音,语音采集与读写用matlab实现录音以及语谱图的绘制.pdf
  3. git 操作简明扼要,命令不需要多,够用就行
  4. ddr4 dqs 频率_一张图看懂如何选择DDR4内存的频率和容量
  5. Linux系统编程36:多线程之线程控制之pthread线程库(线程创建,终止,等待和分离)
  6. ajax同步和异步提交的区别
  7. HTML5 Geolocation(地理定位)
  8. Angular提示文件不是一个有效的模块
  9. 计算机各种编码来历及区别
  10. 关于在ItemAdding时获取“用户和用户组”这个栏的值
  11. 初次使用CocoaPods遇到的问题总结
  12. linux下系统中的文件传输
  13. 0基础怎么画出好看的水彩画美术集水彩教程入门级教程
  14. pycharm更改运行环境
  15. 见缝插针小程序php,抖音小程序怎么开通
  16. 产品经理的六大工作职责
  17. 做了两年P7面试官,谈谈我认为的阿里人才画像,你配吗?
  18. HDU - 1846 巴士博弈
  19. 手机系统版本android 8,手机如何升级到安卓8.0系统?对手机有要求吗?
  20. 开发落网电台windows phone 8应用的计划(7)

热门文章

  1. vivado SOC——hello word(上)建立SOC系统
  2. UDP千兆以太网FPGA_verilog实现(四、代码前期准备-UDP和IP协议构建)
  3. Android + kernel USB host 如何判断插入的设备是高速还是低速的设备
  4. 拷贝的Android源码不能单独编译mmm命令提示找不到
  5. 【DIY】可能是最简单便宜的DIY温湿度计,arduino温湿度计
  6. PSO求解梯级水库优化调度
  7. 3、HTML网页基本概念
  8. C1之路 | 训练任务01-进制与信息编码
  9. SVM学习笔记1-问题定义
  10. idea控制台输出乱码