Socket源码相关——SocketAddress和InetSocketAddress

目录

    • 我的学习过程
    • 我的心路历程
    • 思考总结

我的学习过程

昨天学习qiujuer老师的《Socket网络编程进阶与实战》实战课程中,写了一个简易的client-server聊天项目。我的学习方法是根据课程的一部分思路提示后,自己独自进行编写,出现了很多问题,今天尝试着从源码找原因,学习了不少知识。

我的心路历程

我是用到socket来写client-server信息传输功能,socket包主要用到三个方法:

  1. connect(SocketAddress):viod
  2. getInputStream():InputStream
  3. getOutputStream():OutputStream

在使用connect方法时,我尝试new一个SocketAddress对象作为connect的参数。结果报错说:
SocketAddress是抽象的,不能被实例化。

我的操作心路:
我使用command+click进入查看了SocketAddress,发现它是一个抽象类,是一个不可变对象。源码指示@see Socket包参考,思维中断。什么意思呢?为什么要传一个抽象对象作为参数,却又无法实例化?

我的操作心路:
对比了课程中的写法,发现课程使用的是InetSocketAddress。使用command+click进入,定位到了构造器:

//Java代码
public InetSocketAddress(InetAddress addr, int port) {holder = new InetSocketAddressHolder(null,addr == null ? InetAddress.anyLocalAddress() : addr,checkPort(port));}

我一开始以为这是一个methed,怎么可以new一个methed作为参数呢?

我的操作心路:
我选中InetSocketAddress,用command+fn+F12调出所有method,显示InetSocketAddress(InetAddress, int)前有个小m,这应该也是方法,好奇怪?

我的操作心路:
我把源码往上拉,发现InetSocketAddress(InetAddress, int)确实是InetSocketAddress的构造器。真是有点学晕了,哈哈哈。那为什么传InetSocketAddress对象呢?

我的操作心路:
我百度了一下SocketAddress类和InetSocketAddress类。我发现,SocketAddress是抽象类,InetSocketAddress是前者的唯一子类。是唯一子类吗?

我的操作心路:
我选中SocketAddress,使用control+H查看了SocketAddress的所有子类,确实只有一个子类InetSocketAddress。进一步通过百度知道,可以使用SocketAddress的默认构造器来使用子类来建立InetSocketAddress对象作为参数。原来突破点在借助默认构造器和非抽象子类。

思考总结

SocketAddress是一个抽象类,它无法实例化。它只有一个子类InetSocketAddress。当一个抽象类需要“实例化”时,若它具备非抽象的子类,则可以通过抽象类的默认构造器来建立一个实例化的子类对象,实现“实例化”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三轮哥

灰太狼发现自从有了犀利哥开始,什么什么哥越来越流行了,就跟当初的各种“门”一样,这不,网上盛传许久的三轮哥,灰太狼今天才有幸看到。 不过话说回来,类似三轮哥这样的人物还是少出一点的好,这玩…

重构手法——提炼函数、搬移函数、以多态取代条件表达式

目录我的心路历程我的学习概括Extract Method(提炼函数)动机*--做法动机--做法*Move Method(搬移函数)动机*--做法动机--做法*Replace Conditional with Polymorphism(以多态取代条件表达式)动机*--做法动机…

FTP服务器架设详细图解

FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件。FTP服务作为Internet最古老的服务之一,无论在过去还是现在都有着不可替代的作用。在企业中,对于一些大文件的共享,通…

gradle下bug修正后问题仍存在解决思路

目录我的学习过程我的学习心路热加载配置bug问题总结我的学习过程 前天写的client-server聊天项目写完后,今天进行了调试。我用到的是out目录下的server.class文件和client.class文件。 先后启动两个命令行窗口来进行测试的。 使用java server启动服务端窗口。 再使…

IP-tools

IP-tools 网管员的第三只眼^ Ip-tools是一款功能齐全的网管软件,可以随时随地的向网管员报告网络的运行情况ip-tools自身集成多种tcp/ip使用工具,如本地信息、链接信息、端口扫描、ping、WHOIS、finger、nslookup、telnet、NetBIOS等功能。界面是全英的&…

用git提交代码到远程仓库遇到的问题

目录我的学习过程git环境配置(Mac版)git原理图git的push操作思路遇到的问题我的学习过程 昨天重写了一遍聊天程序,准备提交到git上进行代码管理。结果遇到了不少问题。我照着网上的教程进行操作,一步一步踩了很多坑。 git环境配…

数字示波器的激烈竞争

