为什么我们没有在下面的程序中使用new
关键字?
import java.net.InetAddress;
public class InetDemo{
public static void main(String[] args){
try{
InetAddress ip=InetAddress.getByName("www.pinterest.com");
System.out.println("Host Name: "+ip.getHostName());
System.out.println("IP Address: "+ip.getHostAddress());
}catch(Exception e){System.out.println(e);}
}
}
Inet地址
是静态类吗?
嗯,从某种意义上说是的。所有顶级类都是隐式静态的。。。在这个意义上,它们不需要外部类的实例。
但你问的问题不对。静态类和静态方法是不同的概念
我们为什么不使用new
关键字呢?
现在。。。正确的问题
因为InetAddress。getByName(…)
是一个静态
方法调用,它创建并返回Inet4Address
或Inet6Address
的实例,这些实例是InetAddress
的子类型。
他们为什么这样做?
InetAddress
对象通常通过调用getByName
或表示主机名或字节数组的字符串上的相关方法来创建。这将为您提供IPv4或IPv6地址,或两者的混合(使用
getAll
方法)。由于结果的真实类型取决于实际的运行时参数,因此使用公共构造函数和new
不可能做到这一点。
正如@Turing85所指出的,这是工厂方法设计模式的一个示例。
查看InetAddress
的文档,我们发现这个类没有提供公共的可访问构造函数。它使用工厂方法模式。
问题内容: 为什么我们不能在非静态内部类中使用静态方法? 如果我将内部类设为静态,则它可以工作。为什么? 问题答案: 因为内部类的实例与外部类的实例隐式关联,所以它本身不能定义任何静态方法。由于静态嵌套类无法直接引用其封闭类中定义的实例变量或方法,因此只能通过对象引用使用它们,因此在静态嵌套类中声明静态方法是安全的。
问题内容: 我了解这代表调用方法的对象,并且静态方法未绑定到任何对象。但是在上述情况下,变量y也是静态的。 如果我们可以在类对象上调用静态方法,为什么不能允许静态方法设置类的静态变量。 此附加约束的目的是什么? 问题答案: 因为是指对象实例。静态方法的调用中没有对象实例。但是当然你可以访问你的静态字段(仅静态字段!)。只需使用 如果要确保获取的是静态字段,而不是某些具有相同名称的局部变量,请使用类
我们使用多线程的目的是并行计算,但这里我们使用synchronized关键字来允许一次使用一个线程。那么我们如何实现并行计算呢?如果可能,请提供一些相关的可理解编码示例。 N、 这段代码来自YouTube视频。
问题内容: 我目前正在与Sierra&Bates一起准备S(O)CJP。 关于内部类(局部或匿名方法),他们说我们无法访问局部变量,因为它们在类驻留在堆上时仍位于堆栈中,并且可以由方法返回,然后尝试访问这些变量由于该方法已结束,因此它们已在堆栈中,但已不存在… 众所周知,我们可以使用final关键字来绕开它。这就是他们在书中所说的,但是他们并没有真正解释final关键字的作用……据我所知,在方法局
问题内容: Java中的原始类型是什么?为什么我经常听到不应该在新代码中使用它们的信息? 如果我们不能使用原始类型,那有什么选择呢?有什么更好的选择? 问题答案: 什么是原始类型? Java语言规范对原始类型的定义如下: JLS 4.8原始类型 原始类型定义为以下之一: 通过采用通用类型声明的名称而没有随附的类型参数列表而形成的引用类型。 数组类型,其元素类型为原始类型。 未从的超类或超接口继承s
问题内容: 我正在解决这个问题,有没有一种方法可以覆盖Java中的类变量? 第36条反对意见是: 如果您看到,请运行。 谁能解释为什么皱眉呢? 问题答案: 这是一个风格上的问题,而不是直接的问题。这表明您没有正确考虑班上正在发生的事情。 考虑一下什么意思: 此变量存在于类级别,在每个实例 中并不单独存在,并且在扩展me的类中没有独立存在 。 考虑一下什么意思: 该变量可以在此类,同一包中的 类以及