-
Java使用Lambda表达式遍历Collection集合
所属栏目:[语言] 日期:2022-07-11 热度:130
Java 8 为 Iterable 接口新增了一个 forEach(Consumer action) 默认方法,该方法所需参数的类型是一个函数式接口,而 Iterable 接口是 Collection 接口的父接口,因此 Collection 集合也可直接调用该方法。 当程序调用 Iterable 的 forEach(Consumer actio[详细]
-
Java Iterator 迭代器 遍历Collection集合元素
所属栏目:[语言] 日期:2022-07-11 热度:134
Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素,也是 Java 集合框架的成员,但它与 Collection 和 Map 系列的集合不一样,Collection 和 Map 系列集合主要用于盛装其他对象,而 Iterator 则主要用于遍历(即迭代访问)Collection 集合中[详细]
-
Java Set集合 HashSet和TreeSet类
所属栏目:[语言] 日期:2022-07-11 热度:139
Set 集合类似于一个罐子,程序可以依次把多个对象丢进Set 集合,而 Set 集合通常不能记住元素的添加顺序。也就是说 Set 集合中的对象不按特定的方式排序,只是简单地把对象加入集合。Set 集合中不能包含重复的对象,并且最多只允许包含一个 null 元素。 Se[详细]
-
Java的异常跟踪栈
所属栏目:[语言] 日期:2022-07-11 热度:169
异常对象的 printStackTrace() 方法用于打印异常的跟踪栈信息,根据 printStackTrace() 方法的输出结果,开发者可以找到异常的源头,并跟踪到异常一路触发的过程。 看下面用于测试 printStackTrace 的例子程序。 class SelfException extends RuntimeExcep[详细]
-
Java Collection接口详解
所属栏目:[语言] 日期:2022-07-11 热度:161
Collection 接口是 List、Set 和 Queue 接口的父接口,通常情况下不被直接使用。Collection 接口定义了一些通用的方法,通过这些方法可以实现对集合的基本操作。定义的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合。 本节将介绍 Collectio[详细]
-
Java.util.logging JDK自带录入日志类
所属栏目:[语言] 日期:2022-07-11 热度:176
每个初学者都很熟悉在有问题的代码中使用 System.out.println 方法在控制台打印消息,来帮助观察程序运行的操作过程。如果你使用 System.out.println 方法,一旦发现问题的根源,就要将这些语句从代码中删去。如果接下来又出现了问题,就需要再插入几个调[详细]
-
GCC编译器下载和安装教案 针对Linux发行版
所属栏目:[语言] 日期:2022-07-11 热度:116
由于 Linux 操作系统的自由、开源,在其基础上衍生出了很多不同的 Linux 操作系统,如 CentOS、Ubuntu、Debian 等。这些 Linux 发行版中,大多数都默认装有 GCC 编译器(版本通常都较低)。 如果读者不清楚当前使用的 Linux 发行版是否已经装有 GCC 编译器[详细]
-
GCC的组成部分以及运用到的软件
所属栏目:[语言] 日期:2022-07-11 热度:82
GCC 是由许多组件组成的。表 1 列出了 GCC 的各个部分,但它们也并不总是出现 的。有些部分是和语言相关的,所以如果没有安装某种特定语言,系统:中就不会出现相关的文件。 表1:GCC 安装的各个部分 部分 描述 c++ gcc 的一个版木,默认语言设置为 C++,而[详细]
-
gcc和g++是什么 有什么差异
所属栏目:[语言] 日期:2022-07-11 热度:59
发展至今(2020 年 6 月份),GCC 编译器已经更新至 10.1.0 版本,其功能也由最初仅能编译 C 语言,扩增至可以编译多种编程语言,其中就包括 C++ 。 除此之外,当下的 GCC 编译器还支持编译 Go、Objective-C,Objective-C ++,Fortran,Ada,D 和 BRIG(HS[详细]
-
图解TCP数据报结构以及三次握手 很详细
所属栏目:[语言] 日期:2022-07-11 热度:153
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。 客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口[详细]
-
详细分析TCP数据的传输步骤
所属栏目:[语言] 日期:2022-07-11 热度:151
此时 Ack 号为 1301 而不是 1201,原因在于 Ack 号的增量为传输的数据字节数。假设每次 Ack 号不加传输的字节数,这样虽然可以确认数据包的传输,但无法明确100字节全部正确传递还是丢失了一部分,比如只传递了80字节。因此按如下的公式确认 Ack 号: Ack[详细]
-
解析TCP四次握手断开连接
所属栏目:[语言] 日期:2022-07-11 热度:184
建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。 建立连接后,客户端和服务器都处于[详细]
-
再聊聊UDP和TCP
所属栏目:[语言] 日期:2022-07-11 热度:181
TCP 是面向连接的传输协议,建立连接时要经过三次握手,断开连接时要经过四次握手,中间传输数据时也要回复 ACK 包确认,多种机制保证了数据能够正确到达,不会丢失或出错。 UDP 是非连接的传输协议,没有建立连接和断开连接的过程,它只是简单地把数据丢[详细]
-
介于UDP的服务器端和客户端
所属栏目:[语言] 日期:2022-07-11 热度:106
前面的文章中我们给出了几个 TCP 的例子,对于 UDP 而言,只要能理解前面的内容,实现并非难事。 UDP中的服务器端和客户端没有连接 UDP 不像 TCP,无需在连接状态下交换数据,因此基于 UDP 的服务器端和客户端也无需经过连接过程。也就是说,不必调用 list[详细]
-
TCP协议的粘包难题 数据的无边界性
所属栏目:[语言] 日期:2022-07-11 热度:145
上节我们讲到了socket缓冲区和数据的传递过程,可以看到数据的接收和发送是无关的,read()/recv() 函数不管数据发送了多少次,都会尽可能多的接收数据。也就是说,read()/recv() 和 write()/send() 的执行次数可能不同。 例如,write()/send() 重复执行三[详细]
-
socket缓冲区以及阻塞模式说明
所属栏目:[语言] 日期:2022-07-11 热度:132
在《socket数据的接收和发送》一节中讲到,可以使用 write()/send() 函数发送数据,使用 read()/recv() 函数接收数据,本节就来看看数据是如何传递的。 socket缓冲区 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。 write()/send()[详细]
-
listen和accept函数 使套接字进入监听状态并响应客户端请求
所属栏目:[语言] 日期:2022-07-11 热度:76
对于服务器端程序,使用 bind() 绑定套接字后,还需要使用 listen() 函数让套接字进入被动监听状态,再调用 accept() 函数,就可以随时响应客户端的请求了。 listen() 函数 通过 listen() 函数可以让套接字进入被动监听状态,它的原型为: int listen(int[详细]
-
send recv 和write read 发送数据与接收数据
所属栏目:[语言] 日期:2022-07-11 热度:125
在 Linux 和 Windows 平台下,使用不同的函数发送和接收 socket 数据,下面我们分别讲解。 Linux下数据的接收和发送 Linux 不区分套接字文件和普通文件,使用 write() 可以向套接字中写入数据,使用 read() 可以从套接字中读取数据。 前面我们说过,两台计[详细]
-
bind 和connect 函数 绑定套接字并创立连接
所属栏目:[语言] 日期:2022-07-11 热度:76
socket() 函数用来创建套接字,确定套接字的各种属性,然后服务器端要用 bind() 函数将套接字与特定的 IP 地址和端口绑定起来,只有这样,流经该 IP 地址和端口的数据才能交给套接字处理。类似地,客户端也要用 connect() 函数建立连接。 下面的代码,将创[详细]
-
Java Lambda表达式的使用
所属栏目:[语言] 日期:2022-07-11 热度:77
在《Java Lambda表达式》和《Java Lambda表达式的3种简写方式》一节中我们了解了 Java Lambda 的概念并可以在匿名类的场合使用 Lambda 语法进行简单替换。本节主要介绍在 Java 中如何使用 Lambda 表达式。 作为参数使用Lambda表达式 Lambda 表达式一种常见[详细]
-
Java Lambda表达式
所属栏目:[语言] 日期:2022-07-11 热度:195
Lambda 表达式(Lambda expression)是一个匿名函数,基于数学中的演算得名,也可称为闭包(Closure)。现在很多语言都支持 Lambda 表达式,如 C++、C#、Java、 Python 和 JavaScript 等。 Lambda 表达式是推动 Java 8 发布的重要新特性,它允许把函数作为[详细]
-
Java8新特性 Effectively final
所属栏目:[语言] 日期:2022-07-11 热度:192
Java 中局部内部类和匿名内部类访问的局部变量必须由 final 修饰,以保证内部类和外部类的数据一致性。但从 Java 8 开始,我们可以不加 final 修饰符,由系统默认添加,当然这在 Java 8 以前的版本是不允许的。Java 将这个功能称为 Effectively final 功能[详细]
-
Java匿名类 Java匿名内部类
所属栏目:[语言] 日期:2022-07-11 热度:120
匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下: new 类或接口() { // 类的主体 }; 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模[详细]
-
Java局部内部类
所属栏目:[语言] 日期:2022-07-11 热度:89
局部内部类是指在一个方法中定义的内部类。示例代码如下: public class Test { public void method() { class Inner { // 局部内部类 } } } 局部内部类有如下特点: 1)局部内部类与局部变量一样,不能使用访问控制修饰符(public、private 和 protected[详细]
-
Java静态内部类
所属栏目:[语言] 日期:2022-07-11 热度:182
静态内部类是指使用 static 修饰的内部类。示例代码如下: public class Outer { static class Inner { // 静态内部类 } } 上述示例中的 Inner 类就是静态内部类。静态内部类有如下特点。 1)在创建静态内部类的实例时,不需要创建外部类的实例。 public c[详细]
