我对Java很新,但没有编程,我碰到了这个:
InetAddress localAddress = InetAddress.getLocalHost();
它向我看了一眼。我们将localAddress
声明为类型InetAddress
,但是它被分配了一个静态方法InetAddress
的实例?任何人都可以帮我理解这个吗?
答案 0 :(得分:3)
InetAddress类没有可见的构造函数。要创建一个InetAddress对象,您必须使用一个可用的Factory Methods
。
工厂方法仅仅是一种静态方法的惯例 class返回该类的实例。这是代替 拥有时使用各种参数列表重载构造函数 独特的方法名称使结果更加清晰!
此处显示了三种常用的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对象。
您也可以使用三种方法中的任何一种进行实例化。我希望它能清除你的怀疑!
答案 1 :(得分: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()
方法可以缓存点并返回先前创建的点,它总是可以返回相同的对象等。)
答案 2 :(得分:2)
java.net.InetAddress
是一个核心java类,用于网络中的定义地址。此类具有更多静态方法,可简化一些常见操作。这些静态方法是基于工厂方法模式设计的。有关更多信息,您可以阅读维基百科中的工厂方法模式:
http://en.wikipedia.org/wiki/Factory_(object-oriented_programming)
答案 3 :(得分:0)
此类表示Internet协议(IP)地址。 InetAddress的实例由IP地址和可能的相应主机名
组成使用静态方法,因为当引用任何主机名或地址时,我们有通过网络执行的预定义过程。
了解更多信息和方法详情,请访问
http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html