欠下的
字符流没认真学,案例也都没看,异常处理 P312~P323重要!!TCP练习没有练,四种引用讲的不行,自己以后看博客吧,反射学的也粗糙
1.IO流
1.1File
1.1.1File类概述和构造方法
![](https://img.haomeiwen.com/i9168312/c3a3998854f64730.png)
1.1.2File类创建功能
![](https://img.haomeiwen.com/i9168312/f954a553ba215365.png)
1.1.3File类判断和获取删除功能
![](https://img.haomeiwen.com/i9168312/34a8add6eaadb9da.png)
![](https://img.haomeiwen.com/i9168312/a09877d36a4b3c5f.png)
1.1.4遍历目录
public class FileDemo02 {
public static void main(String[] args) {
File srcFile = new File("D:\\project\\IdeaProjects");
getAllFilePath(srcFile);
}
public static void getAllFilePath(File srcFile){
File[] fileArray = srcFile.listFiles();
if(fileArray != null){
for(File file: fileArray){
if(file.isDirectory()){
getAllFilePath(file);
}
else{
System.out.println(file.getAbsolutePath());
}
}
}
}
}
1.2字节流
1.2.1IO流概述和分类
![](https://img.haomeiwen.com/i9168312/f49d3d6c43a24c13.png)
1.2.2字节流写数据
String类下方法:
bytes[] getBytes (String s);
![](https://img.haomeiwen.com/i9168312/d3a48ebd264bc6e3.png)
![](https://img.haomeiwen.com/i9168312/dd1aae9b91066948.png)
![](https://img.haomeiwen.com/i9168312/dd48f3a6f74e7c62.png)
1.2.3字节流写数据异常处理
![](https://img.haomeiwen.com/i9168312/bee1ca2b1a56aec6.png)
1.2.4字节流读数据
一次读一个字节
![](https://img.haomeiwen.com/i9168312/37598da5d683b481.png)
一次读一个字节数组
![](https://img.haomeiwen.com/i9168312/342488f097c9fa77.png)
1.2.5案例:复制图片
![](https://img.haomeiwen.com/i9168312/31567a2caba17e9f.png)
1.2.6字节缓冲流
public class BufferedStreamDemo {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("D:\\project\\IdeaProjects\\FirstProject\\fos.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
//写数据
bos.write("hello\r\n".getBytes());
bos.write("world\r\n".getBytes());
//释放资源
bos.close();
fos.close();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\project\\IdeaProjects\\FirstProject\\fos.txt"));
int by;
while((by = bis.read()) != -1){
System.out.print((char)by);
}
//释放资源
bis.close();
}
}
1.3字符流
1.3.1为什么有字符流
![](https://img.haomeiwen.com/i9168312/ba5adc3f6798afa3.png)
![](https://img.haomeiwen.com/i9168312/bd322aae4810b754.png)
1.3.2字符流的编码解码问题
***用什么方式编码,就用什么方式解码,否则会出现乱码
下面是使用字符流的两个抽象基类进行编码解码读写
![](https://img.haomeiwen.com/i9168312/ea613afef3533239.png)
1.3.3字符流写数据
![](https://img.haomeiwen.com/i9168312/d8d8c041fe0309f6.png)
1.3.4字符流读数据
![](https://img.haomeiwen.com/i9168312/725fcbb92deb75cb.png)
1.3.5字符缓冲流
![](https://img.haomeiwen.com/i9168312/a7b9201868a6f714.png)
1.3.6字符缓冲流特有功能
![](https://img.haomeiwen.com/i9168312/3975e0d94bc1e6bf.png)
![](https://img.haomeiwen.com/i9168312/60122c52c5c10f19.png)
![](https://img.haomeiwen.com/i9168312/5f7e81151b5a8aee.png)
1.4异常处理
2.多线程
2.1实现多线程
2.1.1多线程实现方式
![](https://img.haomeiwen.com/i9168312/786b47130fcd753e.png)
2.1.2线程调度
![](https://img.haomeiwen.com/i9168312/6f40317855c3fd7e.png)
2.1.3
![](https://img.haomeiwen.com/i9168312/83feb3ea26e481b9.png)
![](https://img.haomeiwen.com/i9168312/4a72855fb5ae6188.png)
2.1.4多线程实现方式
![](https://img.haomeiwen.com/i9168312/3e3be9ea58600754.png)
![](https://img.haomeiwen.com/i9168312/8208827f06069789.png)
2.2线程同步
2.2.1同步代码块
![](https://img.haomeiwen.com/i9168312/b9a36f26c4587874.png)
2.2.2同步方法
![](https://img.haomeiwen.com/i9168312/c50236e196f4e124.png)
2.2.3线程安全的类
StringBuffer
Vector
HashTable
![](https://img.haomeiwen.com/i9168312/971be0d377596ef5.png)
2.3生产者消费者
3.网络编程
3.1网络编程
![](https://img.haomeiwen.com/i9168312/bf60f04b42423a63.png)
3.2UDP
3.2.1UDP发送数据
![](https://img.haomeiwen.com/i9168312/1efc8be4381b4dd1.png)
public class SendDemo {
public static void main(String[] args) throws IOException {
DatagramSocket dgs = new DatagramSocket();
byte[] bys = "Hello, udp. 我来啦".getBytes();
int length = bys.length;
InetAddress address = InetAddress.getByName("192.168.1.2");
int port = 10086;
DatagramPacket dp = new DatagramPacket(bys,length,address,port);
dgs.send(dp);
dgs.close();
}
}
3.2.2UDP接收数据
![](https://img.haomeiwen.com/i9168312/8ecc746cb992b606.png)
public class SendDemo {
public static void main(String[] args) throws IOException {
DatagramSocket dgs = new DatagramSocket();
byte[] bys = "Hello, udp. 我来啦".getBytes();
int length = bys.length;
InetAddress address = InetAddress.getByName("192.168.1.2");
int port = 10086;
DatagramPacket dp = new DatagramPacket(bys,length,address,port);
dgs.send(dp);
dgs.close();
}
}
3.3TCP
3.3.1TCP发送数据
![](https://img.haomeiwen.com/i9168312/5dcbafc0d4381638.png)
![](https://img.haomeiwen.com/i9168312/e91a3bc43c2f015b.png)
3.3.1TCP接收数据
![](https://img.haomeiwen.com/i9168312/baee9a88945aa00f.png)
![](https://img.haomeiwen.com/i9168312/8e2b657e87869b93.png)
4.Lambda表达式
4.1Lambda初体验
![](https://img.haomeiwen.com/i9168312/83a90e4251000b64.png)
![](https://img.haomeiwen.com/i9168312/77f92a4f2a71efa7.png)
![](https://img.haomeiwen.com/i9168312/5c72d44fd4994a2b.png)
4.2Lambda练习
4.2.1练习一 无参无返回值
public class EatableDemo {
public static void main(String[] args) {
//第一种
Eatable e = new EatableImpl();
useEatable(e);
//第二种,匿名内部类
useEatable(new Eatable() {
@Override
public void eat() {
System.out.println("一天一苹果,医生远离我");
}
});
//第三种,Lambda表达式
useEatable(() -> {
System.out.println("一天一苹果,医生远离我");
});
}
public static void useEatable(Eatable e){
e.eat();
}
}
4.2.2练习三 带参带返回值
public class AddableDemo {
public static void main(String[] args) {
useAddable(new Addable() {
@Override
public int add(int x, int y) {
return x + y;
}
});
useAddable((int x,int y) -> {
return x + y;
});
}
public static void useAddable(Addable a){
int sum = a.add(3,4);
System.out.println("sum = " + sum);
}
}
public interface Addable {
int add(int x, int y);
}
4.2.3Lambda省略模式
![](https://img.haomeiwen.com/i9168312/7d0e76c4e352a9e8.png)
4.2.4Lambda与匿名内部类的区别
![](https://img.haomeiwen.com/i9168312/9487be1ce440b2e7.png)
4.3接口方法
4.3.1接口中默认方法
![](https://img.haomeiwen.com/i9168312/31ed6733c6bc7660.png)
4.3.2接口中静态方法
![](https://img.haomeiwen.com/i9168312/3a4c7683a5b03ea4.png)
4.3.3接口中私有方法(需要JDK9
5.方法引用
5.1方法引用符
![](https://img.haomeiwen.com/i9168312/3827e9b5929436ba.png)
5.2四种引用
![](https://img.haomeiwen.com/i9168312/a003a88b4fb7fb54.png)
6.函数式接口
6.1概述
![](https://img.haomeiwen.com/i9168312/800e77536497c2c6.png)
6.2函数式接口作为方法参数
![](https://img.haomeiwen.com/i9168312/086ac973fa4e1894.png)
6.3函数式接口作为方法返回值
(有点懵
6.4常用函数式接口
6.4.1Supplier
![](https://img.haomeiwen.com/i9168312/e3c3d9fcfea0260a.png)
![](https://img.haomeiwen.com/i9168312/73e43d5847f5d7c9.png)
6.4.2Consumer接口
![](https://img.haomeiwen.com/i9168312/20a6bb3615ce0f56.png)
![](https://img.haomeiwen.com/i9168312/a54b6861ef479bde.png)
6.4.3Predicate接口
![](https://img.haomeiwen.com/i9168312/df7fea5c1af046fd.png)
6.4.4Function接口
![](https://img.haomeiwen.com/i9168312/ed534f522d00ab17.png)
7.Stream流
7.1概述
![](https://img.haomeiwen.com/i9168312/820a0bd36ceb4630.png)
7.2流的使用
![](https://img.haomeiwen.com/i9168312/651584455f3fa7d5.png)
![](https://img.haomeiwen.com/i9168312/38127453b79f9ec1.png)
7.3流的生成
![](https://img.haomeiwen.com/i9168312/c868353741ee2bab.png)
7.4流的中间操作
![](https://img.haomeiwen.com/i9168312/fad93631239a68b0.png)
精彩操作
![](https://img.haomeiwen.com/i9168312/cb379637800b7556.png)
![](https://img.haomeiwen.com/i9168312/1244708126328223.png)
7.5终结操作
![](https://img.haomeiwen.com/i9168312/26578b225c34c5c4.png)
7.6流的收集操作
![](https://img.haomeiwen.com/i9168312/2c064dc8ce35aa15.png)
![](https://img.haomeiwen.com/i9168312/d3dfd9bbfeebda6f.png)
![](https://img.haomeiwen.com/i9168312/239997e9f1a6480c.png)
![](https://img.haomeiwen.com/i9168312/6cc1f7a0b6cd2af7.png)
![](https://img.haomeiwen.com/i9168312/376ef37e2f7aa806.png)
8.类加载器和反射
8.1类加载
![](https://img.haomeiwen.com/i9168312/2670a01975a3ae9e.png)
![](https://img.haomeiwen.com/i9168312/8bce27a53731d615.png)
8.2反射
![](https://img.haomeiwen.com/i9168312/cf2d18b45babf9da.png)
9.模块化
![](https://img.haomeiwen.com/i9168312/6c32fce84b9f7d12.png)
网友评论