Java 一周学习总结(七)

Java 学习总结

学习Java的第七周,本周主要的学习内容为I/O框架、网络编程、反射以及JDK8
点击查看思维导图

I/O框架

1. 流的划分
  • 流的概念:内存与存储设备之间传输数据的通道
    (1)按方向【重点】:
    输入流:将存储设备中的内容读入到内存中
    输出流:将内存中的内容写入到存储设备中
    (2)按单位:
    字节流:以字节为单位,可以读写所有数据
    字符流:以字符为单位,只能读写文本数据
    (3)按功能:
    节点流:具有实际传输数据的读写功能
    过滤流:在节点流的基础上增强功能
2.字节流

(1)字节流的父类(抽象类):
InputStream : 字节输入流—read方法
OutputStream : 字节输出流—write方法

(2)字节节点流:
FileInputStream
FileOutputStream

(3)字节过滤流:
缓冲流:BufferedOutputStream/BufferedInputStream
作用:提高IO效率,减少访问硬盘的次数
flush是将缓存区的内容写入文件
对象流:ObjectOutputStream/ObjectInputStream
增强了缓冲区的功能
增强了读写8种基本数据类型和字符串功能
增强了读写的功能:readObject(),从流中读取一个对象
WriteObject(Object obj)向流中写入一个对象

(4)对象序列化
对象序列化的细节:
必须实现Serializable接口
必须保证其所有属性均可序列化
Transient修饰临时属性,不参与序列化
读取到文件尾部的标志:java.io.EOFExecption

3.字符编码

UTF-8 针对Unicode的可变长度字符编码
GBK 简体中文、扩充
确保输出流,输入流的编码一致

4.字符流

(1)字符流的父类(抽象类)
Reader:字符输入流——read方法
Writer:字符输入流——wirter方法

(2)字符节点流
FileWriter:writer ( String str )
FileReader: read ( char[ ] c ) 从流中读取多个字符,将读取到的内容存入c数组,返回实际读到的字符数;如果读到文件尾部,则返回-1

(3)字符过滤流
缓冲流:BufferedWriter/BufferedReader
特点:支持输入换行符;可一次写一行、读一行(不过每一次换行,都需要调用newLine())
PrintWriter: 封装了print()/ println( ) 方法,支持写入后换行

(4)字符节点流
桥转换流:InputStreamReader / OutputStreamWriter
可将字节流转换为字符流
可设置字符的编码方式

