栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础04

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础04

一、Lambda表达式

组成:

-1.一些参数
-2.一个箭头
-3.一段代码

格式:

(参数类型 参数名称) -> { 代码语句 }
//说明
- 小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
- `->`是新引入的语法格式,代表指向动作。
- 大括号内的语法与传统方法体要求基本一致。

省略规则:

1. 小括号内参数的类型可以省略;
2. 如果小括号内**有且仅有一个参**,则小括号可以省略;
3. 如果大括号内**有且仅有一个语句**,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。

使用前提:

1. 使用Lambda必须具有接口,且要求**接口中有且仅有一个抽象方法**。
   无论是JDK内置的`Runnable`、`Comparator`接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。
2. 使用Lambda必须具有**上下文推断**。
   也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例

tips:有且仅有一个抽象方法的接口,称为“函数式接口”。

Stream流

例子说明lambda流

public class Demo03StreamFilter {
    public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("张强");
        list.add("张三丰");

        list.stream()
          	.filter(s -> s.startsWith("张"))
            .filter(s -> s.length() == 3)
            .forEach(System.out::println);
    }
}

流获取方式

1.List
List list = new ArrayList<>();
Stream stream1 = list.stream();

2.Set
Set set = new HashSet<>();
Stream stream2 = set.stream(); 

3.Vector
Vector vector = new Vector<>();
Stream stream3 = vector.stream();

4.Map
Map map = new HashMap<>();
Stream keyStream = map.keySet().stream();
Stream valueStream = map.values().stream();
Stream> entryStream = map.entrySet().stream();

5.数组流
Stream stream = Stream.of(array);

常用API

方法名方法作用方法种类是否支持链式调用
count统计个数终结否
forEach逐一处理终结否
filter过滤函数拼接是
limit取用前几个函数拼接是
skip跳过前几个函数拼接是
map映射函数拼接是
concat组合函数拼接是
Object[] toArray();把结果放到数组中
二、File类

构造方法:

- `public File(String pathname) ` :通过将给定的**路径名字符串**转换为抽象路径名来创建新的 File实例。  
- `public File(String parent, String child) ` :从**父路径名字符串和子路径名字符串**创建新的 File实例。
- `public File(File parent, String child)` :从**父抽象路径名和子路径名字符串**创建新的 File实例。

常用API:

public String getAbsolutePath()  :返回此File的绝对路径名字符串。
public String getPath()  :将此File转换为路径名字符串。 
public String getName()  :返回由此File表示的文件或目录的名称。  
public long length() :返回由此File表示的文件的长度。 
public boolean exists() :此File表示的文件或目录是否实际存在。
public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件。
public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。 
public boolean delete() :删除由此File表示的文件或目录。  
public boolean mkdir() :创建由此File表示的目录。
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles():返回一个File数组,表示该File目录中的所有的子文件或目录。  
三、IO流
类型输入流输出流
字节流InputStreamOutputStream
FileInputStreamFileOutputStream
BufferedInputStreamBufferOutputStream
对象持久化流ObjectInputStreamObjectOutputStream
字符流ReaderWriter
FileReaderFileWriter
BufferedReaderBufferedWriter
转换流(字符流子类)InputStreamReadeOutputStreamReader
ObjectInputStream、ObjectOutputStream类

序列化

  1. 一个对象要想序列化,必须满足两个条件:
  • 该类必须实现java.io.Serializable 接口,Serializable 是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出NotSerializableException 。
  • 该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用**transient** 关键字修饰。
try-with-resource

自动关闭资源对象
格式:

try (创建流对象语句,多个,使用';'隔开) {
	// 读写数据
} catch (IOException e) {
	e.printStackTrace();
}
四、 Properties类

构造方法:

public Properties()

常用API:

- `public Object setProperty(String key, String value)` : 保存一对属性。  
- `public String getProperty(String key) ` :使用此属性列表中指定的键搜索属性值。
- `public Set stringPropertyNames() ` :所有键的名称的集合。

流:

`public void load(InputStream inStream)`: 从字节输入流中读取键值对。 
五、打印流 PrintStream类

构造方法:

public PrintStream(String fileName)

例子:

 PrintStream ps = new PrintStream("ps.txt");
