黑马程序员技术交流社区
标题:
关于多线程中RuntimeException的问题
[打印本页]
作者:
李晓旭
时间:
2012-4-9 00:55
标题:
关于多线程中RuntimeException的问题
第一遍抛出RuntimeException,编译可以通过
class Send implements Runnable
{
private DatagramSocket ds;
public Send(DatagramSocket ds)
{
this.ds = ds;
}
public void run()
{
BufferedReader bufr;
try
{
bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = bufr.readLine())!=null)
{
if("886".equals(line))
break;
byte[] buf = line.getBytes();
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.5"),10002);
ds.send(dp);
}
}
catch (Exception ioe)
{
throw new RuntimeException("send fail"); //这个地方如果是抛出不是Runtime
}
}
}
第二遍抛出非RuntimeException,程序出现矛盾,不知如何解决,编译不能通过
class Send implements Runnable
{
private DatagramSocket ds;
public Send(DatagramSocket ds)
{
this.ds = ds;
}
public void run() throws Exception //因为程序内捕获到异常,在此处抛出,但是又因为这个方法是重写,run()并没有异常抛出,所以不能在此添加throws代码
//这里就出现了问题,是说这个run()方法只可能抛出RuntimeExcepton,还是需要对其他异常进行什么处理
{
BufferedReader bufr;
try
{
bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = bufr.readLine())!=null)
{
if("886".equals(line))
break;
byte[] buf = line.getBytes();
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.5"),10002);
ds.send(dp);
}
}
catch (Exception ioe)
{
throw new Exception("send fail"); //这个地方我假设抛出非RuntimeException,可以不可以呢?
}
}
}
错误提示:
ChatDemo.java:12: 错误: Send中的run()无法实现Runnable中的run()
public void run() throws Exception
^
被覆盖的方法未抛出Exception
复制代码
这是我一个程序中的一部分代码,我想知道如果被覆盖的方法没有抛出异常,我的重写方法是抛出RuntimeException,或者对异常进行处理,这两种思路么?
作者:
申振华
时间:
2012-4-9 01:10
public void run() throws Exception 你这里抛除了异常
catch (Exception ioe)
{
throw new Exception("send fail"); //这个地方我假设抛出非RuntimeException,可以不可以呢?
}
而在这个方法体中你又捕捉了异常并处理异常。
你到到底抛异常和要捕捉异常呢
作者:
李晓旭
时间:
2012-4-9 01:15
申振华 发表于 2012-4-9 01:10
public void run() throws Exception 你这里抛除了异常
不是这样的,如果你在某个方法中抛出了非RuntimeException,那么你就得在方法名后面添加"throws 这个异常"
这是固定书写格式......
因为我可能想在这个方法外处理这个异常。。。
当然,我能理解的是多线程run()外面是不能捕获到这个异常的,是不是这个原因所以原始run()方法中并没有throws Exception
但是RuntimeException是特殊的,不用throws
作者:
贠(yun)靖
时间:
2012-4-9 01:39
第一个你是捕获异常了 而你的写法是把异常捕获到 然后再抛出去 这样语法是没有错的
但一般不这么写 要么你捕获异常 要么抛 而在catch里面 抛异常的话 一般是抛新的异常 也就是你该类中出现新的问题异常 抛给调用者
而你在catch中抛的是Runtime异常 就不用再run方法上声明异常 编译是不会出错的
第二个 写法就是抛异常了 接口中没有抛异常 子类是不能抛异常的 所以语法错误
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2