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 に答える