黑马程序员技术交流社区

标题: while循环后面为什么不能继续加代码? [打印本页]

作者: 李建雄    时间: 2011-10-29 14:26
标题: while循环后面为什么不能继续加代码?
为什么while外,的ds.colse()会报错,,,
只要在DatagramSocket ds=new DatagramSocket(10000);语句后加
while(true){}后面的语句就出错,为什么?


public static void udpReceive() throws Exception{
               
                DatagramSocket ds=new DatagramSocket(10000);
               
                while(true){
                        byte[] buf=new byte[1024];
                        DatagramPacket dp=new DatagramPacket(buf,buf.length);
                       
                        ds.receive(dp);
                       
                        String ip=dp.getAddress().getHostAddress();
                        String data=new String(dp.getData(),0,dp.getLength());
                        int port=dp.getPort();
                       
                        System.out.println(ip+"::"+data+"::"+port);
                }
                //System.out.println("dd");
                //ds.close();

        }
作者: olkldksl    时间: 2011-10-29 14:52
这是我改完的代码,可以运行了

public static void udpReceive(){
        
        DatagramSocket ds = null;
                try {
                        ds = new DatagramSocket(10000);
                         while(true){
                byte[] buf=new byte[1024];
                DatagramPacket dp=new DatagramPacket(buf,buf.length);
               
                ds.receive(dp);
               
                String ip=dp.getAddress().getHostAddress();
                String data=new String(dp.getData(),0,dp.getLength());
                int port=dp.getPort();
               
                System.out.println(ip+"::"+data+"::"+port);
        }
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        finally{
               
          //System.out.println("dd");
          ds.close();
        
        }

我个人认为是因为放在while(ture)后面的代码没有机会执行,所以就提示你去掉,不知道对不对


作者: 孙运强    时间: 2011-10-29 15:02
因为while总是为true,总是在执行不可能执行到while语句块后面的语句,
你可以改变while终止的条件,就可执行while后面的语句。例
int i=0;
        while(i==5){
                        ++i;

作者: 肖居上    时间: 2011-10-29 15:02
你说的应该有点道理,while(true)是无限循环,只要不跳出就不执行下面的代码,你如果在循环体里面加个循环结束的条件就不会报错了,例如加上break,就不抱错了
作者: 黄健    时间: 2011-10-29 15:40
java在编译时会检查你的代码,发现代码//System.out.println("dd");//ds.close();前面是死循环,就提示这断代码“不可到达”,属于编译时错误,如果你非要死循环后再写代码,可以用下面代码欺骗一下java编译器:
public static void udpReceive() throws Exception{
   
    DatagramSocket ds=new DatagramSocket(10000);
    boolean flag = true;
    while(flag){//这里java编译器认为flag有可能为false,所以编译通过
            byte[] buf=new byte[1024];
            DatagramPacket dp=new DatagramPacket(buf,buf.length);
            
            ds.receive(dp);
            
            String ip=dp.getAddress().getHostAddress();
            String data=new String(dp.getData(),0,dp.getLength());
            int port=dp.getPort();
            
            System.out.println(ip+"::"+data+"::"+port);
    }
    System.out.println("dd");
    ds.close();
}

作者: 白倩    时间: 2011-10-29 16:05
想让它执行while(true){}后面的语句,只要把这段代码加一个
try{

}catch(Exception e){

}finally{
  System.out.println("dd");
    ds.close();

}
就行了,把最后想要执行的语句放到finally块里。
作者: 李建雄    时间: 2011-10-30 13:40
黄健 发表于 2011-10-29 15:40
java在编译时会检查你的代码,发现代码//System.out.println("dd");//ds.close();前面是死循环,就提示这断 ...

不错的方法.谢谢!
作者: 李建雄    时间: 2011-10-30 13:41
白倩 发表于 2011-10-29 16:05
想让它执行while(true){}后面的语句,只要把这段代码加一个
try{

实际开发中确实要加,try 语句 ,谢谢!!
作者: 李建雄    时间: 2011-10-30 13:42
olkldksl 发表于 2011-10-29 14:52
这是我改完的代码,可以运行了

public static void udpReceive(){

谢谢你的解释.很不错!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2