黑马程序员技术交流社区

标题: day7,8,9,10的笔记 [打印本页]

作者: lc1992    时间: 2018-11-26 15:43
标题: day7,8,9,10的笔记
day7,8,9,10的笔记
day07
函数式编程相对于面向对象的优点
面向对象:注重对象的调用方法(语法格式)
函数式:注重输入什么(参数),得到什么结果(运行代码)
Lamabda表达式格式
(参数列表)->{一段代码}
Lanabda的使用前提
1.lambda只适用于“函数式接口”(有且有一个抽象方法)
2.必须具有上下文的推
函数式接口:

函数式接口: "有且仅有一个抽象方法的接口"

但函数式接口对于 哪些方法算作抽象方法 有特殊规定:

1. 有方法体的方法"不算作"抽象方法, 如默认方法, 静态方法, 私有方法

2. 如果一个抽象方法 与 java.lang.Object类中的方法 定义相同的, 也"不算作"抽象方法

因为任何实现本接口的实现类, 都会直接或间接继承java.lang.Object类的public的方法, 所以

在创建实现类时其实不用重写该抽象方法, 也就不算作抽象方法


       "可推导的都可省略" (凡是能根据前后代码能猜测出来的代码, 都可以省略不写)
   
1.
一些参数 ()

              
  接口中抽象方法的参数列表. 没参数就空着; 有参数就写, 多个参数用逗号分隔

   
2. 一个箭头 ->

           
     将参数传递给方法体

   
3. 一段代码 {}

              
  重写接口抽象方法的方法体

    可以省略的部分:
        1. (参数列表): 参数"类型"可以省略 (a, b) -> {}
        2. (参数列表): 如果参数只有1个, 则"类型"和"小括号"都可以省略  a -> sout(a)
        3. {一些代码}: 如果只有一条代码, 则"大括号", "return", "分号"都可以"一起省略"
        
函数式接口: "有且仅有一个抽象方法的接口"
Lambda表达式的使用前提:
    1. Lambda只能用于接口, 且"接口中有且仅有一个抽象方法"(也称为"函数式接口")

                                                                          day08
File类

我们可以对File进行的操作:

创建文件/目录

删除文件/目录

获取文件/目录

判断文件/目录是否存在

对目录进行遍历

获取文件的大小

File(String) 根据 路径字符串 封装一个File对象

String?getAbsolutePath(): 返回此File的绝对路径名字符串

String?getPath(): 获取File对象的封装路径 (创建对象时传入的路径)

String?getName(): 获取File对象的文件名或目录名 ?d:\a\b\c\aaa.txt

long?length(): 获取File表示的"文件"大小的字节byte数 (不能获取目录的大小)

exists(): 判断File对象代表的文件或目录是否实际存在

isDirectory(): 判断File表示的是否为目录

isFile(): 判断File表示的是否为文件

createNewFile(): 当文件不存在时, 创建一个新的空文件

delete(): 删除

mkdir(): 创建File表示的目录

list(): 获取当前File目录下的所有子文件或目录的名字数组

listFiles(): 获取当前File目录中的所有子文件或目录的File对象数组

递归的概念, 分类, 注意事项

递归时的注意事项:

1. 递归要有限定条件(出口), 保证递归能够停止(就是在某种情况下方法不再调用自己), 否则会栈内存溢出

2. 递归次数不能太多, 否则会栈内存溢出

3. 构造方法不能递归

FileFilter文件过滤器的原理和使用

for (File file : demo.listFiles()) {

            if (file.isDirectory()){

                show(file);

            }else {

                System.out.println(file);

            }

day09

字节流 字节输入流 InputStream        字节输出流 OutputStream
字符流 字符输入流 Reader             字符输出流 Writer

close() :释放资源

flush() :刷新缓冲区(对于字节流来说没有作用)

write()写一个字节

read(): 一次读一个字节

JDK7和JDK9中IO异常处理的不同方式

IO流的分类和功能
按操作的数据分
字节流:操作 byte byte[        ]
字符流:操作char char[ ] String
按方向分
输入流;度
输出流:写
使用字节输出流写出数据到文件
字节输出流OutputStream FileOutputStream
1.创建流对象
2.调用write()写数据:一个字节,一个字节数组
3.释放资源close()
使用字节输入流读取数据程序
字节输入流:InputStrram FileInputStream
1.创建流对象
2.调用        read():一次读一个字节        read(byte[ ]bytes)一次读一个字节数组
3.释放资源
读取数组read(byte[ ])方法的原理
byte[] bytes = new byte[2];  文件中有ABCDE
int len;
len = fis.read(bytes); // [A, B]  2
len = fis.read(bytes); // [C, D]  2
len = fis.read(bytes); // [E, D]  1
使用字节流完成文件的复制
1.创建输入输出流对象
2.循环读写
3.释放资源
使用FileWrite写数据的5个方法
write(int ch): 一次写一个字符
write(char[] chs): 一次写一个字符数组
write(char[] chs, int offset, int len): 一次写一个字符数组的一部分
write(String s): 一次写一个字符串
write(String s, int offset, int len): 一次写一个字符串的一部分
day10

字节缓冲流读取数据到程序
BufferedInputStream

new BufferedInputStream(new FileInputStream("..."))

bis.read()

bis.close()

缓冲流: BufferedInputStream / BufferedOutputStream, BufferedReader / BufferedWriter
在基本流上增加缓冲区 char[] byte[], 提高读写效率

转换流: InputStreamReader / OutputStreamWriter

字节转字符: FileReader 读 char <- byte 硬盘

字符转字节: FileWriter 写 char -> byte 硬盘

序列化流: ObjectInputStream / ObjectOutputStream

序列化: 内存中的对象 写-> 硬盘上的文件中

反序列化: 内存中的对象 <-读 硬盘上的文件中

打印流: PrintStream

可以自动换行, 原样输出 ?System.out.println();

只有输出流, 没有输入流


字节缓冲流写出数据到文件
BufferedOutputStream

new BufferedOutputStream(new FileOutputStream("..."))

bos.write()

bos.close()

字符缓冲流的特殊功能
readLine(): 没有换行符, 读到末尾返回null

newLine(): 根据系统自动确定换行符

转换流读取/写入指定编码的文本文件
InputStreamReader                读取

OutputStreamWriter        写入

打印流的特点
1.只有输出

2.不抛出io异常

3.接受任意类型参数,原样输出

序列化流写出对象到文件
ObjectOutputStream

类需要实现Serializable接口, 生成serialVersionUID

反序列化读取文件到程序中
ObjectInputStream

Object readObject()








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2