throws
关键字
当一个方法中使用
throw
抛出一个非
RuntimeException
的异常时,就要在该方法上使用
throws
声明这个
异常的抛出。此时调用该方法的代码就必须处理这个异常,否则编译不通过。
package
exception
;
public class
Person
{
private
int
age
;
public
int
getAge
() {
return
age
;
}
public
void
setAge
(
int
age
)
throws
Exception
{
if
(
age
<
0
||
age
>
100
){
//
使用
throw
对外抛出一个异常
// throw new RuntimeException("
年龄不合法
!");
//
除了
RuntimeException
之外
,
抛出什么异常就要在方法上声明
throws
什么异常
throw new
Exception
(
"
年龄不合法
!"
);
}
this
.
age
=
age
;
}
}
当我们调用一个含有
throws
声明异常抛出的方法时,编译器要求我们必须处理这个异常,否则编译不通
过。 处理手段有两种
:
使用
try-catch
捕获并处理这个异常
在当前方法
(
本案例就是
main
方法
)
上继续使用
throws
声明该异常的抛出给调用者解决。 具体选取
那种取决于异常处理的责任问题。
当我们调用一个含有
throws
声明异常抛出的方法时
,
编译器要求
我们必须添加处理异常的手段
,
否则编译不通过
.
而处理手段有两种
1:
使用
try-catch
捕获并处理异常
2:
在当前方法上继续使用
throws
声明该异常的抛出
具体用哪种取决于异常处理的责任问题
注意,永远不应当在
main
方法上使用
throws!!
含有
throws
的方法被子类重写时的规则
java
网络编程
java.net.Socket
Socket(
套接字
)
封装了
TCP
协议的通讯细节,是的我们使用它可以与服务端建立网络链接,并通过 它获
取两个流
(
一个输入一个输出
)
,然后使用这两个流的读写操作完成与服务端的数据交互
java.net.ServerSocket
ServerSocket
运行在服务端,作用有两个
:
1:
向系统申请服务端口,客户端的
Socket
就是通过这个端口与服务端建立连接的。
2:
监听服务端口,一旦一个客户端通过该端口建立连接则会自动创建一个
Socket
,并通过该
Socket
与客
户端进行数据交互。
如果我们把
Socket
比喻为电话,那么
ServerSocket
相当于是某客服中心的总机。
与服务端建立连接案例
:
客户端与服务端完成第一次通讯
(
发送一行字符串
)
Socket
提供了两个重要的方法
:
OutputStream getOutputStream()
该方法会获取一个字节输出流,通过这个输出流写出的字节数据会通过网络发送给对方。
InputStream getInputStream()
通过该方法获取的字节输入流读取的是远端计算机发送过来的数据。
需要注意的几个点
:
1:
当客户端不再与服务端通讯时,需要调用
socket.close()
断开链接,此时会发送断开链接的信号给服务
端。这时服务端的
br.readLine()
方法会返回
null
,表示客户端断开了链接。
2:
当客户端链接后不输入信息发送给服务端时,服务端的
br.readLine()
方法是出于阻塞状态的,直到读
取了一行来自客户端发送的字符串。
多客户端链接
之前只有第一个连接的客户端可以与服务端说话。
原因
:
服务端只调用过一次
accept
方法,因此只有第一个客户端链接时服务端接受了链接并返回了
Socket,
此时
可以与其交互。
而第二个客户端建立链接时,由于服务端没有再次调用
accept
,因此无法与其交互。