zoukankan      html  css  js  c++  java
  • day26_Lambda&File

    • 函数式编程思想
    • Lambda表达式
    • File类
    • 递归

    函数式编程思想

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

    一段冗余的Runnable代码

    public static void main(String[] args) {
    		//简化版(匿名内部类写法)
    		new Thread(new Runnable() {
    			
    			@Override
    			public void run() {
    				System.out.println(Thread.currentThread().getName()+"新线程被创建......");
    			}
    		}).start();
    	}
    

    代码分析:

    ​ 对于Runnable的匿名内部类用法:

    • ​ Thread类需要Runnable接口作为参数,其中的抽象方法run用来指定线程任务内容的核心
    • ​ 为了指定run方法的方法体,不得不需要Runnable接口的实现类
    • ​ 为了省去定义一个RunnableImpl实现类的麻烦,不得不使用匿名内部类
    • ​ 必须重写抽线方法run,所以方法的名称、方法的参数、方法的返回值不得不再写一遍,且不能写错
    • ​ 从这里看出,只有方法体内容的重写才是线程任务的关键内容

    编程思想的转换

    ​ 强调做什么而不是怎么做

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

    ​ 任务就是传递一段代码----我们需要将程序开发关注的重点从怎么做回归到做什么的本质上,过程与形式并不重要

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

    		//使用lambda表达式实现
    		new Thread(()->{
    			System.out.println(Thread.currentThread().getName()+"新线程被创建......");
    		}).start();
    

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

    ()->{System.out.println(Thread.currentThread().getName()+"新线程被创建......");}
    
    格式说明:
     * 			():接口中抽象方法的参数列表,参数列表可以没有参数,空着,有参数就写出来,多个参数使		  *			 用','隔开
     * 			->:传递的意思,把方法中的参数传递给方法体{}
     * 			{}:重写接口方法的方法体
    

    Lambda表达式的标准格式:

    (参数列表) -> {代码语句}
    

    Lambda省略格式

    ​ 可推导即可省略

    invokeSum(3.14,3.15,(double d1,double d2)->{
        return d1 + d2;
    	});	
    //省略式表达
    invokeSum(3.14,3.15(d1,d2)-> d1 + d2);
    

    省略规则:

    1. ​ 小括号内的参数类型可以省略
    2. ​ 如果小括号内有且仅有一个参数,则小括号也可以省略
    3. ​ 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字和语句的分号,这些东西要一起省略

    Lambda的使用前提

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

    1. ​ 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法,无论JDK内置的Runnable、Comparator接口还是自定义的接口,只有当接口中的抽象方法存在且唯一(可以有其他的静态方法、默认方法),才可以使用Lambda
    2. ​ 使用Lambda必须具有上下文推断。也就是方法的参数或者局部变量类型必须为lambda对应的接口类型,才能使用Lambda作为该接口的实例

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

    File类

    • 说出File类获取文件名称的方法
    • 了解File对象的创建方式、获取绝对路径的方法名称
    • 区分文件操作中的相对路径与绝对路径
    • File类获取文件大小的方法
    • 判断一个文件是否为文件
    • 遍历文件夹(目录)
    • 判断文件是文件夹还是文件
    • 解释递归的含义
    • 使用递归的方式做相关数学运算
    • 解释使用递归引发内存溢出隐患的原因

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

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

    可以使用的File类方法:

    • ​ 创建一个文件 / 文件夹
    • ​ 删除一个文件 / 文件夹
    • ​ 获取一个文件 / 文件夹
    • ​ 判断一个文件 / 文件夹是否存在
    • ​ 对文件夹进行遍历
    • ​ 获取文件的大小

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

    构造方法

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

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

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

      // 假设当前目录是C:Docs
      File f1 = new File("sub\javac"); // 绝对路径是C:Docssubjavac
      File f3 = new File(".\sub\javac"); // 绝对路径是C:Docssubjavac
      File f3 = new File("..\sub\javac"); // 绝对路径是C:subjavac
      可以用'.'表示当前目录,'..'表示上级目录。
      构造File对象时,既可以传入绝对路径,也可以传入相对路径。绝对路径是以根目录开头的完整路径
      传入相对路径时,相对路径前面加上当前目录就是绝对路径
      

    常用的API方法:

    • ​ 获取功能方法
    • ​ 判断功能的方法
    • ​ 获取路径功能的方法
    • ​ 创建删除更能的方法
    • ​ 目录遍历功能的方法
    获取功能的方法:
    1. ​ public String getAbsolutePath():返回此抽象路径名的绝对路径名字符串
    2. ​ public String getPath():将此File转换为路径名字符串
    3. ​ public String getName():返回由此File表示的文件或目录的名称
    4. ​ public long length():返回此File表示的文件的长度
    判断功能的方法:
    1. ​ public boolean exist():判断File表示的文件或者文件夹是否实际存在
    2. ​ public boolean isDirectory():判断此File表示的文件夹是否存在
    3. ​ public boolean isFile():判断此File表示的文件是否存在
    创建和删除文件的方法
    1. ​ public boolean createNewFlie():当且仅当具有该文件名称的文件不存在时,创建一个新的空文件
    2. ​ public boolean delete():删除由此File表示的文件或者目录
    3. ​ public boolean mkdir():创建由此File表示的文件夹
    4. ​ public boolean mkdirs():创建由此File表示的文件夹,包括任何必须但是又不存在的父目录
    目录的遍历

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

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

    Java标准库还提供了一个Path对象,它位于java.nio.file包。Path对象和File对象类似,但操作更加简单

  • 相关阅读:
    Eureka与Zookeeper的区别
    Eureka的集群配置
    Rest微服务案例
    Eureka概述
    SpringCloud与Dubbo区别对比
    各种微服务框架对比
    ElasticSearch(九):elasticsearch-head插件安装
    ElasticSearch(八):elasticsearch.yml配置说明
    Docker(2):使用Dockerfile创建支持SSH服务的镜像
    CentOS 7 安装Kubernetes(单机版)
  • 原文地址:https://www.cnblogs.com/mitoris/p/14131567.html
Copyright © 2011-2022 走看看