我们都知道我们不能直接从Java的静态main方法调用非静态方法。我写了两种方法从main调用非静态方法(如下所示)。
我想问的是:使用code 1
和code 2
来克服限制是否有任何显着差异?
代码1
public class Demo
{
public static void main(String[] args)
{
Demo demo = new Demo();
demo.printText();
}
public void printText()
{
System.out.println("Method successfully called.");
}
}
代码2
public class Demo
{
public static void main(String[] args)
{
new Demo().printText();
}
public void printText()
{
System.out.println("Method successfully called.");
}
}
注意:在学校,我们的教授告诉我们“在Java中,类的静态方法可以通过定义它们的类的名称来调用,而不必实例化一个对象。先上课。“
但是在code 2
中没有对象被实例化,但是我能够调用非静态方法吗?
答案 0 :(得分:1)
第二个使用第一个时需要考虑两件事。
Demo
对象,因此您可以致电demo.someOtheMethod()
。printext()
返回,您的演示对象就不会为垃圾收集做好准备。即,在你实际退出main()
之前它不会准备就绪。在第二种情况下,只要printext()
返回.. 答案 1 :(得分:0)
唯一的区别是您可以在以后重用对象演示中的值。但是,您不应该仅为调用此类方法创建实例。正确的方法是使方法保持静态。
答案 2 :(得分:0)
执行代码或创建对象没有任何区别。
但是在第二种方法中,你没有对你创建的对象的引用。(在第一种方法中,demo
是Demo
对象的引用)所以你可以&# 39;进一步对这个对象做任何其他事情,因为无法引用它。
例如:
假设您在类Demo中有另一个名为foo1()
在第一个示例中,您可以使用单个对象运行这两种方法。
Demo demo = new Demo();
demo.printText();
demo.foo1();
但在第二种方法中,你必须单独使用2个对象。
new Demo().printText();
new Demo().foo1();
答案 3 :(得分:0)
在Code1中,您使用类名作为引用变量创建一个对象,并调用该函数,这将非常精细。 在code2中,您正在创建一个匿名对象,无论何时我们只想在类的生命周期中使用该对象一次,它就基本上被使用。
在这两个代码中,程序都能正常运行。