A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王x 中级黑马   /  2018-11-26 17:03  /  554 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Day7
wait() 和notify()必须要在"同步代码块"或者"同步方法"中使用,因为必须要通过这两个方法。
做包子流程:饭店  没有包子:做包子,输出有包子了,true,notity   有包子,wait;顾客 没有包子:wait 有包子:吃包子,输出吃,false,notify;
Lambda使用前提
  • Lambda只能用于接口, 且"接口中有且仅有一个抽象方法"(也称为"函数式接口")
    ​    普通类, 抽象类不能用
    2.使用Lambda必须具有上下文推断
    方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例
    (简而言之: 作为参数类型的接口, 必须是函数式接口)

Lambda表达式省略规则:
   1.小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
  • ->是新引入的语法格式,代表指向动作。

  • 大括号内的语法与传统方法体要求基本一致。如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。

线程池:
ExecutorService es=Executors.newFixedThreadPool(线程数量)
今日API
今日API
java.lang.Object类:
​        // 成员方法
​        void wait(): 使用锁对象调用, 当前线程进入WAITING无限等待状态, 直到被其他线程唤醒
​        void notify(): 使用锁对象调用, 随机唤醒一个处于等待状态的线程
​        void notifyAll(): 使用锁对象调用, 唤醒所有处于等待状态的线程
java.util.concurrent.Executors类: 线程池工厂类, 用于管理线程池
​        // 静态方法:
​        static ExecutorService newFixedThreadPool(int nThreads): 创建固定数量线程的线程池(常用)
​        
java.util.concurrent.ExecutorService接口: 真正执行任务的线程池服务
​        // 成员方法:
​        Future submit(Runnable task): 提交一个Runnable任务
​        void shutdown(): 通知线程执行完任务后关闭. 如不调此方法, 则线程执行完任务后仍在运行以便重复使用
day8
File类
绝对路径:全路径
相对路径:不以盘符开始的简化路径,相对于项目的根路径。
File File(String pathname): 根据 路径字符串 封装一个File对象(创建一个一个文件)
getAbsolutePath(): 返回此File的绝对路径名字符串getPath(): 获取File对象的封装路径 (创建对象时传入的路径)getName(): 获取File对象的文件名或目录名length(): 获取File表示的文件大小的字节数 (不能获取目录的大小)
boolean exists(): 判断File对象代表的文件或目录是否实际存在boolean isDirectory(): 判断File表示的是否为目录boolean isFile(): 判断File表示的是否为文件
boolean createNewFile(): 当文件不存在时, 创建一个新的空文件boolean delete(): 删除由此File表示的文件或目录. (删除目录时必须是空目录) boolean mkdir(): 创建File表示的目录boolean mkdirs(): 创建File表示的多级目录
获得指定文件下所有的 文件:
new file.listFiles().for.sout;
递归的概念
把大问题拆成能解决的一个小部分和不能解决的大的部分,然后把不能解决的部分继续分成能解决的部分和能解决的部分。。找到规律的或者起源。
描述:猴子吃桃子问题,猴子第一天摘下若干个桃子,当即吃了快一半,还不过瘾,又多吃了一个。第二天又将仅剩下的桃子吃掉了一半,又多吃了一个。以后每天都吃了前一天剩下的一半多一个。到第十天,只剩下一个桃子。试求第一天共摘了多少桃子?
d9=(d10+1)x2=4; ----d9=d(9+1)x2
d8=(d9+1)x2=10;----d8=(d8+1)x2
d7=(d8+1)x2=22;---d7=d(7+1)x2
--------dn=d(n-1)x2-1;
文件过滤器:
遍历数组然后获取pathname.getName().endWith()\startWith()  后缀\前缀
今日API
java.io.File类: 文件和目录的路径名的抽象表现形式, 主要用于文件和目录的创建, 查找和删除等操作// 静态成员变量static String pathSeparator: 路径分隔符的字符串形式static char pathSeparatorChar: 路径分隔符的char形式今日目标能够说出File对象的创建方式能够说出File类获取名称的方法名称Windows系统是 分号;Linux系统是 冒号:static String separator: 文件名称分隔符的字符串形式static char separatorChar: 文件名称分隔符的char形式Window系统是 反斜杠\Linux系统是 正斜杠/// 构造方法(创建了File对象, 并将其指向该路径. 不会真正在磁盘上创建这个文件)File File(String pathname): 根据 路径字符串 封装一个File对象File File(String parent, String child): 根据 父路径字符串 和 子路径字符串 封装File对象File File(File parent, String child): 根据 父路径的File对象 和 子路径 封装File对象// 常用获取方法String getAbsolutePath(): 返回此File的绝对路径名字符串String getPath(): 获取File对象的封装路径 (创建对象时传入的路径)String getName(): 获取File对象的文件名或目录名long length(): 获取File表示的文件大小的字节数 (不能获取目录的大小)// 常用判断方法boolean exists(): 判断File对象代表的文件或目录是否实际存在boolean isDirectory(): 判断File表示的是否为目录boolean isFile(): 判断File表示的是否为文件// 常用创建删除方法boolean createNewFile(): 当文件不存在时, 创建一个新的空文件boolean delete(): 删除由此File表示的文件或目录. (删除目录时必须是空目录)boolean mkdir(): 创建File表示的目录boolean mkdirs(): 创建File表示的多级目录// 常用获取目录中内容的方法String[] list(): 获取当前File目录下的所有子文件或目录的名字数组File[] listFiles(): 获取当前File目录中的所有子文件或目录的File对象数组File[] listFiles(FileFilter filter): 通过File对象过滤, 返回文件过滤器过滤后的File对象数组File[] listFiles(FilenameFilter filter): 通过File对象的文件名过滤, 返回文件过滤器过滤后的File对象数组java.io.FileFilter接口: 用于File对象的过滤器boolean accept(File pathName): true则会将参数的File对象加入返回的File[], false则不加入java.io.FilenameFilter接口:boolean accept(File dir, String name): true则会将参数的File对象加入返回的File[], false则不加入
day9
带有 续写 功能的构造方法, 不会清空文件        FileOutputStream(String name, boolean append): 通过文件路径创建流, true可以续写
GBK编码中, 一个汉字占用2个byteUTF-8编码中, 一个汉字占用3个byte
字符流只能读写"文本文件"
java.util.Properties类: 属性集, 属于Map的双列集合, 继承自Hashtable
​        // 构造方法
​        Properties(): 创建一个Properties集合
​        // 可以使用Map接口中的方法
​        // 特有成员方法
​        Object setProperty(String key, String value): 保存/替换键值对
​        String getProperty(String key): 通过键获取值. 键不存在返回null
​        Set<String> stringPropertyNames(): 返回键的集合
​        void store(OutputStream out, String comments): 将集合数据用字节流写入文件(不能中文), 并写入注释
​        void store(Writer writer, String comments): 将集合数据用字符流写入文件(可以中文), 并写入注释
​        void load(InputStream inStream): 从配置文件中通过字节流加载数据到Properties集合(不能读中文)
​        void load(Reader reader): 从配置文件中通过字符流加载数据到Properties集合(可以读中文)
IO流截止今日的IO流体系结构字节流        |_ InputStream                            字节输入流顶层                |_ FileInputStream              文件字节输入流        |_ OutputStream                        字节输出流顶层                |_ FileOutputStream          文件字节输出流字符流        |_ Reader                                     字符输入流顶层                |_ FileReader                      文件字符输入流        |_ Writer                                      字符输出流顶层                |_ FileWriter                       文件字符输出流
day10
Reader==Input     Writer=Output
getbytes:获取多个字节
Reader:   readline读取一行代码,while循环里返回值null
乱码原理: 字符流和转换流的关系java.io.Reader        |_ InputStreamReader: 转换字符输入流 读 char char[]  byte -> char  97 -> 'a'                |_ FileReader  byte -UTF-8-> charjava.io.Writer  char char[] String        |_ OutputStreamWriter: 转换字符输出流 char char[] String -> byte                |_ FileWriter char -UTF-8-> byte
OutputStreamWriter类介绍及使用
java.io.OutputStreamWriter类: 输出转换流. 字符流通往字节流的桥梁
​        // 构造方法
​        OutputStreamWriter(OutputStream out): 使用默认编码表创建转换流
​        OutputStreamWriter(OutputStream out, String charsetName): 使用指定编码表创建转换流
​                write('a') -> "GBK" -> 97 OutputStream out -> 文件
​        
​    // 使用默认UTF-8
​    OutputStreamWriter o = new OutputStreamWriter(new FileOutputStream("a.txt"));
​    // 使用指定的GBK
​    OutputStreamWriter o = new OutputStreamWriter(new FileOutputStream("a.txt"), "GBK");
​                                o.write("你") -> GBK -> 7676 -> 文件
​                                写数据: 字符流 -------> 字节流
InputStreamReader类介绍及使用
java.io.InputStreamReader类: 输入转换流. 字节流通往字符流的桥梁
​        // 构造方法
​        InputStreamReader(InputStream in): 使用默认编码表创建转换流
​        InputStreamReader(InputStream in, String charsetName): 使用指定编码表创建转换流
​        
​        // 使用默认UTF-8
​    InputStreamReader r = new InputStreamReader(new FileInputStream("a.txt"));
​    // 使用指定的GBK
​    InputStreamReader r = new InputStreamReader(new FileInputStream("a.txt"), "GBK");
​                 bbb int ch = r.read()   <------GBK-----------   字节byte 989898
​                        r.read(chs)
​                             读数据: 字符流  <------  字节流
对象序列化流: ObjectOutputStream
java.io.ObjectOutputStream类: 对象字节输出流        // 构造方法        ObjectOutputStream(OutputStream out)        // 特有成员方法        void writeObject(Object obj): 将对象写出
对象反序列化流: ObjectInputStreamjava.io.ObjectInputStream类: 对象字节输入流        // 构造方法        ObjectInputStream(InputStream in)        // 特有成员方法        Object readObject(): 读取对象
InvalidClassException异常: 原因和解决方案serialVersionUID序列号的作用:        序列化操作时, 会根据类生成一个默认的 serialVersionUID 属性, 写入到文件中.         该版本号是根据类中成员计算出来的一个数值. 当类的成员发生改变时, 序列版本号也会发生变化        当代码中的类和读取的对象序列版本号不一致时, 就会抛出InvalidClassException


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马