Программирование Android Java: записки новичка Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Java: записки новичка Печать
Добавил(а) microsin   

Раньше программировал на C, и всегда думал, что это самый лучший язык. Но с появлением Android пришлось начать изучать язык Java (который всегда презирал за тормознутость и неуклюжесть программ, написанных на нем). Здесь собрано в виде отдельных тезисов все полезное, что удалось узнать, с точки зрения программиста C. Непонятные термины и сокращения ищите в Словарике [2].

1. Java всегда работает на так называемой виртуальной машине, так что приложение ничего не знает о физическом устройстве, на котором выполняется. Благодаря этому достигается кроссплатформенность Java-программ. Т. е. практически вся забота о железе перекладывается на виртуальную машину (JVM, Java Virtual Machine). Если для какой-то платформы (телефон, смартфон, ноутбук, компьютер и т. п.) есть реализация виртуальной машины Java, то значит на ней можно запускать Java-код. На Android эта виртуальная машина почему-то называется Dalvik.

2. С чего начать? Если Вы совсем незнакомы с Java, то можно посоветовать прочитать книжку "Программирование на Java для детей, бабушек, родителей и дедушек" (Java Programming for Kids, Parents and Grandparents) Якова Файна (Yakov Fain) [1].

[140314 - 14 марта 2014]

3. Интерпретатор java.exe требует в командной строке имя интерпретируемого модуля Java (файл *.class), причем имя файла нужно вводить с учетом регистра символов.

4. Классы Java состоят из атрибутов и методов. Метод - то же самое, что и подпрограмма, но он означает действие, относящееся к классу, по этому и получил отдельное название. Атрибут - это то же самое, что и переменная, однако эта переменная дает какую-то характеристику классу, поэтому также носит специальное обозначение.

5. Программы Java являются классами, назначение которых - представлять объекты из реальной жизни. Обычно в программе Java имеется несколько классов, но может быть и только один. Для того, чтобы класс можно было запускать как отдельную программу, в нем должен обязательно присутствовать метод main. В программе Java только один класс может иметь метод с именем main. Когда делается проект Java-приложения в Eclipse, необходимо в свойствах проекта указать "главный" класс - тот, в котором находится метод main (Java Application -> имя проекта -> в поле ввода Main class: нужно указать имя класса, где находится метод main).

6. Методы класса Java объявляются в теле класса почти абсолютно так же, как и обычные подпрограммы и функции в модуле на языке C. Однако есть и некоторые отличия, обусловленные новыми ключевыми словами и их необычным применением. Пример:

public static void main (String[] args);

public в этом примере означает, что метод может быть вызван из любого места программы. Он будет доступен как внутри класса, так и из других классов.

static означает, что метод статический, и будет существовать в памяти изначально. Т. е. метод можно использовать без создания экземпляра класса, просто через указание имени класса (имя_класса.main).

Ключевое слово static также может применяться к переменным класса (или атрибутам класса). Тогда такая переменная может использоваться без создания экземпляра класса.

void имеет то же самое значение, что и на языке C. Это означает, что метод не возвращает значения.

main это имя метода, через которое метод запускается на выполнение как подпрограмма.

(String[] args) аргументы, которые передаются методу. В данном случае метод main получает в виде массива строк опции командной строки (аналогично аргументам argc и argv для функции main на языке C).

7. System.out.println позволяет выводить текстовые сообщения в системную консоль (аналог printf из стандартной библиотеки языка C).

8. Класс Java обозначается своим описанием. Однако для того, чтобы воспользоваться методами класса и его атрибутами, необходимо создать экземпляр класса с помощью ключевого слова new (точно так же, как это делается на языке C++), с присвоением этому экземпляру символического имени. По этому имени в программе можно получить доступ к методам и атрибутам экземпляра класса. "Создать экземпляр класса" по сути означает создать в памяти копию класса согласно его описанию. Программа может создавать несколько экземпляров одного и того же класса под разными именами.

9. Инструмент scrapbook (черновик) в Eclipse позволяет без запуска отладки программы и даже без создания класса выполнить кусок программы. Это полезно при тестировании написанного кода.

10. Типы данных Java. Язык Java унаследовал почти все все те же самые типы, которые были у языка C:

• Целочисленные типы byte (на C это был тип unsigned char), short, int, long.
• Типы данных для чисел с плавающей запятой float и double.
• Тип данных для текстового символа char.
• Тип двоичных данных boolean (на C такого типа не было), который представляет один бит, и может иметь только два значения false (ноль) и true (единица).

Кроме того, каждый тип данных имеет специальные классы - обертки, которые предоставляют удобные методы для преобразования чисел в текст (например классы Integer, Boolean, Double и т. п.).

11. Что на языке Java означает final? Если ключевое слово final указано при определении переменной, то это означает, что переменной можно присвоить значение только один раз, т. е. это просто константа (аналог ключевому слову const на C/C++). Если final указано в определении метода, то это значит, что этот метод нельзя переопределять в дочерних классах (см. inheritance, extends).

