我对Java相当陌生,但不是编程,我遇到了这样的情况:
InetAddress localAddress = InetAddress.getLocalHost();在我看来。我们将localAddress声明为InetAddress类型,但它被分配为InetAddress静态方法的一个实例?有人能帮我理解这个吗?
发布于 2014-06-18 04:39:04
InetAddress类没有可见的constructors.To创建InetAddress对象,您必须使用可用的Factory Methods之一。
工厂方法仅仅是一种惯例,类中的静态方法返回该class.This的实例,而不是使用各种参数列表重载构造函数,而只有惟一的方法名才能使结果更加清楚!
这里显示了三种常用的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-18 04:47:21
这里有个类比。你有一个类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-18 04:45:14
java.net.InetAddress是一个核心java类,用于定义网络中的地址。这个类有更多的静态方法来简化一些常见的操作。这些静态方法是在工厂方法模式的基础上设计的。有关更多信息,您可以在wikipedia:programming)中阅读Factory方法模式
https://stackoverflow.com/questions/24277032
复制相似问题