2012-08-01 116 views
0

如何讓變量srcAdd1dstAdd1也可以在if {}之外使用?變量srcAdd1dstAdd1只能在IPPacket中聲明。Java中的變量範圍

packet1 = jpcap.getPacket(); 

if (packet1 instanceof IPPacket) { 
    IPPacket ipp1 = (IPPacket)packet1; 
    InetAddress srcAdd1 = ipp1.src_ip; 
    InetAddress dstAdd1 = ipp1.dst_ip; 

    if (ipp1 instanceof TCPPacket) { 
    TCPPacket tcp1 = (TCPPacket)ipp1; 
    int dstPort1 = tcp1.dst_port; 

    if (dstPort1 == 135) { 
     System.out.println(srcAdd1 +" "+ dstAdd1 +" "+ dstPort1); 
    } 
    } 
} 
+4

ERR,聲明它們在外側範圍?這實際上不是一個網絡問題,更不用說JPcap問題了,只是一個非常基礎的初學者級的Java編程問題。 – EJP 2012-08-01 10:12:56

回答

1

它是一個局部變量,僅限於{}範圍。

JLS

局部變量聲明的塊中的範圍(§14.2)是 其餘在其中出現的聲明,以開始其自己的 初始化該塊的(§14.4)並在局部變量聲明語句中包含 右側的任何其他聲明。

如果您希望它在範圍之外可見,請考慮將它作爲班級中的一個字段。

1
packet1 = jpcap.getPacket(); 
InetAddress srcAdd1 = null; 
InetAddress dstAdd1 = null; 

if (packet1 instanceof IPPacket) { 
    IPPacket ipp1 = (IPPacket)packet1; 
    srcAdd1 = ipp1.src_ip; 
    dstAdd1 = ipp1.dst_ip; 

    if (ipp1 instanceof TCPPacket) { 
    TCPPacket tcp1 = (TCPPacket)ipp1; 
    int dstPort1 = tcp1.dst_port; 

    if (dstPort1 == 135) { 
     System.out.println(srcAdd1 +" "+ dstAdd1 +" "+ dstPort1); 
    } 
    } 
} 

// later 

// this condition is true only if packet1 is an instance of IPPacket 
if(srcAdd1 != null && dstAdd1 != null) { 
    // do stuff with srcAdd1 and dstAdd1 
} 
0

1.Declaring可變內,將限制其在該塊內的範圍。

2.Declaring類範圍內的可變,將具有無障礙整個類。

3.類範圍聲明srcAdd1,和dstAdd1

實施例:

public class Test{ 
    InetAddress srcAdd1; 
    InetAddress dstAdd1; 

public void go(){ 

    // Your code................ 

    srcAdd1 = ipp1.src_ip; 
    dstAdd1 = ipp1.dst_ip; 

// Your code................ 

    } 
}