如何从未在Java中实例化的类调用方法?

时间:2015-07-11 21:21:51

标签: java class

我想首先为糟糕的头衔道歉。我知道标题可以改进,但我不知道这个术语是否合适。欢迎提供标题帮助。

关于我的问题,我很好奇我是否可以从“朋友”中拨打方法。类。我不确定如何解释我的问题,所以我希望这段代码有所帮助。

public class Main {
  public static void main(String args[]) {

  int friends = 0;

  while(friends < 3) {
    new Friend().talk("Hello");
    friends ++;

    try {
      Thread.sleep(500);
    } catch(InterruptedException e) {
      e.printStackTrace();
    }

  }

  // How do I call the 'goodbye()' method from one of the 'Friend' classes?

  }
}

朋友班:

public class Friend {

  int talk = 0;

  public Friend() {
  }

  public void talk(final String word) {

    Thread speech = new Thread() {
      public void run() {

        while(talk < 5) {
          System.out.println(talk + ": " + word);

          try {
              Thread.sleep(1000);
           } catch (InterruptedException ie) {
               ie.printStackTrace();
           }

          talk ++;
        }

      }
    };

    speech.start();

  }

    public void goodbye() {
      talk = 5;
    }

}

如果我创建了类似于上面显示的类对象,请告诉我是否可以从类中调用方法。另外,如果有人能告诉我从我所展示的类中调用方法的正确术语,那将是一个巨大的帮助。提前谢谢!

4 个答案:

答案 0 :(得分:2)

main方法中,创建Friend

的实例
Friend f=new Friend();

然后调用它的方法

f.talk("Hello");
f.goodbye();
...

这样做你将指的是同一个对象。在你的情况下,这就是你得到的

public static void main(String args[]) {
    int friends = 0;
    Friend f = new Friend();
    while (friends < 3) {
        f.talk("Hello");
        friends++;
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    f.goodbye();
}

答案 1 :(得分:1)

您了解#ifdef DEBUG <debug code added here> #endif 字段和方法吗?可以在没有实例化的情况下调用它们。定义类似

的类
static

然后,在您的main方法中,您可以将其简单地称为

public class Friend {
    public static void sayHello() {
        System.out.println("Hello");
    }
}

这是在未在Java中实例化的类上调用方法的示例。进一步阅读 - Understanding Class Members

答案 2 :(得分:1)

如果静态不是您正在寻找的,我倾向于相信,因为您的评论及其在代码中的位置

  

如何从'Friend'类中调用'goodbye()'方法?

那么你的问题就是你真正在实例化对象的意义上的误导。在这个例子中,我创建了Friends并将它们存储在一个数组中。

public static void main(String args[]) {

    int count = 0;

    //you can store reference to Friend in an array
    Friend[] friends = new Friend[3];

    //in the loop, you make 3 new Friends
    while (count < 3) {
        friends[count] = new Friend();
        count++;
    }

    //Since they're instantiated and stored in the array, you can call their methods later
    friends[0].goodbye();
    //or
    friends[1].goodbye();
    //or
    friends[2].goodbye();
}

答案 3 :(得分:0)

在Java中创建对象的不同方法

  1. 使用新关键字
  2. 这是在Java中创建对象的最常用方法。

    Friend f = new Friend();
    f.talk("Hello");
    
    1. 使用Class.forName()
    2. Friend类有一个公共默认构造函数,因此您可以通过这种方式创建对象。

      Friend f = (Friend) Class.forName("Friend").newInstance(); 
      
      1. 使用clone()
      2. clone()可用于创建现有对象的副本。

        Friend anotherF = new Friend(); 
        Friend f= anotherF.clone(); 
        
        1. 使用对象反序列化
        2. 对象反序列化只不过是从序列化形式创建一个对象。

          ObjectInputStream inStream = new ObjectInputStream(anInputStream ); 
          Friend f= (Friend) inStream.readObject();
          

          您可以使用它们中的任何一个来创建对象,然后调用该方法。