计算机、通信以及消费类电子产业的快速发展成为示波器发展的不竭动力&#xff1b;厂商不断从技术上对示波器进行改进更使其发展日新月异。 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />数字示波器自它诞生的第一天起&#xf…

git pull和push整理和归纳

目录各个模块概念工作区版本库暂存区远程仓库pull和push流程相关的命令暂存区相关版本库相关远程仓库相关利用远程仓库协作开发各个模块概念 我的理解&#xff1a; Git是版本管理工具&#xff0c;它主要对指定目录下的一些特定的文件的修改进行版本管理。 相关的模块有&#x…

重装vcenter后恢复原来制作的模板!

重新安装vcenter后发现原来用vcenter创建的模板没有了。清单中只显示现有的4台虚拟机&#xff0c;没有显示模板。其实找回来也很简单&#xff01;在清单中找到数据存储&#xff0c;在相应的模板文件夹中找到的.vmtx文件添加到清单中去即可&#xff01;转载于:https://blog.51ct…

Linux中点号,星号,加号,问号实战

目录Linux中的星号&#xff0c;点号和加号概念我的学习过程&#xff1a;我的思考过程&#xff1a;点号&#xff08;.&#xff09;星号&#xff08;*&#xff09;加号&#xff08;&#xff09;问号&#xff08;?&#xff09;linux星号&#xff0c;点号&#xff0c;加号&#xf…

如何调整HOOK的跳转指令

可以按这样的方式来存放 长度A 长度A 用于调整Short JMP 用于存放一些信息 |调整后的原HOOK代码 |原始代码(HOOK) |临时LONG JMP区| 信息区| 1). 调整…

广播地址的计算方法(与运算、或运算)

目录我的学习过程Python中逻辑运算符notandor位运算符取反&#xff08;~&#xff09;与&#xff08;&&#xff09;或&#xff08;|&#xff09;广播地址计算方法IP地址子网掩码网络地址广播地址广播地址计算举例我的学习过程 今天学习UDP的单播、多播、广播中&#xff0c;…

Wt::WTreeNode

2019独角兽企业重金招聘Python工程师标准>>> A single node in a tree. 〔 这个 widget 渲染的是一棵树的一个节点。〕 A tree list is constructed by combining several tree node objects in a tree hierarchy, by passing the parent tree node as the last arg…

匿名内部类探究——它是一个实例

目录我的学习过程匿名内部类概述匿名内部类探究代码验证&#xff08;匿名内部类是一个实例&#xff09;结论我的学习过程 昨天想学习一下Java8新特性&#xff0c;看到Lambda表达式可以替代匿名内部类。我对匿名内部类不太理解&#xff0c;决定学习一下。并进行了下面的归纳和思…

利用SQL查找表中的质数(prime number)和完全数(perfect number)以及几个有趣的SQL语句...

之前在某次interview中被老外问到如何用SQL找出列上的质数和完全数的问题&#xff1b;我当时已经多年没有写过这种考算法和SQL技巧(纯粹的技巧)的语句了&#xff0c;乍遇此问题倒是有些棘手。现在录以记之&#xff0c;供人参考. SQL> create table numbers(NO int) ;表已创建…

Lambda表达式及应用

目录Lambda表达式概念应用在forEach()方法使用用来替代匿名内部类代码验证&#xff08;Lambda表达式替代匿名内部类&#xff09;Lambda表达式 概念 语法形式&#xff1a; () -> {} 组成&#xff1a; 括号&#xff1a;表示参数列表&#xff1b;箭头&#xff1a;表示lambda…

UrlRewriter 伪url的配置

UrlRewriter 是微软封装好了的一个URL重写组件。使用它可以让我节约很多自已开发的时间。 好了&#xff0c;开始讲述我的应用经验&#xff0c;这只是很菜鸟的经验&#xff0c;高手就不用看了。 第一步&#xff0c;请从此下载此组件。解压&#xff0c;把UrlRewriter.dll copy到你…

网络地址和广播地址的快速计算方法

目录前提条件方法原理网络地址快速计算示例广播地址快速计算示例前提条件 由IP地址和子网掩码&#xff0c;快速计算网络地址和广播地址。 小窍门前提&#xff1a;当子网掩码组成只有255和0组成时。 方法原理 利用255&#xff08;或者0&#xff09;和其他数字的&&#xf…

职场提醒:面试失败n次以后

投了一份简历&#xff0c;是中国一个很有名的医药公司的职位。面试后对方回复说&#xff0c;我不符合他们的要求。之前也参加过很多公司面试&#xff0c;结果都是说我经验不足。一次次的失败也让我对自己有了新的认识&#xff0c;也不断的刺激我。发现一个工作经验不足的人&…