12. Что такое inheritance, extends? Эти ключевые слова позволяют на Java произвести наследование классов. Для каждого класса есть родитель (родительский класс, который еще называют суперклассом), и из каждого класса можно произвести дочерний (это и есть наследование, inheritance). Класс Object является самым верхним в цепочке наследований. Пример наследования (т. е. создания дочернего класса из родительского):

class ChildClass extends ParentClass ( ...

ChildClass здесь дочерний класс, который наследуется из родительского. ParentClass это родительский класс.

Смысл и польза наследования в том, что дочерний класс автоматически получает все методы родительского, причем в дочернем классе есть возможность переопределить некоторые методы родительского класса (но только не те, которые были определены с ключевым словом final). Таким образом, это позволяет упростить определение дочернего класса, и переопределением методов можно подстроить поведение дочернего класса. Переопределение метода - это всего лишь определение заново в дочернем классе метода, который уже существовал в родительском. При этом конечно же функционал метода можно полностью задать заново.

В отличие от C++, на языке Java класс не может иметь двух родительских классов.

[140318 - 18 марта 2014]

13. javadoc - полезная утилита, которая позволяет из комментариев в коде генерить HTML-документацию (некий упрощенный аналог dixygen [3]). Для того, чтобы комментарий попал в генерируемую документацию, он должен быть обрамлен /** */. Пример: /** тут комментарий */. Обычно комментарии, предназначенные для экспорта в документацию, помещают в начале файла модуля (тогда комментарий должен описывать весь модуль в целом) или в начале функции (тогда этот комментарий предназначен для описания функции, и должен кроме описания содержать её имя). Подробнее про javadoc можно прочитать в Википедии.

14. Оказывается, в Java массивы можно определять двумя способами: квадратные скобки могут стоять как до имени массива, так и после.

int myarray [];   //Обычное определение массива.
int [] myarray;   //Так тоже можно, никаких проблем. 

15. member variable - переменная, относящаяся к классу (member переводится как "член, участник"). Буквально это может относиться как к определению переменной в классе, так и её появления в коде в составе созданного экземпляра класса.

instance variable - то же самое, но тут слово instance означает "экземпляр" класса, к которому относится переменная. Эта переменная может быть как переменной класса (экземпляром класса), так и членом класса.

16. constructor - специальный метод класса, который служит для единственной цели: при создании класса выполнить некоторые инициализирующие операции, и при этом создать экземпляр класса (class instance). Конструктор вызывается только один раз при создании экземпляра класса (инициализация). При инициализации в теле конструктора может быть выполнено присвоение каких-то переменных (обычно атрибутов класса), или произведено выделение памяти, или выполнен некий код настройки оборудования. В этом смысле конструкторы Java работают точно так же, как и на C++, и подчиняются тем же правилам.

Имя конструктора должно совпадать с именем класса. Конструктор в описании не должен возвращать значения (может отсутствовать даже слово void). Может быть определено несколько конструкторов, каждый со своим кодом, но у каждого должен быть свой набор параметров. Определение конструктора может также отсутствовать, при этом Java создаст конструктор по умолчанию, который также будет применяться для создания экземпляров класса с применением ключевого слова new.

MyClass varMyClass = new MyClass();

[140319 - 19 марта 2014]

20. this - специальное ключевое слово, которое позволяет в методах класса ссылаться на текущий экземпляр класса (this переводится как "этот", т. е. получается "этот класс"). Слово полезно использовать в том случае, когда имя атрибута совпадает с именем параметра метода, пример:

class MyClass
{
   int ScreenWidth;
MyClass(int ScreenWidth) { this.ScreenWidth = ScreenWidth; } }

[140428]

21. Передача параметров в функцию по ссылке в Java не существует. Другим словами, Вы теперь не можете написать определение функции наподобие void myprocedure (char* pSym, int* iVal), на звездочки Java будет ругаться. 

Дело в том, что указателей на Java просто нет, они не предусмотрены в целях упрощения языка.

[140502]

22. На Java нет констант времени компиляции, задаваемых директивой #define.

23. На Java нет реализации поддержки беззнаковых типов [4] unsigned.

24. На Java нет реализации перечислений enum.

25. Каждый класс Java должен быть реализован в отдельном модуле (в отдельном файле).

26. На Java всегда используется порядок байт big endian - независимо от архитектуры, на которой работает программа Java. Это сделано для облегчения переносимости программ с одной платформы на другую.

[Ссылки]

1. Программирование на Java для детей, бабушек, родителей и дедушек site:rutracker.org - книжка в PDF формате на русском языке.
2. Словарик Android.
3. Генератор документации Doxygen - быстрый старт.
4. Java: куда подевались беззнаковые типы?

 

Комментарии  

 
+2 #1 DMK 04.02.2017 18:01
25. Каждый класс Java должен быть реализован в отдельном модуле (в отдельном файле).

Это ведь не так, в одном файле можно создавать несколько классов.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page