INetAddress直接实例化

3

虽然我不是Java专家,但我有编程经验,最近遇到了这个问题:

InetAddress localAddress = InetAddress.getLocalHost();

我觉得它看起来有点不对劲。我们将localAddress声明为类型InetAddress,但它被分配给InetAddress的一个静态方法的实例?有谁能帮助我理解这个问题吗?


5
在网上搜索"工厂方法(Factory Methods)"。 - Am_I_Helpful
我是新来的... 我可以问一下怎么做吗? - user3743473
4个回答

3

InetAddress类没有可见的构造函数。要创建InetAddress对象,您必须使用其中一个可用的工厂方法

工厂方法仅仅是一个约定,即在类中的静态方法返回该类的实例。这是为了代替将构造函数重载为不同参数列表,当使用独特的方法名使结果更加清晰时使用!

这里展示了三个常用的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...
< p > getLocalHost() 方法仅返回表示本地主机的 InetAddress 对象。此外,您可以使用三种方法之一进行实例化。希望这能够解决您的疑惑!


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()方法可以缓存点并返回先前创建的点,它也可以始终返回相同的对象等)。


如果您想在实例化时设置类的变量,例如构造函数的行为,该如何实现? - user3743473
是的。你可以像这样编写代码:getOrigin(int x, int y) 返回 new Point(x, y) - helderdarocha

2

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


0

这个类代表了一个Internet协议(IP)地址。InetAddress的一个实例由一个IP地址和可能对应的主机名组成。

静态方法被用于当任何主机名或地址被引用时,我们有预定义的过程要执行网络操作。

欲了解更多信息和方法细节,请访问。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接