Посчитайте, как часто статический метод вызывается в Java - PullRequest
2 голосов
/ 09 марта 2019

Я пытаюсь подсчитать, как часто вызывается статический метод, и не знаю, как это сделать, поскольку, насколько я знаю, я не могу использовать переменную экземпляра внутри статического метода.У меня есть следующий класс:

public class Utilities {

     // print how often method was called + specific Value of Object o
     public static void showObject (Object o) {
          System.out.println(counter + ": " + o.toString());
     }
}

Печать объектов-значений работает, но как я могу сделать счетчик?Так что результат для следующего кода должен выглядеть следующим образом:

    public static void main (String[] args){
    Object objectA = new Object ("Object A", 4);
    Object objectB = new Object ("Object B", 4);
    Object objectC = new Object ("Object C", 4);

    Utilities.showObject(objectB);
    Utilities.showObject(objectC);
    Utilities.showObject(objectC);
    Utilities.showObject(objectA);


1: 3.6
2: 8.0
3: 8.0
4: 9.2

Привет и спасибо, Патрик

Ответы [ 6 ]

1 голос
/ 09 марта 2019

Вы захотите создать статическую переменную вне статического метода:

private static int counter = 0;

Когда метод вызывается, увеличьте значение переменной:

public static void showObject(Object o){
    System.out.println(counter + ": " + o);
    counter++;
}
1 голос
/ 09 марта 2019

Вы можете использовать следующее:

private static final AtomicInteger callCount = new AtomicInteger(0);

и затем в вашем методе:

 public static void showObject (Object o) {
      System.out.println(callCount.incrementAndGet() + ": " + o.toString());
 }

Использование AtomicInteger делает счетчик потокобезопасным.

1 голос
/ 09 марта 2019

Насколько я знаю, я не могу использовать переменную экземпляра в статическом методе.

Верно, но поля также могут быть статическими.

class Utilities {

    private static int counter;

    public static void showObject (Object o) {
        System.out.println(++counter + ": " + o.toString());
    }

}
1 голос
/ 09 марта 2019

Добавьте статический счетчик к вашему классу:

public class Utilities {

     // counter where you can store info
     // how many times method was called
     private static int showObjectCounter = 0;

     public static void showObject (Object o) {
          // your code

          // increment counter (add "1" to current value")
          showObjectCounter++;
     }
}
1 голос
/ 09 марта 2019

Вы можете использовать статическую переменную для подсчета количества вызовов метода.

public class Utilities {

     private static int count;

     public static void showObject (Object o) {
          System.out.println(counter + ": " + o.toString());
          count++;
     }

     // method to retrieve the count
     public int getCount() {
         return count;
     }
}
0 голосов
/ 09 марта 2019
public class Utilities {
     static int counter = 0; // when the method is called counter++
     public static void main (String[] args) {
               showObject(null);
               showObject(null); //it is probably a very bad idea to use null but this is an example
               System.out.println(counter);
     }
     public static void showObject (Object o) {
          System.out.println(counter + ": " + o.toString());
          counter++; // method was called. Add one.
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...