Я немного не понял, p1 — экземпляр класса Players, соответственно его метод .getCards() не статический, но в то же время он выполняет одно и то же действие у любого экземпляра этого класса (т.е. от экземпляра не зависит), а значит логично объявить его статическим.
Допустим, он у вас статический. Тогда логично хранить список игроков (экземпляров класса Players) внутри самого класса Players, запретить инстанс от него через new, сделав конструктор приватным и использовать для создания экземпляров статический метод getInstance(), при обращении к которому список игроков внутри класса Players обновлялся бы.
Далее у вас есть ваш метод Players.getCards(String[] cards), тоже статический. Нет никаких проблем в том, чтобы пробежаться по списку игроков в этом классе, и каждому дать кусок массива cards через System.arrayCopy(). Можете карты хранить в ArrayList, а не в массиве, из пока концепция программы не видна, чтобы говорить, что уместнее.