Чтобы нажатие кнопки что-то делало, надо сначала создать обработчик (объект) который отслеживает событие нажатия (слушает). В это обработчике пишем исполняемый код. Затем этот обработчик устанавливаем нужному объекту на форме с помощью соответствующего метода.
Все это делаем внутри метода onCreate класса Activity
Можно назначить один обработчик для нескольких кнопок. Чтобы различать какая кнопка нажата, внутри метода onClick добавим оператор условного перехода с проверкой id переданного на вход объекта. Использование одного обработчика экономит память. Чтобы экономия была максимальной, то можно использовать метод OnClickListener самого класса Activity. для этого в строке создания класса указывается "implements OnClickListener". В результате у объекта класса Activity переназначаем не только метод onCreate(), но и метод onClick. Чтобы этот механизм работал нужно будет добавить импорт соответствующих описаний классов.
Третий способ обработки события нажатия кнопки - это описать публичный метод внутри класса Activity и указать его в свойстве android:onClick.
Callback - асинхронная обработка результата выполнения какого-либо кода. Например показали диалоговое окно и надо, обработать результат выбора пользователя. Так как пользователь может думать очень долго, то обработку результата выбора надо запустить только после того, как пользователь сделал выбор.
Интерфейс - это своего рода набор правил, описывающие совокупность возможностей, предоставляемых классом.
В интерфейсе задается набор методов, которые должен реализовывать класс, содержащий интерфейс. Один интерфейс могут использовать сразу несколько классов, так же как и один класс может быть расширен несколькими интерфейсами (в этом случае класс должен содержать все методы всех интерфейсов). В этом случае интерфейсы указываются через запятую в объявлении класса.
Так как класс может наследовать несколько интерфейсов, то их использование дает возможность расширить возможности создаваемого класса. В отличие от интерфейса, простое наследование ограничивает создаваемый класс рамками только родительского класса.
Для указания того, что класс наследует интерфейс надо указать слово implements.
Например:
// интерфейс
interface Fruit {
void setName(String s);
}
//класс
class Apple implements Fruit {
String name;
public String getName() { // добавляем свой метод
return name;
}
public void setName(String s) { // описываем метод интерфейса
this.name = s;
}
public static void main(String[] args) {
Applemy1 = new Apple();
my1.setName("Apple");
System.out.println(my1.getName());
}
}
Можно объявить переменную с типом данных, являющимся наименованием интерфейса, например для примера ниже строку Apple my1 = new Apple(); заменим на Fruit my1 = new Apple();
В этом случае при вызове метода my1.getName() будет выведена ошибка, так как в интерфейсе Fruit нет такого метода.
Для компиляции и запуска приложений на Java используются файлы javac.exe и java.exe, которые находятся в подпапке bin, папки в которой установлен JDK (Java Development Kit) (Kit - это "комплекс").
Сначала надо скомпилировать файл java в файл с расширением class. Это делается с помощью команды javac.exe
Например:
javac Main.java
Результатом выполнения этой команды будет новый файл с именем Main.class.
Теперь этот класс можно запустить на выполнение с помощью команды java, например
java Main
.class при этом в командной строке не указывается.
Для того, чтобы выполнить команду с учетом параметров командной строки, надо создать конструктор для класса, в котором указать параметры. Если программа не делает элементарных вычислений, то часть параметры задают в виде массива строк, например:
public class Main {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
}
Объявить переменную нужного типа можно следующим образом:
int myNumber;
myNumber = 5;
Исключение является тип float:
float f = (float) 4.5;
Или:
float f = 4.5f
Для задания значения символа используются одинарные кавычки
char c = 'g';
String - это не примитив - это класс.
Создание строки с помощью конструктора
String s1 = new String("Who let the dogs out?");
С помощью двойных кавычек (" ").
String s2 = "Who who who who!";
Один класс может быть потомком супер класса, т.е. он содержит свойства и методы супер класса. При создании класса потомка (подкласса) указывается служебное слово extends и название класса, который он наследует.
В классе потомке может быть переопределен метод родительского класса. Переопределенный метод должен иметь тот же тип, что и в родительском классе. Это же ограничение распространяется на параметры метода.
Перед переопределяемым методом стоит аннотация @Override. Она не обязательна, но желательно ее указывать, для читабельности кода.
Нельзя переопределить методы final, private, static.
Имя класса должно совпадать с именем файла, т.е. класс Main должен находится в файле Main.java
Java - строго типизированный язык. Любая переменная должна быть объявлена перед ее применением. Пример объявления и заполнения:
Логические функции (используются в условных операциях и цикле):
|| - ИЛИ, && - И, == - равно, != - не равно
Методы
public - метод общедоступен
privavte - метод доступен только внутри класса
static - метод можно выполнить без создания экземпляра класса
void - метод не возвращает значение (аналог процедуры).
Если метод возвращает значение (аналог функции), то должен быть определен тип метода и в теле метода должен находиться оператор return, который возвращает значение того же типа, которое объявлено в методе.