每当我们使用static时,我们都不需要创建类的引用变量。我们可以在<class_name>
但是当我们编写以下代码时:
class Abc
{
static void show()
{
System.out.println("Hey I am static");
}
}
class Test
{
public static void main(String args[])
{
Abc.show(); //1
new Abc().show(); //2
}
}
第1行和第1行如何? 2工作。什么是
的意义new Abc().show();
答案 0 :(得分:3)
使用实例(尽管它有效)是调用static
方法(或访问静态字段)的错误方式,因为static表示其成员类/类型 而不是实例。
因此,编译器将使用Class
类型替换实例(由于静态绑定)。换句话说,在运行时,ABC.show()
会被执行而不是new ABC().show()
。
但是,您的源代码仍然看起来令人困惑。因此,它被认为是一种不好的做法,甚至会导致像Eclipse这样的IDE发出警告。
答案 1 :(得分:0)
由于您的ABC类没有覆盖默认构造函数。
相当于:
class Abc{
public Abc(){super();}
static void show(){
System.out.println("Hey I am static");
}
}
因此,通过执行new Abc().show();
,您只需创建类的新Abc对象,并通过此对象调用ABC类的静态方法(它将显示警告,因为这不是正确的调用方法静态方法).`
答案 2 :(得分:0)
您可以使用实例中的静态方法,如new Abc().show()
中所示,但它可能会造成混淆,不推荐使用。
对于静态方法坚持className.staticMethod()
,否则坚持classInstance.instanceMethod()
。
答案 3 :(得分:0)
这很简单意味着您正在创建ABC对象,而不是尝试通过对象访问此变量。
但是,在编译时,
new Abc().show();
转换为Abc.show().
答案 4 :(得分:0)
静态关键字建议每个类只有一个副本,现在你已经创建了方法static并且正在使用Classname.methodname()以适当的方式访问,因为当类被加载到JVM时,它的实例将被创建,所以不需要显式地创建新的班级的对象。希望它有意义。