主机做网站工具,网页网站作业制作,百度商标查询,建站宝盒设置目录我的学习过程我的心路历程思考总结我的学习过程 
昨天学习qiujuer老师的《Socket网络编程进阶与实战》实战课程中#xff0c;写了一个简易的client-server聊天项目。我的学习方法是根据课程的一部分思路提示后#xff0c;自己独自进行编写#xff0c;出现了很多问题写了一个简易的client-server聊天项目。我的学习方法是根据课程的一部分思路提示后自己独自进行编写出现了很多问题今天尝试着从源码找原因学习了不少知识。 
我的心路历程 
我是用到socket来写client-server信息传输功能socket包主要用到三个方法 
connect(SocketAddress):viodgetInputStream():InputStreamgetOutputStream():OutputStream 
在使用connect方法时我尝试new一个SocketAddress对象作为connect的参数。结果报错说 SocketAddress是抽象的不能被实例化。 
我的操作心路 我使用commandclick进入查看了SocketAddress发现它是一个抽象类是一个不可变对象。源码指示see Socket包参考思维中断。什么意思呢为什么要传一个抽象对象作为参数却又无法实例化 
我的操作心路 对比了课程中的写法发现课程使用的是InetSocketAddress。使用commandclick进入定位到了构造器 
//Java代码
public InetSocketAddress(InetAddress addr, int port) {holder  new InetSocketAddressHolder(null,addr  null ? InetAddress.anyLocalAddress() : addr,checkPort(port));}我一开始以为这是一个methed怎么可以new一个methed作为参数呢 
我的操作心路 我选中InetSocketAddress用commandfnF12调出所有method显示InetSocketAddress(InetAddress, int)前有个小m这应该也是方法好奇怪 
我的操作心路 我把源码往上拉发现InetSocketAddress(InetAddress, int)确实是InetSocketAddress的构造器。真是有点学晕了哈哈哈。那为什么传InetSocketAddress对象呢 
我的操作心路 我百度了一下SocketAddress类和InetSocketAddress类。我发现SocketAddress是抽象类InetSocketAddress是前者的唯一子类。是唯一子类吗 
我的操作心路 我选中SocketAddress使用controlH查看了SocketAddress的所有子类确实只有一个子类InetSocketAddress。进一步通过百度知道可以使用SocketAddress的默认构造器来使用子类来建立InetSocketAddress对象作为参数。原来突破点在借助默认构造器和非抽象子类。 
思考总结 
SocketAddress是一个抽象类它无法实例化。它只有一个子类InetSocketAddress。当一个抽象类需要“实例化”时若它具备非抽象的子类则可以通过抽象类的默认构造器来建立一个实例化的子类对象实现“实例化”。