Static использует меньше памяти, так как она существует только один раз для Classloader.
Чтобы статические методы могли сэкономить некоторое время, потому что вам не нужно сначала создавать объект, чтобы вы могли вызвать функцию.Вы можете / должны использовать статические методы, когда они в значительной степени стоят сами по себе (т.е. Math.abs (X) - на самом деле нет объекта, в котором нуждается функция.) По сути, это удобная вещь (по крайней мере, насколько я вижу -другие могут и не согласятся: P)
Статические поля действительно следует использовать с осторожностью.Есть довольно много шаблонов, которым нужны статические поля ... но сначала основы:
статическое поле существует только один раз.Так что если у вас есть простой класс (своего рода псевдокод):
class Simple {
static int a;
int b;
}
и теперь вы создаете объекты с:
Simple myA = new Simple();
Simple myB = new Simple();
myA.a = 1;
myA.b = 2;
myB.a = 3;
myB.b = 4;
System.out.println(myA.a + myA.b + myB.a + myB.b);
, вы получите 3234 - потому что, установив myB.a, вы на самом делеперезаписать myA.a также, потому что a является статическим.Он существует в одном месте в памяти.
Обычно вы хотите избежать этого, потому что могут произойти действительно странные вещи.Но если вы посмотрите на Google, например, Factory Pattern , вы увидите, что на самом деле есть довольно полезные варианты использования этого поведения.
Надеюсь, что это немного прояснится.