黑马程序员技术交流社区

标题: 有关IP输出的疑惑 [打印本页]

作者: 燕国庆    时间: 2012-11-27 09:41
标题: 有关IP输出的疑惑
本帖最后由 燕国庆 于 2012-11-27 12:24 编辑

import java.net.*;
class IpDemo
{   
  static InetAddress[]ia;

public static void main(String[] args) throws Exception
{  /*
  InetAddress i=InetAddress.getLocalHost();
  System.out.println(i.toString());
  System.out.println(i.getHostAddress());
  System.out.println(i.getHostName());
  */
  InetAddress[]ia=InetAddress.getAllByName("www.baidu.com");
  getIp(ia.length);
  
}
public static void getIp(int len)
{
  for (int x=0;x<len;x++)
  {
   System.out.println("百度:————"+ia[x].toString());
  }
}
}
为什么不能讲数组里的若干个百度主机的IP地址输出那,编译能通过可是在执行的时候就会出现下面的错误 (此时要求你的电脑是连接网络的情况否则是不能获取到百度IP的)

QQ截图20121127093427.png (2.13 KB, 下载次数: 13)

QQ截图20121127093427.png

作者: 王晓州    时间: 2012-11-27 12:13
本帖最后由 werewolf 于 2012-11-27 12:18 编辑

InetAddress[]ia=InetAddress.getAllByName("www.baidu.com");
此句有问题,此句相当于又重新定义了一个InetAddress[]类型的变量,变量名为ia,
而此ia为main方法中的局部变量,只在main方法中有效;
getIP()中使用的ia为全局静态变量ia,初始值为null。
因此编译通过,而运行时,调用ia[x].toString()时报空指针异常

将此句直接改为  ia = InetAddress.getAllByName("www.baidu.com");   即可。

作者: 郑传庆    时间: 2012-11-27 12:21
IP的查询应该是拿着“www.baidu.com”到你的本机去查找是否有相对应的IP,如果有,就可以取到,如果没有才会到网络上查找百度的IP。你可以在host文件里面添加百度的映射ip,这样应该不会报错。你可以试下。若说错了,还希望指正,谢谢!
作者: 燕国庆    时间: 2012-11-27 12:23
werewolf 发表于 2012-11-27 12:13
InetAddress[]ia=InetAddress.getAllByName("www.baidu.com");
此句有问题,此句相当于又重新定义了一个In ...

哦,是有问题,谢谢
作者: 王晓州    时间: 2012-11-27 12:30
  1. class Demo         
  2. {
  3.          static InetAddress[]ia;

  4.          public static void main(String[] args) throws Exception
  5.          {  /*
  6.            InetAddress i=InetAddress.getLocalHost();
  7.            System.out.println(i.toString());
  8.            System.out.println(i.getHostAddress());
  9.            System.out.println(i.getHostName());
  10.            */
  11.            ia=InetAddress.getAllByName("www.baidu.com");
  12.            getIp(ia);
  13.           
  14.          }
  15.          public static void getIp(InetAddress[] arr)
  16.          {
  17.            for (int x=0;x<arr.length;x++)
  18.            {
  19.             System.out.println("百度IP:"+ia[x].toString());
  20.            }
  21.          }
  22. }
复制代码
我觉得你改成这样更好一点

作者: 燕国庆    时间: 2012-11-27 22:40
werewolf 发表于 2012-11-27 12:30
我觉得你改成这样更好一点

哈哈哈是的,改过来了,有的时候有点小毛病怎么都看不出来,当别人一提醒就恍然大悟了,谢谢大家的帮忙,谢谢你们了!!!!




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