![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java学习
文章平均质量分 67
天亮有惊喜
If you have a dream,just do it!
展开
-
JAVA网络编程:基于UDP协议的在线聊天器
一、背景及工具1.1 背景学习了JAVA网络编程,就编写了一个基于UDP协议的在线聊天器。因为是持续性的在线聊天,故需要基础的多线程的知识。1.2硬软件配置通信方A:主机1:IP地址为:192.168.101.78,接收消息的端口号为:5003通信方B:主机2:IP地址为:192.168.101.12,接收消息的端口号为:5002也就是说,两者的发送消息端口号可以任意设置,毕竟消息通信就是两方接收端口内的操作。二、程序定义4个类以实现在线聊天,源程序如下。图1.原创 2022-05-04 15:29:57 · 1653 阅读 · 1 评论 -
【深入浅出地详解】TCP可靠传输的保证: 重传、滑动窗口、流量控制、拥塞控制
TCP 是通过序列号、确认应答、重发控制、连接管理(三次握手、四次挥手)以及滑动窗口、流量控制、拥塞控制等机制实现可靠传输的一、重传机制TCP实现可靠传输的基础,是通过序列号与确认应答。当发送端的数据到达接受主机时,接收端主机会返回一个确认应答消息,表示已经收到消息。图1 TCP数据传输重传机制是为了解决TCP数据包丢失的情况,具有2种重传机制和2种应答机制:超时重传: 快速重传: SACK(Selective Ac...原创 2022-03-15 13:40:07 · 4419 阅读 · 0 评论 -
简单易懂: JAVA反射详解+实例
一、反射详解1.1反射定义 Java反射就是在运行状态中,可以获取任意一个类的所有属性和方法(包括私有)并且调用它们;也可以改变它的属性(包括私有)。这也是Java被视为动态语言(或准动态,为啥要说是准动态,因为一般而言的动态语言定义是程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言)的一个关键特质。动态代理的实现,就依赖于反射!1.2反射优缺点优点:可以代码更加灵活...原创 2022-03-09 09:57:41 · 1767 阅读 · 2 评论 -
简单易懂,不说废话: JAVA反射与动态代理
1- 反射:通过反射可以获取任意一个类的所有属性和方法,并且可以调用这些属性和方法优点 可以让代码更加灵活、为各种框架提供开箱即用的功能提供了便利 缺点 在运行时有了分析操作类的能力,但是也增加了安全问题。比如可以无视泛型参数的安全检查(发生在编译时)。另外,反射的性能也要稍差点。 2- 代理:代理模式主要作用是拓展(增强)目标的功能,如图1所示,在目标对象的某个方法执行【前、后】可以增加一些自定义的操作。主要有静态代理和动态代理两类静态代理:对目标对象的每个方法的增强都是手动完原创 2022-03-03 10:03:17 · 19 阅读 · 0 评论 -
阅读ArrayList源码
ArrayList扩容的核心方法为:.grow方法,该方法具有两个构造器,无参构造器情况下,直接调用有参构造器;有参构造器的作用如下:定义,当前需要的长度为:minCapacity; 当前的真实长度为:oldCapacity = elementData.length;那么,差值为:int differValue = minCapacity - oldCapacity;为了减少扩容次数,则每次多扩容一点,可以选择扩原来长度的1.5倍,或者差值,扩容之后的长度为:int newCap..原创 2022-03-02 21:57:38 · 342 阅读 · 0 评论 -
基于wireshark和NetAssist的单机模拟抓TCP包:三次握手、四次挥手、长连接
0- 工具wireshark v3.6.2 网络分析器下载地址:Wireshark · DownloadNetAssist v5.2 网络调试助手下载地址:NetAssist下载_NetAssist v5.0.2中文版 - 下载之家 (windowszj.net)1-准备工作1.1打开2个NetAssist程序,充当服务器和客户端图1服务器与客户端 测试后,收发数据正常。1.2打开wireshark程序,准备抓包...原创 2022-02-28 13:18:08 · 2923 阅读 · 0 评论 -
JAVA的三大特性:封装、继承、多态
1- 封装:封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。但是可以提供一些可以被外界访问的方法来操作属性。2- 继承:拓展已存在的代码模块,目的是为了代码复用。3- 多态对象的编译时类型和运行时类型不一致,具体表现为父类的引用指向子类的实例。PS:JAVA引用变量有两个类型(编译时类型和运行时类型)。其中,编译时类型由声明该变量时使用的类型(父类)决定,运行时类型由实际赋给该变量的对象决定(...原创 2022-02-21 11:29:42 · 6883 阅读 · 0 评论 -
【疯狂JAVA讲义5】第五章(面向对象上):Java的运行机制
编译语言的运行原理:编译型语言:C、C++、Objective-C、Swift、Kotlin等高级语言1.编译生成的目标程序(针对特定平台的机器指令),只能在特定的平台上运行,不能跨平台。2.性能好解释型语言:JavaScript、Ruby、Python等语言。1.能跨平台Java语言既有编译(不彻底的编译、编译成字节码文件),又有解释(每次运行时,由JVM将字节码翻译成对应平台的机器指令)。1.性能好2.能跨平台【面试题】JVM的原理是什么?Jav...原创 2021-04-16 16:38:27 · 190 阅读 · 0 评论 -
【疯狂JAVA讲义5】第五章(面向对象上):5.1类和对象
目录5.1 类和对象5.1.1 定义类类:成员变量:方法:构造器:5.1.2 对象的产生和使用5.1.3 对象、引用和指针5.1.4 对象的this引用5.1 类和对象5.1.1 定义类类:[ 修饰符 ] class 类名{≥0个构造器定义...≥0个成员变量定义...≥0个方法定义...}修饰符:①对类:public/final/abstract/无;类名:≥1个单词连缀(大写首字母)成员变量:[修饰符] 类型 成员变原创 2021-04-07 21:51:48 · 190 阅读 · 4 评论 -
基础知识(一):在Java中为什么十进制的0.1不能被二进制表示呢?
一、现象 在Java中输入命令:System.out.print(2.0 - 1.1),会打印出0.899999999999,并不是期望的0.9。二、解释 这是因为二进制不能精确的表示0.1。在二进制中,所有的数字都由表示,下面看数学表达式: 3.0和0.625通过二进制可以表示为:所以,在Java中3.0和0.625等诸如此类的,均可以“正常显示”,而0.1和0.2以及0.3这种则无法这样表示。但是,如果想要在数值计算中不允许有任...原创 2021-03-15 15:32:05 · 483 阅读 · 0 评论