Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与java异常混淆 编辑:_Java_Exception - Fatal编程技术网

与java异常混淆 编辑:

与java异常混淆 编辑:,java,exception,Java,Exception,这个怎么样(套接字就是一个例子,它可以是其他类) 它可以抛出BindException,该异常可以是(例如getMessage()): 已在使用的地址:JVM\u Bind 无法分配请求的地址:JVM\u Bind 如果我必须以不同的方式对待[1]和[2],我如何才能抓住它们 例如: if [1] set somePort++ and retry else if [2] print cant use someIp to listen 原件: 也许我遗漏了什么,但是(例如): S

这个怎么样(套接字就是一个例子,它可以是其他类)

它可以抛出BindException,该异常可以是(例如getMessage()):

  • 已在使用的地址:JVM\u Bind
  • 无法分配请求的地址:JVM\u Bind
  • 如果我必须以不同的方式对待[1]和[2],我如何才能抓住它们

    例如:

    if [1] 
      set somePort++ and retry 
    else if [2] 
      print cant use someIp to listen
    

    原件: 也许我遗漏了什么,但是(例如):

  • ServerSocket.accept()
    可以抛出
    SocketException
    (和其他)
  • SocketException
    可以是不同的情况(即连接关闭、重置等)
  • 如果我必须根据具体的错误做不同的事情,这样做正确吗

    catch (SocketException e)
    {
        if (e.getMessage().equals("this"))
        {
            doStuff();
        }
        else if (e.getMessage().equals("that"))
        {
            eatPotatoes();
        }
    }   
    
    accept()可以抛出SocketException(和其他)

    以下是该方法可能引发的唯一异常:

    IOException
    -如果在等待连接时发生I/O错误

    SecurityException
    -如果安全管理器存在并且其
    checkAccept
    方法不允许该操作

    SocketTimeoutException
    -如果先前使用
    setSoTimeout
    设置了超时,并且已达到超时

    IllegalBlockingModeException
    -如果此套接字具有关联的通道,则该通道处于非阻塞模式,并且没有准备接受的连接

    如果我必须根据具体的错误做不同的事情,是吗 这样做正确吗

    不,您不应该继续使用您的方法,因为这不是一个好的实践,您宁愿使用单独的catch语句来处理不同类型的异常

  • ServerSocket.accept()
    可以抛出
    SocketException
    (和其他)
  • 不,它可以抛出
    IOException
    或任何子类

  • SocketException
    可以是不同的情况(即连接关闭、重置等)
  • 不,它不能是
    ServerSocket.accept()
    中的任何一个。只有设置超时、SocketException:socket closed或TCP协议错误时,它才可能是
    SocketTimeoutException


    处理任何异常的子类(在本例中为
    IOException
    )的正确方法是单独捕获它们(如果要单独处理它们)。但是,在
    accept()
    的情况下,除了
    SocketTimeoutException
    之外的所有异常都是致命的,因此您所能做的就是关闭
    ServerSocket
    并退出accept循环。因此,您只需要两个
    catch
    语句:一个用于
    SocketTimeoutException
    ,另一个用于
    IOException
    ,如果我猜是真的话。您需要子类SocketException。它同样是:

    }catch(SocketException e){
            if(e instanceof BindException){
    
            }else if(e instanceof ConnectException){
    
            }else if(e instanceof ConnectionResetException){
    
            }else if(e instanceof NoRouteToHostException){
    
            }else if(e instanceof PortUnreachableException){
    
            }else{
    
            }
        }
    

    希望能帮助你

    依赖消息内容是危险的。SocketException确实有子类。在这些情况下,您可以单独捕获它们,或者在(例如ConnectException的instanceof)…重新编辑时执行。从根本上说,“无法分配请求的地址”是由于使用无效或非本地IP地址而导致的编程错误。因此,一旦清除了编程错误,它就不应该在运行时发生。为什么要使用instanceof而不是捕获类型?它还可以抛出
    IOException
    的子类,而
    BindException
    只是其中之一。你应该使用单独的
    catch
    块来代替这种暴行,但真正的问题是,
    ServerSocket.accept()
    不会抛出任何
    ConnectException
    bindeexception
    noroutetohestexception
    portunreachableeexception
    。后者确实仅适用于UDP。
    }catch(SocketException e){
            if(e instanceof BindException){
    
            }else if(e instanceof ConnectException){
    
            }else if(e instanceof ConnectionResetException){
    
            }else if(e instanceof NoRouteToHostException){
    
            }else if(e instanceof PortUnreachableException){
    
            }else{
    
            }
        }