我对Java相当陌生,但不是编程,我遇到了这个:
InetAddress localAddress = InetAddress.getLocalHost();
它看着我。我们声明localAddress
为类型InetAddress
,但它被分配了一个静态方法的实例InetAddress
?谁能帮我理解这一点?
我对Java相当陌生,但不是编程,我遇到了这个:
InetAddress localAddress = InetAddress.getLocalHost();
它看着我。我们声明localAddress
为类型InetAddress
,但它被分配了一个静态方法的实例InetAddress
?谁能帮我理解这一点?
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 对象。您也可以使用这三种方法中的任何一种进行实例化。我希望它能消除你的疑惑!
这是一个类比。你有一堂课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()
方法可以缓存点并返回以前创建的点,它总是可以返回相同的对象等)
java.net.InetAddress
是一个核心java类,用于定义网络中的地址。这个类有更多的静态方法来简化一些常见的操作。这些静态方法是基于工厂方法模式设计的。有关更多信息,您可以阅读维基百科中的工厂方法模式:
http://en.wikipedia.org/wiki/Factory_(object-oriented_programming)
此类表示 Internet 协议 (IP) 地址。InetAddress 的实例由 IP 地址和可能的相应主机名组成
当引用任何主机名或地址时,我们已经预定义了要在网络上执行的过程,因此使用静态方法。
有关更多信息和方法详细信息,请访问
http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html