Метод статичен потому что иначе была бы неоднозначность: какого конструктора нужно вызвать? Особенно, если Ваш класс похож на это:
public class JavaClass{
protected JavaClass(int x){}
public void main(String[] args){
}
}
JVM должна звонить new JavaClass(int)
? Что это должно передать для x
?
В противном случае JVM должна инстанцировать JavaClass
, не выполняя метода конструктора? Я думаю, что это не было должно, потому что тот будет особый случай Ваш весь класс - иногда у Вас есть экземпляр, который не был инициализирован, и необходимо проверить на него в каждом методе, который можно было назвать.
существует только слишком много пограничных случаев и неоднозначностей для него, чтобы иметь смысл для JVM должным быть инстанцировать класса, прежде чем точку входа назовут. Вот почему main
статично.
я понятия не имею, почему main
всегда отмечается public
все же.
"Пример кода" не так прост, когда дело касается AlarmManager
.
Вот фрагмент, показывающий настройку AlarmManager
:
AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, OnAlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);
В этом примере я использую setRepeating ()
. Если вам нужен однократный сигнал тревоги, вы должны просто использовать set ()
. Убедитесь, что время срабатывания сигнала тревоги задано на той же временной основе, что и в начальном параметре set ()
. В моем примере выше я использую AlarmManager.ELAPSED_REALTIME_WAKEUP
, поэтому моя временная база составляет SystemClock.elapsedRealtime ()
.
Вот более крупный пример проекта , показывающий эту технику .