java4个技巧:从继承和覆盖,到最终的类和方法
日复一日,我们编写的大多数Java只使用了该语言全套功能的一小部分。我们实例化的每个流以及我们在实例变量前面加上的每个@Autowired注解都足以完成我们的大部分目标。然而,有些时候,我们必须求助于语言中那些很少使用的部分:语言中为特定目的而隐藏的部分。
本文探索了四种技术,它们可以在绑定时使用,并将其引入到代码库中,以提高开发的易用性和可读性。并非所有这些技术都适用于所有情况,甚至大多数情况。例如,可能只是有一些方法,只会让自己协变返回类型或一些泛型类适合使用区间的泛型类型的模式,而其他人,如最终方法和类和try-with-resources块,将提高可读性和清洁度的大多数种代码基底的意图。无论哪种情况,重要的是不仅要知道这些技术的存在,还要知道何时明智地应用它们。
即使是最介绍性的Java操作手册也会包含关于继承、接口、抽象类和方法重写的内容,但是即使是高级的文本也很少会在重写方法时探索更复杂的可能性。例如,下面的代码片段即使是最初级的Java开发人员也不会感到惊讶:
这是多态性的基本概念:可以根据对象的接口(Animal::makeNoise)调用方法,但是方法调用的实际行为取决于实现类型(Dog::makeNoise)。例如,下面方法的输出会根据是否将Dog对象或Cat对象传递给该方法而改变:
虽然这是许多Java应用程序中常用的一种技术,但是在重写方法时可以采取一个不太为人所知的操作:更改返回类型。虽然这看起来是一种覆盖方法的开放方式,但是对于被覆盖方法的返回类型有一些严格的限制。根据Java 8 SE语言规范(第248页):
如果方法声明d 1返回类型为R 1覆盖或隐藏另一个方法d的声明 2返回类型为R 2,那么d 1是否可以用返回类型替换d 2,或者出现编译时错误。
返回类型替换表(同上,第240页)定义为
- 如果R1是空的,那么R2无效
- 如果R1那么原始类型是R吗2等于R1
- 如果R1是一种引用类型,则下列其中之一为真:R1适用于d的类型参数2是R的子类型吗2.R1可以转换为R的子类型吗2通过无节制的转换d1没有与d相同的签名吗2和R1R = |2|
可以说最有趣的案例是规则3.a。和3. b。:重写方法时,可以将返回类型的子类型声明为被重写的返回类型。例如:
虽然clone()的原始返回类型是Object,但是我们能够在克隆的车辆上调用getModel()(不需要显式的强制转换),因为我们已经将Vehicle::clone的返回类型重写为Vehicle。这消除了对混乱类型强制转换的需要,我们知道我们要寻找的返回类型是一个载体,即使它被声明为一个对象(这相当于基于先验信息的安全类型强制转换,但严格来说是不安全的):
注意,我们仍然可以将车辆类型声明为对象,而返回类型将恢复为对象的原始类型:
注意,对于泛型参数不能重载返回类型,但是对于泛型类可以重载。例如,如果基类或接口方法返回一个列表 ,则可以将子类的返回类型重写为ArrayList ,但不能将其重写为List 。
创建泛型类是创建一组以类似方式与组合对象交互的类的最佳方法。例如,一个列表 只是存储和检索类型为T的对象,而不了解它所包含元素的性质。在某些情况下,我们希望约束泛型类型参数(T)使其具有特定的特征。例如,给定以下接口
我们可能想创建一个特定的作家集合如下与复合模式:
我们现在可以遍历一个Writer树,不知道我们遇到的特定Writer是一个独立的Writer(一个叶子)还是一个Writer集合(一个组合)。如果我们还想让我们的组合作为读者和作者的组合呢?例如,如果我们有以下接口
如何将WriterComposite修改为ReaderWriterComposite?一种技术是创建一个新的接口ReaderWriter,将Reader和Writer接口融合在一起:
然后我们可以修改现有的WriterComposite如下:
虽然这确实实现了我们的目标,但是我们在代码中创建了膨胀:我们创建了一个接口,其惟一目的是将两个现有接口合并在一起。随着接口越来越多,我们可以开始看到膨胀的组合爆炸。例如,如果我们创建一个新的修饰符接口,我们现在需要创建ReaderModifier、WriterModifier和ReaderWriter接口。注意,这些接口没有添加任何功能:它们只是合并现有的接口。
为了消除这种膨胀,我们需要能够指定ReaderWriterComposite接受泛型类型参数(当且仅当它们既是读写器又是写器时)。交叉的泛型类型允许我们这样做。为了指定泛型类型参数必须实现读写接口,我们在泛型类型约束之间使用&操作符:
在不扩展继承树的情况下,我们现在可以约束泛型类型参数来实现多个接口。注意,如果其中一个接口是抽象类或具体类,则可以指定相同的约束。例如,如果我们将Writer接口更改为类似下面的抽象类。
我们仍然可以约束我们的泛型类型参数是读者和作家,但是作者(因为它是一个抽象类,而不是一个接口)必须首先指定(也请注意,我们现在ReaderWriterComposite扩展了写信人抽象类并实现了接口,而不是实现两个):
还需要注意的是,这种交互的泛型类型可以用于两个以上的接口(或一个抽象类和多个接口)。例如,如果我们想要我们的组合也包括修饰符接口,我们可以写我们的类定义如下:
尽管执行上述操作是合法的,但这可能是代码气味的一种标志(作为读取器、写入器和修饰符的对象可能是更具体的东西,比如文件)。
有关交互式泛型类型的更多信息,请参见Java 8语言规范。
创建资源类是一种常见的实践,但是维护资源的完整性可能是一个具有挑战性的前景,特别是在涉及异常处理时。例如,假设我们创建了一个资源类resource,并希望对该资源执行一个可能抛出异常的操作(实例化过程也可能抛出异常):
无论是哪种情况(如果抛出或不抛出异常),我们都希望关闭资源以确保没有资源泄漏。正常的过程是将我们的close()方法封装在finally块中,确保无论发生什么,我们的资源在封闭的执行范围完成之前是关闭的:
通过简单的检查,有很多样板代码会降低对资源对象执行someAction()的可读性。为了纠正这种情况,Java 7引入了try-with-resources语句,通过该语句可以在try语句中创建资源,并在保留try执行范围之前自动关闭资源。要使类能够使用try-with-resources,它必须实现AutoCloseable接口:
我们的资源类现在实现了AutoCloseable接口,我们可以清理我们的代码,以确保我们的资源是关闭之前离开的尝试执行范围:
与不使用资源进行尝试的技术相比,此过程要少得多,并且维护了相同的安全性(在完成try执行范围后,资源总是关闭的)。如果执行上述try-with-resources语句,则得到以下输出:
为了演示这种使用资源的尝试技术的安全性,我们可以更改someAction()方法来抛出一个异常:
如果我们再次运行try-with-resources语句,我们将得到以下输出:
注意,即使在执行someAction()方法时抛出了一个异常,我们的资源还是关闭了,然后捕获了异常。这确保在离开try执行范围之前,我们的资源被保证是关闭的。同样重要的是,资源可以实现close – able接口,并且仍然使用try-with-resources语句。实现AutoCloseable接口和Closeable接口之间的区别在于close()方法签名抛出的异常类型:exception和IOException。在我们的例子中,我们只是更改了close()方法的签名,以避免抛出异常。
在几乎所有的情况下,我们创建的类都可以由另一个开发人员扩展并定制以满足该开发人员的需求(我们可以扩展自己的类),即使我们并没有打算要扩展我们的类。虽然这对于大多数情况已经足够了,但是有时我们可能不希望覆盖某个方法,或者更一般地说,扩展某个类。例如,如果我们创建一个文件类,封装了文件系统上的文件的阅读和写作,我们可能不希望任何子类覆盖读(int字节)和写(字符串数据)方法(这些方法中的逻辑是否改变,它可能导致文件系统会损坏)。在这种情况下,我们将不可扩展的方法标记为final:
现在,如果另一个类希望覆盖读或写方法,则会抛出编译错误:无法覆盖文件中的最终方法。我们不仅记录了不应该重写我们的方法,而且编译器还确保了在编译时强制执行这个意图。
将这个想法扩展到整个类,有时我们可能不希望我们创建的类被扩展。这不仅使类的每个方法都不可扩展,而且还确保了类的任何子类型都不会被创建。例如,如果我们正在创建一个使用密钥生成器的安全框架,我们可能不希望任何外部开发人员扩展我们的密钥生成器并覆盖生成算法(自定义功能可能在密码方面较差并危及系统):
通过使我们的KeyGenerator类成为final,编译器将确保没有类可以扩展我们的类并将自己作为有效的密钥生成器传递给我们的框架。虽然简单地将generate()方法标记为final似乎就足够了,但这并不能阻止开发人员创建自定义密钥生成器并将其作为有效的生成器传递。由于我们的系统是面向安全的,所以最好尽可能地不信任外部世界(如果我们提供了KeyGenerator类中的其他方法,聪明的开发人员可能会通过更改它们的功能来更改生成算法)。
尽管这看起来是对开放/封闭原则的公然漠视(事实的确如此),但这样做是有充分理由的。正如我们在上面的安全性示例中所看到的,很多时候,我们无法允许外部世界对我们的应用程序做它想做的事情,我们必须在关于继承的决策中非常慎重。像Josh Bolch这样的作者甚至说,一个类应该被有意地设计成可扩展的,或者应该显式地对扩展关闭(有效的Java)。尽管他故意夸大了这个想法(参见记录继承或不允许继承),但他提出了一个很好的观点:我们应该仔细考虑哪些类应该扩展,哪些方法可以重写。
虽然我们编写的大多数代码只利用了Java的一小部分功能,但它足以解决我们遇到的大多数问题。有时候,我们需要更深入地研究语言,重新拾起那些被遗忘或未知的部分来解决特定的问题。其中一些技术,如协变返回类型和交互式泛型类型,可以在一次性的情况下使用,而其他技术,如自动关闭的资源和最终方法和类,可以而且应该更频繁地使用,以生成更具可读性和更精确的代码。将这些技术与日常编程实践相结合不仅有助于更好地理解我们的意图,而且有助于更好地编写更好的Java。
本文译自:Catalogic软件公司软件工程师Justin Albano的博客。
Java教程:常见的数据通信方式有哪些?
数据通信方式指通信双方在信号发送、传输和接收这3个环节对信号的处理方式,下面将对不同的信号处理方式进行讲解。
按信道上信号的传输方向与时间的关系,通信方式可分为单工通信、半双工通信与全双工通信。
单工通信指在任一时刻,信号只能由通信双方中的端发往另一端,在信道上单向传输。此种方式中信道两端节点的功能固定,发送方只能发送数据,不能接收数据;接收方只能接收数据不能发送数据,如下图所示。
管日半双工通信指通信双方均可进行数据发送与接收,但不能同时具备两种功能。在同一时刻,信号只能从一端发向另一端,若要改变信号传输方向,需进行线路切换,如下图所示。
全双工通信指通信双方在任何时刻均可发送和接收数据。全双工通信中使用两条信道,其中一条信道用于发送数据,一条信道用于接收数据,如下图所示。
按照传输信息时信息与所用信道数量的关系,可将通信方式分为串行通信与并行通信。
计算机中信息的最小单位是位(bit),若将待传送数据按位依次传输,则称使用串行方式进行通信,如下图所示。
使用传统方式进行通信时,收、发双方仅需建立一条信道, 成本低,结构简单,但其缺点是数据传输速率较低,此种通信方式一般应用于远程数据通信中。
并行通信指将数据分组后,以组为单位在多个并行信道上同时传输数据,组内的每位数据占用一条信道。计算机中的8位二进制代码表示一个字符,假设每次传输8个比特,则串行通信如下图所示。
并行通信方式传输效率高,但需要搭建多条信道,成本也随之增高,因此一般用于近距离高速通信中。
同步是通信中必须考虑的重要问题,同步问题要求收发双方在时间基准上保持定的相对关系,只有保持同步,收发双方的数据才能一致。计算机中实现同步的方式有异步通信和同步通信两种。
异步通信的原理是:在每个表示字符的二进制码段前添加一个起始位,表示字符二进制码的开始,在字符的二进制码段后添加一个或两个终止位,表示字符二进制码的结束;相应地接收方可根据起始位和终止位判断一个字符的二进制码段的开始和结束,从而实现数据的同步。如下图所示。
同步通信方式中不必为每个字符码添加起始位和终止位,而是在每次发送数据前,先发送一个同步字节,使双方建立同步关系,之后在同步关系下逐位发送/接收数据,到数据发送完毕再次发送同步字节终止通信。具体如下图所示。
异步通信将每个字符作为一个单位,为字符添加起始位和终止位,实现比较简单,但标志位所占比重较大,更适合低速通信;同步通信将待发送数据作为一个整体,附加位所占比重较小,适合高速通信。
网络常见的 9 大命令,非常实用
作者:小程老师 blog.sina.com.cn/s/blog_672b409101012vpo.html
ping 是个使用频率极高的实用程序,主要用于确定网络的连通性。这对确定网络是否正确连接,以及网络连接的状况十分有用。
简单的说,ping 就是一个测试程序,如果 ping 运行正确,大体上就可以排除网络访问层、网卡、Modem 的输入输出线路、电缆和路由器等存在的故障,从而缩小问题的范围。
ping 能够以毫秒为单位显示发送请求到返回应答之间的时间量。如果应答时间短,表示数据报不必通过太多的路由器或网络,连接速度比较快。ping 还能显示 TTL(Time To Live,生存时间)值,通过 TTL 值可以推算数据包通过了多少个路由器。
命令格式
- ping 主机名
- ping 域名
- ping IP 地址
如图所示,使用 ping 命令检查到 IP 地址 210.43.16.17 的计算机的连通性,该例为连接正常。共发送了四个测试数据包,正确接收到四个数据包。
ping 命令的基本应用
一般情况下,用户可以通过使用一系列 ping 命令来查找问题出在什么地方,或检验网络运行的情况。
下面就给出一个典型的检测次序及对应的可能故障:
① ping 127.0.0.1
如果测试成功,表明网卡、TCP/IP 协议的安装、IP 地址、子网掩码的设置正常。如果测试不成功,就表示 TCP/IP 的安装或设置存在有问题。
② ping 本机 IP 地址
如果测试不成功,则表示本地配置或安装存在问题,应当对网络设备和通讯介质进行测试、检查并排除。
③ ping 局域网内其他 IP
如果测试成功,表明本地网络中的网卡和载体运行正确。但如果收到 0 个回送应答,那么表示子网掩码不正确或网卡配置错误或电缆系统有问题。
④ ping 网关 IP
这个命令如果应答正确,表示局域网中的网关路由器正在运行并能够做出应答。
⑤ ping 远程 IP
如果收到正确应答,表示成功的使用了缺省网关。对于拨号上网用户则表示能够成功的访问 Internet(但不排除 ISP 的 DNS 会有问题)。
⑥ ping localhost
local host 是系统的网络保留名,它是 127.0.0.1 的别名,每台计算机都应该能够将该名字转换成该地址。否则,则表示主机文件(/Windows/host)中存在问题。
⑦ ping www.yahoo.com(一个著名网站域名)
对此域名执行 Ping 命令,计算机必须先将域名转换成 IP 地址,通常是通过 DNS 服务器。如果这里出现故障,则表示本机 DNS 服务器的 IP 地址配置不正确,或它所访问的 DNS 服务器有故障
如果上面所列出的所有 ping 命令都能正常运行,那么计算机进行本地和远程通信基本上就没有问题了。但是,这些命令的成功并不表示你所有的网络配置都没有问题,例如,某些子网掩码错误就可能无法用这些方法检测到。
ping 命令的常用参数选项
ping IP -t:连续对 IP 地址执行 ping 命令,直到被用户以 Ctrl+C 中断。
ping IP -l 2000:指定 ping 命令中的特定数据长度(此处为 2000 字节),而不是缺省的 32 字节。
ping IP -n 20:执行特定次数(此处是 20)的 ping 命令。
注意:随着防火墙功能在网络中的广泛使用,当你 ping 其他主机或其他主机 ping 你的主机时,而显示主机不可达的时候,不要草率地下结论。最好与对某台 “设置良好” 主机的 ping 结果进行对比。
ipconfig 实用程序可用于显示当前的 TCP/IP 配置的设置值。这些信息一般用来检验人工配置的 TCP/IP 设置是否正确。
而且,如果计算机和所在的局域网使用了动态主机配置协议 DHCP,使用 ipconfig 命令可以了解到你的计算机是否成功地租用到了一个 IP 地址,如果已经租用到,则可以了解它目前得到的是什么地址,包括 IP 地址、子网掩码和缺省网关等网络配置信息。
下面给出最常用的选项:
(1) ipconfig:当使用不带任何参数选项 ipconfig 命令时,显示每个已经配置了的接口的 IP 地址、子网掩码和缺省网关值。
(2) ipconfig /all:当使用 all 选项时,ipconfig 能为 DNS 和 WINS 服务器显示它已配置且所有使用的附加信息,并且能够显示内置于本地网卡中的物理地址(MAC)。如果 IP 地址是从 DHCP 服务器租用的,ipconfig 将显示 DHCP 服务器分配的 IP 地址和租用地址预计失效的日期。图为运行 ipconfig /all 命令的结果窗口。
(3) ipconfig /release 和 ipconfig /renew:这两个附加选项,只能在向 DHCP 服务器租用 IP 地址的计算机使用。如果输入 ipconfig /release,那么所有接口的租用 IP 地址便重新交付给 DHCP 服务器(归还 IP 地址)。
如果用户输入 ipconfig /renew,那么本地计算机便设法与 DHCP 服务器取得联系,并租用一个 IP 地址。大多数情况下网卡将被重新赋予和以前所赋予的相同的 IP 地址。
ARP 是 TCP/IP 协议族中的一个重要协议,用于确定对应 IP 地址的网卡物理地址。
使用 arp 命令,能够查看本地计算机或另一台计算机的 ARP 高速缓存中的当前内容。此外,使用 arp 命令可以人工方式设置静态的网卡物理地址 / IP 地址对,使用这种方式可以为缺省网关和本地服务器等常用主机进行本地静态配置,这有助于减少网络上的信息量。
按照缺省设置,ARP 高速缓存中的项目是动态的,每当向指定地点发送数据并且此时高速缓存中不存在当前项目时,ARP 便会自动添加该项目。
常用命令选项:
① arp –a:用于查看高速缓存中的所有项目。
② arp -a IP:如果有多个网卡,那么使用 arp -a 加上接口的 IP 地址,就可以只显示与该接口相关的 ARP 缓存项目。
③ arp -s IP 物理地址:向 ARP 高速缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。
④ arp -d IP:使用本命令能够人工删除一个静态项目。
掌握使用 traceroute 命令测量路由情况的技能,即用来显示数据包到达目的主机所经过的路径。
traceroute 命令的基本用法是,在命令提示符后键入 “tracert host_name” 或 “tracert ip_address”,其中,tracert 是 traceroute 在 Windows 操作系统上的称呼。
输出有 5 列:
第一列是描述路径的第 n 跳的数值,即沿着该路径的路由器序号;
第二列是第一次往返时延;
第三列是第二次往返时延;
第四列是第三次往返时延;
第五列是路由器的名字及其输入端口的 IP 地址。
如果源从任何给定的路由器接收到的报文少于 3 条(由于网络中的分组丢失),traceroute 在该路由器号码后面放一个星号,并报告到达那台路由器的少于 3 次的往返时间。
此外,tracert 命令还可以用来查看网络在连接站点时经过的步骤或采取哪种路线,如果是网络出现故障,就可以通过这条命令查看出现问题的位置。
思考【测试大型网络的路由】:
(1)多尝试几次 “ping www.sina.com.cn” 操作,比较得到的新浪网的 IP 地址。如果两次 ping 得到的 IP 地址不同,试考虑其中的原因(如考虑到负载均衡)。然后,针对这些不同的 IP 地址,执行 “tracert ip_address” 命令,观察分析输出的结果是否有差异。
(2)对于大型网络中的某站点进行 traceroute 测试,记录测试结果。观察其中是否出现第 n 跳的时延小于第 n-1 跳的时延情况。试分析其中原因(提示:可分别考虑时延的各个构成成分在总时延中所起的作用)。
(3)在一天的不同时段内,用 traceroute 程序多次测试从固定主机到远程固定 IP 地址的主机的路由。试分析比较测量数据,观察该路由是否有变化?如果有变化,该变化频繁吗?
大多数主机一般都是驻留在只连接一台路由器的网段上。由于只有一台路由器,因此不存在选择使用哪一台路由器将数据包发送到远程计算机上去的问题,该路由器的 IP 地址可作为该网段上所有计算机的缺省网关。
但是,当网络上拥有两个或多个路由器时,用户就不一定想只依赖缺省网关了。实际上可能想让某些远程 IP 地址通过某个特定的路由器来传递,而其他的远程 IP 则通过另一个路由器来传递。
在这种情况下,用户需要相应的路由信息,这些信息储存在路由表中,每个主机和每个路由器都配有自己独一无二的路由表。大多数路由器使用专门的路由协议来交换和动态更新路由器之间的路由表。但在有些情况下,必须人工将项目添加到路由器和主机上的路由表中。route 命令就是用来显示、人工添加和修改路由表项目的。该命令可使用如下选项:
(1)route print:本命令用于显示路由表中的当前项目,在单个路由器网段上的输出结果如图所示。
(2)route add:使用本命令,可以将路由项目添加给路由表。
例如,如果要设定一个到目的网络 209.99.32.33 的路由,其间要经过 5 个路由器网段,首先要经过本地网络上的一个路由器 IP 为 202.96.123.5,子网掩码为 255.255.255.224,那么用户应该输入以下命令:
route add 209.99.32.33 mask 255.255.255.224 202.96.123.5 metric 5
(3)route change:可以使用本命令来修改数据的传输路由,不过,用户不能使用本命令来改变数据的目的地。下面这个例子将上例路由改变采用一条包含 3 个网段的路径:
route add 209.99.32.33 mask 255.255.255.224 202.96.123.250 metric 3
(4)route delete: 使用本命令可以从路由表中删除路由。例如:route delete 209.99.32.33
命令 nslookup 的功能是查询任何一台机器的 IP 地址和其对应的域名。它通常需要一台域名服务器来提供域名。如果用户已经设置好域名服务器,就可以用这个命令查看不同主机的 IP 地址对应的域名。
(1)在本地机上使用 nslookup 命令查看本机的 IP 及域名服务器地址。
直接键入命令,系统返回本机的服务器名称(带域名的全称)和 IP 地址,并进入以 “>” 为提示符的操作命令行状态;键入 “?” 可查询详细命令参数;若要退出,需键入 exit。
(2)查看 www.haut.edu.cn 的 IP。在提示符后输入要查询的 IP 地址或域名并回车即可。
使用 nbtstat 命令可以查看计算机上网络配置的一些信息。使用这条命令还可以查找出别人计算机上一些私人信息。
如果想查看自己计算机上的网络信息,可以运行 nbtstat -n,可以得到你所在的工作组,计算机名以及网卡地址等等;想查看网络上其他的电脑情况,就,运行 nbtstat -a…,此处的…用 IP 地址代替就会返回得到那台主机上的一些信息。
学习使用 netstat 命令,以了解网络当前的状态。
netstat 命令能够显示活动的 TCP 连接、计算机侦听的端口、以太网统计信息、IP 路由表、IPv4 统计信息(对于 IP、ICMP、TCP 和 UDP 协议)以及 IPv6 统计信息(对于 IPv6、ICMPv6、通过 IPv6 的 TCP 以及 UDP 协议)。使用时如果不带参数,netstat 显示活动的 TCP 连接。
下面给出 netstat 的一些常用选项:
① netstat –a:-a 选项显示所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接。
② netstat –n:以点分十进制的形式列出 IP 地址,而不是象征性的主机名和网络名。
③ netstat -e:-e 选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据包的总字节数、错误数、删除数、数据包的数量和广播的数量。这些统计数据既有发送的数据包数量,也有接收的数据包数量。使用这个选项可以统计一些基本的网络流量。
④ netstat -r:-r 选项可以显示关于路由表的信息,类似于 route print 命令时看到的信息。除了显示有效路由外,还显示当前有效的连接。
上图显示的是一个路由表,其中:Network Destination 表示目的网络,0.0.0.0 表示不明网络,这是设置默认网关后系统自动产生的;127.0.0.0 表示本机网络地址,用于测试;224.0.0.0 表示组播地址;255.255.255.255 表示限制广播地址;Netmask 表示网络掩码,Gateway 表示网关,Interface 表示接口地址,Metric 表示路由跳数。
⑤ netstat -s:-s 选项能够按照各个协议分别显示其统计数据。这样就可以看到当前计算机在网络上存在哪些连接,以及数据包发送和接收的详细情况等等。如果应用程序(如 Web 浏览器)运行速度比较慢,或者不能显示 Web 页之类的数据,那么可以用本选项来查看一下所显示的信息。仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。
了解 Net 服务的功能,学会使用 Net 服务命令解决有关网络问题。
在命令行键入 net help command,可以在命令行获得 net 命令的语法帮助。例如,要得到关于 net accounts 命令的帮助信息,可键入 “net help accounts”。
所有 net 命令都可以使用 /y 和 /n 命令行选项。例如,net stop server 命令用于提示用户确认停止所有依赖的服务器服务,net stop server/y 表示确认停止并关闭服务器服务。
下表列出了基本的 NET 命令及它们的作用:
NET 命令可以在一个地方提供所有信息,并可以把结果重定向到打印机或一个标准的文本文件中。
许多服务所使用的网络命令都以 net 开头,这些 net 命令有一些公用属性。要看到所有可用的 net 命令的列表,可以在命令提示符窗口键入 net/? 得到。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。