3

我对Java相当陌生,但不是编程,我遇到了这个:

InetAddress localAddress = InetAddress.getLocalHost();

它看着我。我们声明localAddress为类型InetAddress,但它被分配了一个静态方法的实例InetAddress?谁能帮我理解这一点?

4

4 回答 4

3

InetAddress 类没有可见的构造函数。要创建 InetAddress 对象,您必须使用可用的Factory Methods.

工厂方法只是一种约定,类中的静态方法返回该类的实例。当具有唯一的方法名称使结果更加清晰时,这是代替使用各种参数列表重载构造函数来完成的!

这里展示了三种常用的 InetAddress 工厂方法:-

static InetAddress getLocalHost() throws UnknownHostException
static InetAddress getByName(String hostName) throws UnknownHostException
static InetAddress[] getAllByName(String hostName) throws UnknownHostException

// Contents taken from Java---The Complete Reference by Herbert Schildt...

getLocalHost()方法只返回代表本地主机的 InetAddress 对象。您也可以使用这三种方法中的任何一种进行实例化。我希望它能消除你的疑惑!

于 2014-06-18T04:39:04.960 回答
3

这是一个类比。你有一堂课Point

public class Point {
    int x, y;

    private Point() {}

    public static Point getOrigin() {
        return new Point();
    }
}

它有一个getOrigin()返回新Point对象的静态方法。此表达式类似于您的InetAddress示例:

Point p = Point.getOrigin();

这是许多 Java 应用程序和 API 中非常常见的模式。它还允许您控制创建的实例(该getOrigin()方法可以缓存点并返回以前创建的点,它总是可以返回相同的对象等)

于 2014-06-18T04:47:21.083 回答
2

java.net.InetAddress是一个核心java类,用于定义网络中的地址。这个类有更多的静态方法来简化一些常见的操作。这些静态方法是基于工厂方法模式设计的。有关更多信息,您可以阅读维基百科中的工厂方法模式: http://en.wikipedia.org/wiki/Factory_(object-oriented_programming)

于 2014-06-18T04:45:14.460 回答
0

此类表示 Internet 协议 (IP) 地址。InetAddress 的实例由 IP 地址和可能的相应主机名组成

当引用任何主机名或地址时,我们已经预定义了要在网络上执行的过程,因此使用静态方法。

有关更多信息和方法详细信息,请访问

http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html

于 2014-06-18T04:53:34.317 回答