// 设置系统的打印流流向,输出到ps.txt
 System.setOut(ps);

网络编程 一、通信协议 分类:
  1. TCP:

    面向连接,传输可靠,三次握手

TCP协议的特点
    * 面向连接的协议
    * 只能由客户端主动发送数据给服务器端,服务器端接收到数据之后,可以给客户端响应数据。
    * 通过三次握手建立连接,连接成功形成数据传输通道。
    * 通过四次挥手断开连接
    * 基于IO流进行数据传输
    * 传输数据大小没有限制
    * 因为面向连接的协议,速度慢,但是是可靠的协议。

TCP协议的使用场景
    * 文件上传和下载
    * 邮件发送和接收
    * 远程登录

TCP协议相关的类
    * Socket
        * 一个该类的对象就代表一个客户端程序。
    * ServerSocket
        * 一个该类的对象就代表一个服务器端程序。

Socket类构造方法
    * Socket(String host, int port)
        * 根据ip地址字符串和端口号创建客户端Socket对象
        * 注意事项:只要执行该方法,就会立即连接指定的服务器程序,如果连接不成功,则会抛出异常。
            如果连接成功,则表示三次握手通过。

Socket类常用方法
    * OutputStream getOutputStream(); 获得字节输出流对象
    * InputStream getInputStream();获得字节输入流对象
  1. IP:
    面向无连接,直接发送数据,传输速度快,但是容易丢失数据

  2. UDP:

UDP协议的特点
    * 面向无连接的协议
    * 发送端只管发送,不确认对方是否能收到。
    * 基于数据包进行数据传输。
    * 发送数据的大小限制64K以内
    * 因为面向无连接,速度快,但是不可靠。

UDP协议的使用场景
    * 即时通讯
    * 在线视频
    * 网络语音电话

UDP协议相关的两个类
    * DatagramPacket
        * 数据包对象
        * 作用:用来封装要发送或要接收的数据,比如:集装箱
    * DategramSocket
        * 发送对象
        * 作用:用来发送或接收数据包,比如:码头

DatagramPacket类构造方法
    * DatagramPacket(byte[] buf, int length, InetAddress address, int port)
        * 创建发送端数据包对象
        * buf:要发送的内容,字节数组
        * length:要发送内容的长度,单位是字节
        * address:接收端的IP地址对象
        * port:接收端的端口号
    * DatagramPacket(byte[] buf, int length)
        * 创建接收端的数据包对象
        * buf:用来存储接收到内容
        * length:能够接收内容的长度

DatagramPacket类常用方法
    * int getLength() 获得实际接收到的字节个数

DatagramSocket类构造方法
    * DatagramSocket() 创建发送端的Socket对象,系统会随机分配一个端口号。
    * DatagramSocket(int port) 创建接收端的Socket对象并指定端口号

DatagramSocket类成员方法
    * void send(DatagramPacket dp) 发送数据包
    * void receive(DatagramPacket p) 接收数据包
NIO(非阻塞同步)

组成:Channel、Buffer、Selector

1. Channel:
Channel是一个对象,可以通过它读取和写入数据

* Channel是双向的,既可以读又可以写
* Channel可以进行异步的读写
* 对Channel的读写必须通过buffer对象

Channel类型:

* FileChannel:从文件读取数据的
* DatagramChannel:读写UDP网络协议数据
* SocketChannel:读写TCP网络协议数据
* ServerSocketChannel:可以监听TCP连接

2.Buffer
Channel读取数据到Buffer中

使用buffer的步骤:

1.写入数据到 Buffer;
2.调用 flip() 方法;
3.从 Buffer 中读取数据;
4.调用 clear() 方法或者 compact() 方法。

Buffer类型:

* ByteBuffer
* CharBuffer
* DoubleBuffer
* FloatBuffer
* IntBuffer
* LongBuffer
* ShortBuffer

3.Selector
Selector,可以用一个线程来处理所有的channel
创建Selector:

Selector selector = Selector.open();

注册Channel到Selector:

channel.configureBlocking(false);
//SelectionKey 代表这个通道在此 Selector 上注册 还可以用于取消通道的注册
SelectionKey key =channel.register(selector,SelectionKey.OP_READ);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/993167.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号