0

如何让变量srcAdd1dstAdd1可以在外部使用if {}?变量srcAdd1并且dstAdd1只能在IPPacket.

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

3 回答 3

1

它是一个局部变量,仅限于 {} 范围。

来自JLS

块中局部变量声明的范围(第 14.2 节)是该声明出现的块的其余部分,从其自己的初始化程序(第 14.4 节)开始,并在局部变量声明语句的右侧包括任何进一步的声明符。

如果您希望它在范围之外可见,请考虑将其作为您班级中的一个字段。

于 2012-08-01T10:16:11.310 回答
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
}
于 2012-08-01T10:25:22.857 回答
0

1. 块内Declaring的变量,将限制其在该块内的范围。

2. Class 范围内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................

  }
}
于 2012-08-01T10:26:42.713 回答