在Java中从main调用非静态方法的方法

时间:2014-07-04 14:01:26

标签: java methods static main

我们都知道我们不能直接从Java的静态main方法调用非静态方法。我写了两种方法从main调用非静态方法(如下所示)。

我想问的是:使用code 1code 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中没有对象被实例化,但是我能够调用非静态方法吗?

4 个答案:

答案 0 :(得分:1)

第二个使用第一个时需要考虑两件事。

  1. 您仍然会引用Demo对象,因此您可以致电demo.someOtheMethod()
  2. 只要printext()返回,您的演示对象就不会为垃圾收集做好准备。即,在你实际退出main()之前它不会准备就绪。在第二种情况下,只要printext()返回..
  3. 就会准备就绪

答案 1 :(得分:0)

唯一的区别是您可以在以后重用对象演示中的值。但是,您不应该仅为调用此类方法创建实例。正确的方法是使方法保持静态。

答案 2 :(得分:0)

执行代码或创建对象没有任何区别。

但是在第二种方法中,你没有对你创建的对象的引用。(在第一种方法中,demoDemo对象的引用)所以你可以&# 39;进一步对这个对象做任何其他事情,因为无法引用它。

例如: 假设您在类Demo中有另一个名为foo1()

的方法

在第一个示例中,您可以使用单个对象运行这两种方法。

    Demo demo = new Demo();
    demo.printText();
    demo.foo1(); 

但在第二种方法中,你必须单独使用2个对象。

new Demo().printText();
new Demo().foo1();

答案 3 :(得分:0)

在Code1中,您使用类名作为引用变量创建一个对象,并调用该函数,这将非常精细。 在code2中,您正在创建一个匿名对象,无论何时我们只想在类的生命周期中使用该对象一次,它就基本上被使用。

在这两个代码中,程序都能正常运行。