我们可以在没有Java的对象的情况下调用非静态类的方法吗?

时间:2012-10-13 21:21:14

标签: java static wrapper

包装器类Integer具有静态方法parseInt(),其使用如下:

Integer.parseInt();

我认为只能像这样调用静态类的方法(即Class.doMethod())。所有非静态类都需要实例化对象才能使用它们的方法。

我检查了API,显然Integer被声明为public final Integer - 而非静态。

4 个答案:

答案 0 :(得分:7)

任何类都可以包含static和非静态方法。在任何类(包括您自己的类)上调用static方法时,需要实例化该类的实例,只需使用类名调用该方法:{{1} }。

事实上,即使以下情况也可行:

MyClass.methodName()

这是有效的,因为在调用Integer nullInt = null; nullInt.parseInt("5"); 方法时,只有引用的类类型很重要。但要考虑这种糟糕的风格:总是使用例如而是static

另请注意,无论如何都不能将顶级类声明为Integer.parseInt:只能将嵌套/内部类声明为静态。

答案 1 :(得分:2)

不,你错了。

只能像这样调用静态方法,但它们可能属于“非静态”类。

答案 2 :(得分:2)

在java中,可以从对象调用静态方法,但这只会生成警告并仍然编译。 非静态类可以具有由所有实例共享的静态字段和方法(这就是为什么"共享"在VB.NET中意味着静态)。因此,从对象访问静态成员可能会使读者感到困惑,必须避免使用。

答案 3 :(得分:0)

一种表达它的方式:Integer是一个具体的对象;你可以有很多Integer个。只有一个Integer.MAX_VALUE

也就是说,有些事情Integer是具体的,有些事情只需要存在一次,任何地方。