Виртуальная машина Java (компиляция в байт-код) • Мощный, удобный, читаемый • Автоматический сборщик мусора • Разработан в Sun Microsystems в начале 1990-х
распределенный • надежный • безопасный • не зависит от архитектуры компьютера • переносимый • интерпретируемый • многопоточный • динамичный из руководства от авторов Java - http://java.sun.com/docs/white/langenv/
javaportal насчитали 56 • Eclipse, Netbeans, IntelliJ IDEA - хорошие Java IDE • Во всех можно разрабатывать под Android • Наш выбор Eclipse Juno (сборка For Mobile Developers) • http://www.eclipse.org/downloads/
функцию вне класса • Нет перегрузки операторов • Нет множественного наследования классов • Авторы Java взяли за основу C/C++, стараясь сделать язык более простым
short, long, byte, double, float, char, boolean • Составные типы: классы • Диапазоны целочисленных типов не зависят от конкретной машины //пример простых типов int i = 1; long l = 2L; float f = 3.14F; double d = 3.14; boolean b = true; char c = 'a';
Переменная должна быть инициализирована перед использованием • Для явной инициализации переменной составного типа (объекта) нужно использовать оператор new • Переменные составного типа являются ссылками • Пустая ссылка обозначается null
всегда приводит к потери информации • Приведение простых типов: double x = 9.99; int nx = (int)x; //nx = 9 A a = new A(); B b = (B)a; • Приведение составных типов:
и скрытой внутренней реализацией • Класс - шаблон, по которому будет сделан объект • Конструирование объекта - создание экземпляра класса • Состояние объекта меняется путем вызова его методов
пакетами • Стандартная библиотека Java содержит большое количество пакетов java.lang, java.util, java.net и т.д. • Пакеты используются для организации классов и обеспечения уникальности имен классов • Ключевое слово import позволяет работать с классом без указания имени пакета java.util.Date today = new java.util.Date(); import java.util.Date; Date today = new Date();
инициализации экземпляра класса (объекта) public class Team{ private String name; public Team(String name){ this.name = name; } } ... Team t1; System.out.println(t1); //ошибка! не инициализир. переменная Team t2 = new Team("Авангард"); System.out.println(t2); //ок!
class Team{ ... //поля класса Team private String name; private int total; private int win; } public class Team{ //методы класса Team public String getName(){ return name; } public void winGame(){ ++win; ++total; } ... } • Методы — действия над объектом
... private final String name; private final City city; } • Значение неизменяемой переменной должно быть установлено при инициализации объекта • Значение неизменяемой переменной изменить нельзя, но можно изменить внутреннее состояние объекта
class Math{ ... public static final double PI = 3.14; public static double sin(double x){ ... }; } • Объявленные таким образом поля или методы принадлежат не конкретному объекту, а классу в целом • Для вызова статического метода не нужно создавать экземпляр класса double x = Math.sin(Math.PI * alpha);
значению! public class Team{ public void addPlayer(Player p){ ... } } ... team.addPlayer(new Player("Ягр")); • Неявный параметр - объект класса Team Доступ к нему внутри метода через this • Явный параметр - объект класса Player Доступ к нему внутри метода через переменную p
подкласса можно использовать вместо любого объекта суперкласса • Программист -> Работник, Велосипед -> Транспортное средство, Кнопка -> Элемент интерфейса public class B extends A{ ... } • Множественное наследование классов не поддерживается в Java B A A B
класса A может ссылаться как на любой объект класса A, так и на любой объект класса B, наследника А. B A C • При связывании переменной суперкласса с объектом подкласса, происходит сужение до возможностей суперкласса A aa = new A(); A ab = new B(); A ac = new C();
сигнатурами • Динамическое связывание по умолчанию public class A{ public void f(String s){ ... } public void f(double x){ ... } } A ab = new B(); ab.method(); /*если method переопределен в B, то вызовется он*/
в наследнике, считается абстрактным • Создать объект абстрактного класса невозможно public abstract class Being { public abstract void say(); } Being b = new Being();//ошибка!
• Не является классом public interface Comparable{ int compareTo(Object other); } • Класс может реализовывать один или несколько интерфейсов class Profit implements Comparable, Enumerable
вложенным • Объект внутреннего класса имеет доступ ко всем данным внешнего объекта class Outer{ private int outerData; private class Inner{ public void calc(){ return outerData / 2; } } }
нужно public void start(int interval, final boolean beep){ //анонимный вложенный класс ActionListener listener = new ActionListener(){ public void actionPerformed(ActionEvent event){ System.out.println("Время!"); if (beep) Toolkit.getDefaultToolkit().beep(); } }; Timer t = new Timer(interval, listener); t.start(); }
одновременно прост. Книга из Дополнителных материалов поможет Вам быстро набрать необходимый уровень по Java. Дальше мы будем говорить об Android. Резюме 43