使用步骤:
创建节点流
OutputStream os = new FileOutputStream(“Files//conver.txt”);
InputStream is = new FileInputStream(“Files//conver.txt”);
[创建过滤流 设置字符编码集]
OutputStreamWriter osw = new OutputStreamWriter(os,“UTF-8”);
InputStreamReader isr = new InputStreamReader(is,“UTF-8”);
封装过滤流
PrintWriter pw = new PrintWriter(osw);
BufferedReader br = new BufferedReader(isr);
读写数据
pw.println(“日出东方”);
pw.println(“你好Java”);
pw.flush();
关闭流
pw.close();

5.file类

(1)概念:带表物理盘符中的一个文件或者文件夹

(2) 方法:getAbsolutePath() , 获取绝对路径
getParent() , 获取文件目录所在的目录
isDirectory() , 是否是目录

(3) FileFilter接口
对获取的文件进行过滤

网络编程

1.网络

由点和线构成,表示诸多对象间的相互联系

2.计算机网络:

为实现资源共享和信息传递,通过通信线路连接起来的若干主机(Host)
互联网:Internet)点与点相连
万维网:(WWW – World Wide Web)端与端相连
物联网:(IoT – Interent of things)物与物相连

3.网络编程:

让计算机与计算机之间建立连接、进行通信
网络模型:
OSI (Oper Systerm Interconnection) 开放式系统互联
TCP/UDP
TCP协议:Transmission Control Protocol

4.传输控制协议

是一种面向连接的、可靠的、基于字节流的传输层通信协议。数据大小无限制。建立连接的过程需要三次握手,断开连接的过程需要四次挥手。
UDP协议:User Datagram Protocol

5.用户数据报协议

是一种无线连接的传输层协议,提供面向事务发的简单不可靠信息传送服务,每个包的大小64KB

6.IP

IP协议:Internet Protocol Address 互联网协议地址/网际协议地址(分配给互联网设备的数字标签,唯一标识)
IP地址分类
IPV4:4字节32位整数
IPV6:16字节128位整数
IPV4分类:
B类:中型企业,128.0.0.1 ~ 191.255.255.254
C类:个人用户,192.0.0.1 ~ 223.255.255.254
回环地址:127.0.0.1 指本机,一般用于测试
查看IP地址命令:ipconfig
测试IP命令:ping D.D.D.D
port

7.端口

端口号:在通信实体上进行网络通信的程序的唯一标识
端口的分类:
公认端口:0 ~ 1023
注册端口:1024 ~ 49151
动态或私有端口:49152 ~ 65535
常用端口:
MySql: 3306
Oracle: 1521
Tomcat: 8080
SMTP : 25
Web服务器:80
FTP服务器:21

8.InetAddress类

概念:表示互联网协议(IP)地址对象,封装了与该IP地址相关的所有信息,并提供获取信息的常用方法
方法:
public static InetAddress getLocalHose( )获取本地主机地址对象
public static InerAddress getByName(String host)根据主机名称获得地址对象
public static InetAdress[] getAllByName(String host)
获得所有相关地址对象
public String getHostAddress()获取IP地址字符串
public String getHostName() 获取IP地址主机名

9.基于TCP的网络编程

Socket(套接字)是网络中的一个通信节点
分为客户端Socket与服务器SeverSocket
通信要求:IP地址 + 端口号
开发步骤:
建立通信连接(回话):
创建ServeeSocket,指定端口号
调用accept等待客户端接入
客户端请求服务器:
创建Socket,指定服务器IP+端口号
使用输出流,发送请求数据给服务器
使用输入流,接受响应数据到客户端(等待)
服务器响应客户端:
使用输入流,接受请求数据到服务器(等待)
使用输出流,发送响应数据给客户端

反射

1.类对象

基于某个类new出来的对象,也称为实例对象
类对象:类加载的产物,封装了一个类的所有信息(类名、父类、接口、属性、方法、构造方法)
模板类 Class
获取类对象
通过类的对象,获取类对象
Student s = new Student();
Class c = s.getClass();
通过类名获取类对象
Class c = 类名.class
通过静态方法获取类对象
Class c = Class.forName(“包名.类名”);
常用方法:
public String getName( )
public Package getPackage( )
public Class <? Super T>getSuperfaces( )
public Class<?>[ ] getInterfaces( )
public Field[ ] getFields( )
public Method[ ] getMethods( )
public Constructor<?>[ ] getConstructors( )
public T newInstance( )

2.工厂设计模式

开发中有一个非常重要的原则“开闭原则”,对扩展开放,对修改关闭
工厂模式主要负责对象创建的问题
可通过反射进行工厂模式的设计,完成动态的对象创建

3.单例模式:

只允许创建一个该类的对象
饿汉式:
天生线程安全,类加载时创建(不用时也创建,占用资源)
懒汉式:
使用时创建、天生线程不安全(加同步锁);效率低
使用时创建,天生线程安全

JDK8

1.Lambda

概念:允许把函数作为一个方法的参数(函数作为参数传递到方法中)
<函数式接口> <变量名>= (参数1,参数2)->{
方法体
}
注意事项
新的操作符 ->(箭头操作符)
(参数1,参数2)->表示参数列表
->( ){ } 方法体
形参列表的数据类型会自动推断
如果形参列表为空,只需保留()
如果形参列表只有一个,且无返回值,只需参数名字即可
如果执行语句只有一句,且无返回值,{}可以省略
若有返回值,仍想省略{},return也可省略。保留执行语句只有一句
Lambda表达式不会生成单独的内部文件
Lambda访问局部变量时,变量要修饰符final,如果没有,会自动添加

2.函数式接口

如果一个接口只有一个抽象方法,则该接口称为函数式接口
为了确保接口达到要求,可以添加@FunctionalInterface注解
内置四个核心函数式接口:
Consumer 消费型接口 void accept(T t);
Supplier 供给型接口 T get();
Function<T,R> 函数型接口 R apply(T t)
Predicate 断言型接口 Boolean test(T t)

3.方法引用

方法引用是Lambda表达式的一种简写形式,如果Lambda表达式方法体中只是调用一个特定的已存在的方法,则可以使用方法引用
使用 ::操作符将对象或类和方法名的名字分隔开来
对象::实例方法
类::静态方法
类::实例方法
类::new
注意:调用的方法参数列表与返回值类型,要与函数型接口中的方法参数列表与返回值类型一致

学习java的第七周,经过七周的学习,javaSE阶段基本上算是告一段落了。回顾这七周,学了不少知识,又记住了多少呢?学习是一个反复的过程,温故而知新,当前的学习速度对我而言,勉强有足够的时间去理解新知识,很少有回头复习的时间,每天的精神状态也不同,偶尔会遇到状态特别差的情况,一天学习下来混混沌沌的,晚上再慢慢理理思路,而且还需要敲敲敲、练练练,我不知道自己能做到哪一步,但至少要坚持下去,还是那句老话:坚持就是胜利。相信自己,加油!

宝剑锋从磨砺出,梅花香自苦寒来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值