Day7 wait() 和notify()必须要在"同步代码块"或者"同步方法"中使用,因为必须要通过这两个方法。 做包子流程:饭店 没有包子:做包子,输出有包子了,true,notity 有包子,wait;顾客 没有包子:wait 有包子:吃包子,输出吃,false,notify; Lambda使用前提 Lambda只能用于接口, 且"接口中有且仅有一个抽象方法"(也称为"函数式接口") 普通类, 抽象类不能用 2.使用Lambda必须具有上下文推断 方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例 (简而言之: 作为参数类型的接口, 必须是函数式接口)
Lambda表达式省略规则: 1.小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。 线程池: 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
|