Java программы что это такое определение

Java для начинающих. Часть 1 из 4

Данные статьи помогут легко и быстро разобраться в концепциях и программировании на Java.

Даже при нулевых знаниях о программировании на Java трудностей в освоении этих материалов не возникнет. А опытные Java-разработчики смогут освежить свои знания.

JVM, JRE и JDK

Вот так и происходит вся магия: логика (т.е. код) прописывается в java файле, который затем преобразуется в файл класса. Машина его читает и выполняет.

А теперь подробнее:

  • JVM — виртуальная машина Java, выполняющая байт-код Java.
  • JVM можно загружать на разном железе. Байт-коды — это машинный язык JVM. Поэтому Java является самым портируемым языком. JVM — это некий объект, который и обеспечивает портируемость. Для разных операционных систем (Mac, Windows, Linux и т.д.) придуманы свои реализации JVM.
  • JRE — среда выполнения Java, достаточная для запуска программы.
  • JRE = JVM + файлы библиотеки/пакеты классов (Util, Lang, Math etc).
  • JDK — пакет средств разработки на Java. Нужен для написания, компиляции и выполнения программы.
  • JDK = JRE + инструменты, необходимые для разработки Java-программы.

Выделение памяти

Коротко о том, как происходит выделение памяти со стороны кода в фоновом режиме:

Уроки Java для профессионалов | #4 — Запись и чтение данных из файлов (Java io)

  • Каждый раз при создании объекта в Java он сохраняется в heap памяти.
  • Примитивы и локальные переменные хранятся в stack памяти, переменные-члены — в heap.
  • При многопоточности каждый поток имеет собственный stack, но находится в общей куче (heap). О многопоточности поговорим во второй части.
  • При вызове какого-либо метода все методы и переменные помещаются в stack. По завершении вызова указатель стека (stack) уменьшается.
  • 32-разрядная операционка тратит не более 4GB RAM на Java-приложения. В 64-разрядной затраты памяти на те же элементы увеличиваются вдвое.
  • Примитивный тип int тратит в 4 раза меньше памяти, чем Integer.

Таблица ниже перечисляет различные типы данных и их диапазоны хранимых значений:

ООП — Инкапсуляция, наследование, полиморфизм и абстракция

Объектно-ориентированное программирование (ООП) — это концепция программирования, основанная на 4 базовых принципах.

1. Инкапсуляция

Инкапсуляция — это объединение данных и функциональных средств в единый компонент. Функциональные средства — это «методы», а данные — это «переменные». Все они объединяются в «класс». Это некая схема или набор инструкций.

Класс — это некий прообраз или прототип, который определяет переменные и методы. Пример:

Класс: Машина

Переменные-члены или объекты: цвет, тип, модель и т.д.

Методы: остановка, ускорение, предельная скорость.

Объект — это экземпляр класса. В примере выше моя машина будет экземпляром общего класса Машина.

Переменные: локальные, статические и переменные экземпляра. Локальные переменные объявляются в теле метода. Переменные экземпляра объявляются вне метода и являются специфичными для конкретного объекта. Статические переменные инициализируются только один раз при запуске программы. Статические переменные инициализируются первыми, но об этом чуть позже.

Сделал Java программу с интерфейсом / Погодное приложение

Методы— это различные функциональные средства. То есть, не что иное, как набор кода, на который поименно ссылаются или вызывают из любой части программы. Вы передаете несколько значений в метод и он их возвращает.

Пакет— это набор связанных классов. Используется для организации классов в структуру папок, а также для быстрого нахождения и повторного использования этих классов.

package com.example;
class Car String color = «black»; //instance variable
void accelerate() <
int speed = 90; //local variable
>
>

2. Абстракция

Абстракция — это выбор данных из большого пула по определенным критериям объекта. Ниже показаны различные модификаторы доступа и то, как они ограничивают данные из класса.

3. Наследование

Наследование — это процедура, при которой один класс приобретает свойства другого. Например, потомок наследует признаки своего родителя.

class Developer public void writeCode() // writeCode method

>
class BackendDeveloper extends Developer public void writeCode() // writeCode method
>
>
Class run public static void main (String args[]) Developer developerObject = new Developer()
// writeCode method in class Developer will be executed
developerObject.writeCode();

BackendDeveloper backendDeveloperObj = new BackendDeveloper();
// writeCodemethod in class BackendDeveloper will be executed
backendDeveloperObj.writeCode();
>
>

4. Полиморфизм

Полиморфизм — это концепция ООП, при которой одно имя принимает множество форм, (другое название — перегрузка). Динамический полиморфизм — это механизм, с помощью которого несколько методов определяются одним именем и сигнатурой подкласса или суперкласса (другое название — переопределение).

  • Перегрузка — это несколько методов одного класса с одним именем, но разной сигнатурой.
  • Переопределение — два метода (один в родительском классе, другой — в дочернем) с одним именем и сигнатурой.
  • Метод подкласса переопределяет метод суперкласса.
  • При переопределении подклассов модификатор доступа должен быть больше родительского класса. Например, если использовать public abc() в родительском классе и private abc() в подклассе — это вызовет исключение.

Загрузка статического и динамического класса

  • Добавление класса для запуска в JVM называется загрузкой класса.
  • Классы загружаются статично с помощью нового оператора.
  • Первый класс загружается через метод static main(). Затем подгружаются остальные классы.
  • В серверных проектах отсутствует main(), поскольку сервер сам отвечает за всю инфраструктуру. Первый класс для загрузки отмечается в config файле. Довольно часто фреймворк реализует метод main() и предоставляет API. Пример: Контейнерный класс вызывает метод init() в сервлетах.
  • main нужен для запуска Java-программы из командной строки в JVM.
  • Если при загрузке статического класса не находится ссылка на класс, то выбрасывается NoClassDefinationFoundException.
  • Динамические классы загружаются через программный вызов при выполнении. Пример: Class.forName(String ClassName);
  • ClassNotFoundException выбрасывается при загрузке динамического класса.

Абстрактный класс и интерфейс

  • В интерфейсе отсутствует код реализации, а все методы являются абстрактными. То есть, все методы объявляются, но ни один не определяется.
  • В абстрактном классе есть исполняемые и абстрактные методы.
  • Класс реализует сколько угодно интерфейсов, но расширяет только один абстрактный класс.
  • Методы абстрактного класса могут быть или не быть абстрактными.
  • Абстрактный класс не может превратиться в экземпляр, но может стать подклассом.
  • Все абстрактные методы должны определяться в подклассе, то есть, подкласс является абстрактным.
  • Создавать экземпляры из интерфейса нельзя. Их можно реализовывать в других классах или расширять другими интерфейсами.
  • Переменные интерфейсов конечные и статические. По умолчанию, все методы интерфейса публичные и абстрактные.
  • Интерфейс не может содержать реализацию и не может превращаться в подкласс. Все переменные должны быть постоянными.

Java Packages

Ниже даны примеры библиотек из пакетов Java которые помогут при написании правильного кода. О них мы еще поговорим.

Конструкторы

  • Их единственная цель — создавать экземпляры класса. Они вызываются в процессе создания объекта класса.
  • Если конструктор с аргументами определен в классе, то нельзя будет работать со стандартным конструктором без аргументов (no-argument constructor) — придется их прописать.
  • Java не поддерживает конструктор копирования.
  • Имя конструктора и класса совпадает.
  • Если конструктор вызывается из другого конструктора с синтаксисом this, то речь идет именно об этом объекте.
  • В Java есть стандартный конструктор.

Приватный конструктор:

  • Защищает класс от явного превращения в экземпляр.
  • Построение объекта возможно только внутри конструктора.
  • Используется в шаблоне «Одиночка» (Singleton).

Вопрос: Можно ли синхронизировать конструкторы в Java?

Нет. В Java запрещен многопоточный доступ к конструкторам объекта, поэтому необходимость в синхронизации отсутствует.

Вопрос: Наследуются ли конструкторы? Может ли подкласс вызывать конструктор родительского класса?

Конструкторы не наследуются. При переопределении конструктора суперклассов нарушается инкапсуляция языка. Конструктор родительского класса вызывается ключевым словом super.

Static

  • Модификатор Static используется для создания чего-то в единственном экземпляре. Например, когда мы хотим создать переменную или объект, доступные для всех объектов класса.
  • Static необходим для передачи информации по всем объектам.
  • Static подходит для переменных, методов и блоков.
  • или переменные принадлежат классу, а не объекту.
  • Статичный метод или переменная инициализируются один раз перед переменной экземпляра.
  • Статичный метод или переменная могут вызываться напрямую из имени класса. Пример: .
  • Статичный метод имеет доступ только к статичным данным.
  • Статичный метод не может ссылаться на this или super.
  • Статичный метод может вызывать только другие статичные методы.
  • main () — это статичный метод. Он должен быть доступен приложению до создания экземпляров.
  • Конструктор не бывает статичным, потому как компилятор считает его методом. Кроме того, конструктор нужен для инициализации нового объекта, а static выполняет совершенно противоположную функцию.
  • Статичная переменная загружается первой. После нее идет статичный блок. И очередность здесь важна. Статичные методы загружаются в конце.

Статичный родитель → Статичный потомок → Экземпляр родитель → Конструктор родитель → Экземпляр потомок → Конструктор потомок.

  • При переопределении статичного метода компилятор не выдает ошибок. Но правильнее это называть не переопределением, а скрытием, т.к. пропадают все плюсы полиморфизма.
Читайте также:
Что за программа ibackupbot

Final, Finalize и Finally

  • Ключевое слово final указывает на неизменность значения чего-либо.
  • Класс final не расширяется.
  • Метод final не переопределяется.
  • Переменные final равнозначны константам.
  • Блок finally вызывается для всех блоков try-catch и используется для очистки системных ресурсов, будь то подключения, выражения и т.д. Мы еще поговорим о них подробнее.
  • Метод finalize() помогает высвобождать память. Он вызывается перед тем, как сборщик мусора помещает объект на удаление.

Класс Object

В каждом классе есть суперкласс Object. В нем присутствуют следующие не конечные методы:

  • equal()
  • hashCode()
  • toString()
  • clone()
  • finalize()

Конечные методы суперкласса:

  • wait()
  • notify()
  • notifyAll()
  • getClass()

Equals и hashСode

  • Методы equals() и hashСode() переопределяются для сравнения двух объектов.
  • Метод equal() выполняет сравнение, а метод hashCode возвращает хеш-код.

Clone

  • Метод сlone нужен для копирования объекта.
  • В методе clone присутствует защищенный модификатор доступа.
  • Для вызова метода clone объекту требуется реализация интерфейса Cloneable. В противном случае выбрасывается исключение CloneNotSupportedException.
  • Интерфейс Cloneable является маркерным, то есть методы не определяют интерфейс, а говорят классу об особом отношении.
  • Плюс такого интерфейса: можно копировать только объекты, доступные для клонирования.
  • Если какое-то поле объекта ссылается на другой объект, то делаем поверхностную копию. В ней копируется только адрес памяти, т.е. используется один и тот же объект.
  • При глубоком копировании происходит создание объекта и новое динамическое распределение памяти.

Public Object Clone()TryReturn super.clone();
>>
Public Object Clone()TryObject obj = (Object) super.clone();
Return obj;
>>

Не обращайте внимание на оператора try — к нему мы вернемся позже.

Агрегация и композиция

  • Агрегация выражает отношение is a («являться чем-то»). Пример: дом является зданием.
  • Композиция выражает отношение has a («быть частью чего-то»). Пример: в доме имеется ванная. То есть форма отношения, в котором эта часть не может существовать без остальных элементов.
  • Агрегация — это более слабое отношение. Композиция намного сильнее.
  • Как правило, агрегация достигается расширением класса. Для композиции нужна реализация интерфейса.

Примитивы и оболочки типов

Переменная примитивного типа всегда содержит его значение. В Java существует 8 примитивных типов: byte , short , int , long , char , boolean , float and double .

Класс-оболочка — это класс, объект которого оборачивает или содержит примитивные типы данных. При создании объекта в классе-оболочке появляется поле для хранения примитивных типов данных, а также других поддерживающих и операционных методов. Если использовать не сами примитивы, а Object-оболочки для примитивных типов данных, то процесс выполняется медленнее. Дополнительные ресурсы тратятся на создание экземпляра объекта, вызовы методов и т.д. За каждым из этих примитивных типов закреплен свой класс: Byte, Short, Integer, Long, String, Boolean, Float и Double.

Автоупаковка и распаковка

  • Компилятор Java 1.5 автоматически преобразует примитивы к оболочкам типов, то есть выполняет автоупаковку. Обратное действие называется распаковкой.
  • Для этого в компиляторе используется valueOf() и intValue().

Кастинг

  • Это присвоение значение другому примитиву.

byte → short → int → long → float → double

  • В Java возможно и восходящее преобразование (upcasting):

int i = 5; long j = i;

  • Нисходящее преобразование (downcasting) невозможно, т.к. требуется прямой кастинг:

long j = 5;
int i = j; (THIS IS WRONG, it will give classCastException)
int i = (int) j;

  • Преобразование int в String также невозможно.

Источник: medium.com

10 главных конструкций языка Java

Java — важный язык разработки во многих больших корпорациях. Мы уже рассказывали про то, как и где применяется Java, теперь настало время для практики.

Так как авторы языка Java при создании вдохновлялись языками C и C++, то в Java тоже появилось много похожих конструкций и команд. Если вы знаете C или C++, то освоить Java вам будет гораздо проще.

В Java после каждой команды ставится точка с запятой.

Комментарии

Комментарии в Java точно такие же, как в C-подобных языках — есть однострочные, которые работают только для одной строки, и многострочные.

// Это однострочный комментарий
// Для каждой строки нужно добавлять его отдельно
/* А это — многострочный
его можно сделать любой длины,
если в начале и в конце поставить нужные символы */

Переменные и типы данных

Как и в C, в Java есть несколько типов данных с разным объёмом выделяемой памяти. Предполагается, что программист сам решит, какой тип использовать лучше всего в каждой ситуации и сам будет следить за тем, чтобы в переменную поместилось всё что нужно.

// целое, 1 байт byte b; // целое, 2 байта short s; // целое, 4 байта int x = 420; // целое, 8 байт long l; // дробное, 4 байта float fl = 4.3; // дробное, 8 байт double d,q; // логический тип, true или false boolean bol;

Присваивание и сравнение

Всё как и везде:

// это присваивание
x = 10;
// а это — сравнение x и 10
// результат сравнения отправляется в переменную b
boolean bol;
b = (x == 10);

Ещё есть метод сравнения .equal — он работает более гибко и предсказуемо, чем ==, потому что двойное равно может сравнивать только числа и строки.

Структура программы

Разработчикам Java понравилось, что в C вся программа состоит из функций, среди которых есть одна обязательная — main, поэтому сделали точно так же. В классах эта функция называется методом.

Но есть одно важное отличие: каждая java-программа — это как бы один большой класс со своими разделами, которые должны быть у каждого класса. Благодаря этому большие программы легко собираются из маленьких java-кирпичиков и работают друг с другом как с классами, используя все их возможности.

// программа — тоже класс public class Program < // публичная часть класса, доступная всем // в ней сразу делают основную функцию программы main public static void main(String[] args) < // объявляем переменные String name = «Код»; // выводим строку на экран System.out.printf(«Привет, это журнал %s n», name); // конец основной функции >// конец описания класса >

Ввод и вывод

Для ввода и вывода используют системный класс System и два его объекта — in и out. Но на практике чаще всего вместо in используют объект Scanner, чтобы можно было более гибко управлять вводом данных.

Условные операторы if и switch

Работают так же, как в C и в любых современных языках высокого уровня. Главное здесь — следить за фигурными скобками и не перепутать, что к чему относится. Проще всего это регулировать отступами:

// числа для сравнения int num1 = 6; int num2 = 8; // если первое больше второго if(num1>num2) < // выводим результат System.out.println(«Первое число больше второго»); >// если первое условие не выполнилось — можем проверить второе else if(num1 // если и это условие не выполнилось else< // выводим финальное сообщение System.out.println(«Числа равны»); >

У оператора множественного выбора есть особенность: ему не нужны фигурные скобки для действий в каждом случае. Компьютер по синтаксису понимает, что к чему относится, и выбирает нужный вариант.

// число для сравнения int num = 8; // сравниваем значение этого числа с нашими вариантами switch(num)< // если число = 1 case 1: // выводим сообщение System.out.println(«число равно 1»); // выходим из дальнейших проверок break; // если число = 8 case 8: System.out.println(«число равно 8»); // увеличиваем число на 1 num++; break; // если число = 9 case 9: System.out.println(«число равно 9»); break; // если ни один из вариантов не подошёл default: System.out.println(«число не равно 1, 8, 9»); >

Циклы

В Java есть три основных вида циклов:

  • for — с известным числом повторений и счётчиком;
  • do — с проверкой условия до цикла;
  • while — условие проверяется после первого выполнения цикла.

Ещё есть два полезных оператора:

  • break — прерывает цикл в любой момент;
  • continue — сразу переходит к следующему витку цикла без выполнения остальных команд.

// цикл со счётчиком // задаётся начальное значение, условие и шаг цикла for (int i = 1; i < 9; i++)< // тело цикла System.out.printf(«Квадрат числа %d равен %d n», i, i * i); >// то же самое с циклом do int j = 1; // начинаем цикл do < // выводим результат System.out.printf(«Квадрат числа %d равен %d n», i, i * i); // увеличиваем переменную цикла j++; >// проверяем условие цикла while (j < 9); // и то же самое с циклом while int k = 1; // начинаем цикл и сразу проверяем условие while (k < 10)< // выводим результат System.out.printf(«Квадрат числа %d равен %d n», k, k * k); // увеличиваем переменную цикла k++; >

Функции (они же методы)

Так как каждая программа — это описание какого-то класса, то функции в Java — это и есть методы этого класса. Функций (или методов) может быть сколько угодно, главное — соблюдать правила описания классов. Покажем на примере:

// программа — класс public class Program < // публичная часть, доступная всем // основная функция-метод main public static void main (String args[])< // вызваем методы (функции) в любое время hello(); welcome(); >// метод hellо(), который не передаёт и не принимает никаких аргументов void hello() < System.out.println(«Привет!»); >// метод welcome() void welcome() < System.out.println(«Это журнал Код.»); >>

Читайте также:
Программа Смарт 6 для чего

Классы

В Java всё построено на классах, от самой программы до реализаций различных функций. Конечно, можно не использовать классы и работать в чисто процедурном стиле, но в Java так не принято. Это ООП-язык с родной поддержкой классов на всех уровнях.

Сами классы объявляются и используются так же, как и в любом другом ООП-языке:

// объявляем новый класс с информацией о заказанном товаре class Order < // переменные класса String name; // название int cost; // стоимость // метод класса void displayInfo()< // выводим информацию о заказе System.out.printf(«Заказ: %s tСтоимость: %dn», name, cost); >>

Объекты

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

Обычно используют классы, прописанные в том же файле, что и программа. Если нужно использовать класс из другой программы, её подключают отдельно. Вот самый простой способ сделать объект на основе предыдущего класса с заказом:

// программа — тоже класс public class Program < // основная функция-метод main public static void main (String args[])< // создаём новый объект на основе класса ниже Order new_order; // заполняем данные new_order.name = «Айфон»; new_order.cost = 9999; // вызываем метод класса new_order.displayInfo(); >> // объявляем новый класс с информацией о заказанном товаре class Order < // переменные класса String name; // название int cost; // стоимость // метод класса void displayInfo()< // выводим информацию о заказе System.out.printf(«Заказ: %s tСтоимость: %dn», name, cost); >>

Источник: thecode.media

Язык программирования Java SE 8. Подробное описание.

Эта книга написана разработчиками языка Java и является полным техническим справочником по этому языку программирования. В ней полностью описаны новые возможности, добавленные в Java SE 8, включая лямбда-выражения, ссылки на методы, методы по умолчанию, аннотации типов и повторяющиеся аннотации. В книгу также включено множество поясняющих примечаний. В ней четко обозначены отличия формальных правил языка от практического поведения компиляторов.

Java является языком программирования общего назначения, ориентированным на параллельное выполнение и основанным на классах объектно-ориентированным языком. Он специально разрабатывался так, чтобы быть достаточно простым, так что многие программисты могут легко достичь высокой скорости работы.

Язык программирования Java является строго и статически типизированным. В дан ной спецификации четко различаются ошибки времени компиляции, которые могут и должны быть обнаружены во время компиляции, и ошибки, которые происходят во время выполнения.

Язык программирования Java — язык относительно высокого уровня, что проявляется, в частности, в том, что детали представления машинного кода в языке недоступны.

Сюда входят автоматическое управление памятью, обычно с использованием сборщика мусора (чтобы избежать проблем, связанных с явным освобождением памяти. Высокопроизводительные реализации сборки мусора могут ограничиваться работой в паузах выполнения программы, чтобы обеспечить возможность создания системных программ и приложений реального времени.

Язык не включает ни одной небезопасной конструкции, такой как доступ к массиву без проверки диапазонов индексирования, поскольку такие небезопасные конструкции могут приводить к неопределенному поведению программы.

Программа на языке Java обычно компилируется в набор команд байт-кода и бинарный формат, определенный в спецификации виртуальной машины Java The Java Virtual Machine Specification, Java SE 8 Edition.

Источник: www.kavserver.ru

Основы языка Java

Аннотация: Java — язык ООП. Свойства объектно-ориентированных языков программирования. Основные свойства объектно-ориентированных программ. Типы, переменные и операторы. Использование и реализация класса Xterm.

Логические и условные операторы.

Литературы, содержащей описание языка Java , сейчас достаточно много. На первой стадии знакомства с ним можно воспользоваться любым изданием, однако такие книги, как [11], [13] и [10] из библиографического списка, заведомо окажутся полезными и в дальнейшем.

Java — язык ООП

В информатике и программировании изменения происходят постоянно и с большой скоростью. Одним из самых значительных изменений за последние двадцать лет стало появление общемировой сети Интернет и языка программирования Java . Важнейшими свойствами этого языка, называемого даже революционным, являются следующие:

  • Java является современным объектно-ориентированным языком;
  • Java предоставляет программисту богатый набор классов различных объектов;
  • Java позволяет создавать аплеты , являющиеся небольшими, надежными, динамичными и не зависящими от платформы сетевыми приложениями, которые встраиваются в веб-страницы Интернет.

Выбор этого языка в качестве базового для нашего курса обусловлен прежде всего наличием у него таких качеств, как простота и мощь, безопасность , объектная ориентированность, надежность , интерактивность , архитектурная независимость, возможность интерпретации, высокая производительность и легкость в изучении. Часть из них нам понадобится с первых же шагов, другие — несколько позже.

Объектно-ориентированное программирование настолько интегрировано в Java , что написание даже простейших программ требует знания основных принципов ООП . Хотя в первой части курса мы и не собираемся акцентировать внимание на них, общее представление об основах объектно-ориентированного подхода необходимо иметь уже сейчас.

Объектно-ориентированное программирование представляет собой технологию программирования, в основе которой лежит способность человека обобщать, классифицировать и генерировать абстракции. Концепция ООП базируется на таких понятиях как объекты и классы . В повседневной жизни объекты встречаются на каждом шагу: компьютеры, телефоны, машины, дома, чашки и многое другое. В программировании это могут быть символы, числа, строки, а также объекты, придуманные и реализованные автором программы.

Важно то, что объекты — это не только некоторые значения (данные). В них также имеются методы , связывающие данные и управляющие ими. Объекты представляют собой объединение структур данных, содержащих информацию, и методов и функций для управления этими данными.

Произвольный объектно-ориентированный язык программирования характеризуют три основных свойства:

  • инкапсуляция , т.е. совмещение данных с функциями (методами), предназначенными для манипулирования этими данными, в одном объекте, сопровождающееся сокрытием его внутренней структуры от внешнего мира; в языке Java это достигается путем введения механизма классов;
  • наследование , т.е. создание новых, производных классов, на базе уже имеющихся, которые наследуют данные и методы от ранее определенных базовых классов; при этом возможно переопределение или добавление новых данных и методов; в результате создается так называемая иерархия классов ;
  • полиморфизм , т.е. наличие у разных классов методов с одним и тем же именем, в результате чего каждый из классов имеет возможность по-своему выполнять связанные с этим методом действия.

Более полную информацию, связанную с объектно-ориентированным программированием, можно почерпнуть из уже упоминавшейся книги [10] и замечательной, хотя и сложной для новичка, книги [2]. В нашем же курсе мы вернемся к этому вопросу в «Проект «Компилятор формул»»

Основные свойства программ и первые примеры

Перед тем, как перейти непосредственно к примерам программ, обсудим вопрос о том, какими качествами должна обладать хорошая программа .

Оказывается, что таких свойств достаточно много: корректность , эффективность , удобство эксплуатации , надежность , удобство сопровождения , понятность и еще целый ряд других. Четырьмя самыми главными из них являются корректность или правильность , эффективность и понятность и модифицируемость .

Так как программа на языке Java является просто записью алгоритма решения определенной задачи, прежде всего она должна быть правильной , то есть реализующей корректный алгоритм решения исходной задачи. Оказывается, что не так просто не только научиться писать правильные программы, но даже и просто сформулировать, что это такое. Только в «Спецификация программ и преобразователь предикатов» , после предварительного изучения основ теории предикатов, мы сможем дать точное определение понятию правильная программа .

Обсуждению вопросов эффективности программ посвящена значительная часть «Особенности представления чисел в ЭВМ» , в которой весьма убедительно доказывается важность быстрых алгоритмов. Сейчас же ограничимся только одним примером: времена работы быстрой и обычной программ, упорядочивающих в порядке возрастания миллион чисел, отличаются в 50000 раз!

Свойства понятности и модифицируемости программ связаны самым тесным образом: очень трудно изменить программу, которую не понимаешь. В реальной жизни программиста задачи на модификацию уже написанных кем-то ранее программ встречаются едва ли не чаще, чем задачи на разработку программ с нуля. Решение задач на модификацию является также и весьма эффективным способом изучения как языка, так и методов программирования.

Научиться писать понятные и легко модифицируемые программы существенно легче, чем правильные и эффективные. Для этого достаточно только соблюдать несколько простых общих правил, которые мы сформулируем в применении к языку Java :

  • используйте в программе осмысленные имена для всех переменных, отличных от счетчиков и других подобных величин;
  • всем константам, отличным от нуля и единицы, присваивайте имена;
  • соблюдайте принятый в языке стиль написания имен (имена классов должны начинаться с прописной буквы, переменных и методов — со строчной, констант — состоять полностью из прописных букв);
  • применяйте разумное форматирование текста программы;
  • там, где это необходимо, используйте комментарии.

Программа на языке Java пишется в обычном текстовом файле, содержащем в себе определения одного или нескольких классов. Имя файла обязано совпадать с именем основного класса, определенного в нем, и иметь расширение java . Компилятор , запускаемый обычно с помощью команды javac Filename.java , при отсутствии ошибок компиляции порождает один или несколько выходных файлов с именами, совпадающими с именами содержащихся в исходном файле классов, и расширением class . Для запуска откомпилированной программы после этого необходимо выполнить команду java Filename .

Читайте также:
Microsoft publisher что это за программа и зачем она нужна

В соответствии с давно установившейся традицией рассмотрим в качестве первой задачи следующую.

Задача 2.1. Напишите программу, выводящую на экран строку текста Здравствуй, мир !.

Текст программы

public class Hello < public static void main(String[] args) < System.out.println(«Здравствуй, мир!»); >>

Приведенный выше текст обязательно должен содержаться в файле с именем Hello.java (обратите внимание на то, что первая буква в имени является прописной, а остальные — строчными).

Как и большинство других языков, Java допускает произвольное форматирование текста программы. Это означает, что любую программу в принципе можно записать в одну длинную строку или, наоборот, максимально растянуть по вертикали, размещая на каждой строке только по одной лексеме — минимальной неделимой единице языка. Приведенная выше программа состоит из следующей цепочки лексем: ключевые слова public , class , идентификатор Hello , разделитель идентификатор main , разделитель ( , идентификатор String , разделители [ и ] , идентификатор args , разделители ) и идентификатор System , разделитель ., идентификатор out , разделитель ., идентификатор println , разделитель ( , строковый литерал «Здравствуй, мир!» , разделители ) , ; , и дважды > . Данная программа не содержит лексем только еще одного типа, существующего в языке — констант, примером которой является, скажем, число 5.

Человек, однако, не машина, и ему далеко не безразлично, как отформатирован текст программы. Неудачное форматирование существенно усложняет правильное восприятие текста и порождает потенциальные ошибки. Не обсуждая сейчас вопрос о том, какой именно стиль форматирования программ на языке Java является наиболее правильным, мы призываем читателя следовать тем образцам, которые он найдет в книге — они предлагают заведомо не самый плохой вариант.

Запомните, что в языке Java существует около шести десятков зарезервированных ключевых слов, которые имеют вполне определенное значение и не могут быть использованы для иных целей, кроме тех, для которых они предназначены.

Последовательное выполнение двух команд javac Hello.java и java Hello должно привести к тому, что на экране появится результат работы программы — строка Здравствуй, мир !

Мы не будем приводить подробный разбор того, каков смысл отдельных частей рассмотренной программы, — этот комментарий можно найти в любой книге по языку Java . Вместо этого мы обсудим решение следующей задачи, в которой будут использованы методы уже анонсированного выше класса Xterm .

Источник: intuit.ru

Что такое Java или особенности языка

Если вы спросите, что такое Java, то вам можно сказать о Java как о языке общего назначения, объектно-ориентированном, который выглядит очень похоже на C и C ++, но проще в использовании и позволяет создавать более надежные программы. К сожалению, это определение не даст вам полного понимания Java. Более подробное определение дано Sun Microsystems и является столь же актуальным, хотя и было озвучено в далеком 2000 году:

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

Давайте рассмотрим каждый из этих определений в отдельности:

Java является простым языком. Java изначально был смоделирован с подобия C и C ++, только убраны некоторые потенциально непонятные элементы. Указатели, множественное наследование реализации, а также перегрузка операторов – эти некоторые C / C ++ функции не являются частью Java. Функция не является обязательной в C / C ++, но необходима для Java – это сборщик мусора, который автоматически высвобождает объекты и массивы.

Java является объектно-ориентированным языком. Объектно-ориентированный фокус в Java позволяет разработчикам работать над адаптацией Java, чтобы решить проблему, а не заставлять нас манипулировать проблемой для удовлетворения языковых ограничений. Этим он отличается от структурированного языка, как, например, С. Например, в то время как Java позволяет сосредоточиться на сберегательном счете объектов, C требует, чтобы вы думали отдельно об экономии состояния счета (такой баланс) и формах поведения (например, ввод и вывод).

Java позволяет работать с сетью. Обширная сетевая библиотека Java позволяет легко справиться с интернет-протоколом (TCP / IP), а также такими сетевыми протоколами, как HTTP (Hypertext Transfer Protocol) и FTP (File Transfer Protocol). С помощью библиотек задача создания сетевых соединений упрощается. Кроме того, Java программы могут получить доступ к объектам через TCP / IP сети, с помощью унифицированных указателей информационных ресурсов (URL), с такой же легкостью, как и к файлам, находящимся на локальном компьютере.

Java является интерпретируемым языком. Во время выполнения программы Java косвенно выполняется на базовой платформе (например, Windows, или Linux) через виртуальную машину (которая представляет собой программное обеспечение представление гипотетической платформы) и связанной с ним средой исполнения. Виртуальная машина переводит байт-код в программу Java-(инструкции и связанные с ними данные) инструкции для конкретных платформ с помощью интерпретации. Виртуальная машина затем выполняет эти инструкции на конкретной платформе. Интерпретация облегчает отладку неработающих программ Java, потому что при этом во время компиляции доступно больше информации.

Java является надежным языком. Java программы должны быть надежными, поскольку они используются в потребительских и критически важных приложениях, начиная от Blu-Ray-плееры или систем воздушного контроля в автомобилях. Банковские клиенты и сервера пишутся на этом языке. Особенности языка, которые помогают сделать Java надежным, включают в себя декларации, дублирование проверки типа во время компиляции и выполнения (для предотвращения проблем несоответствия версий), массивы с автоматической проверкой границ, отсутствие указателей.

Другим аспектом надежности Java является то, что циклы должны находиться под контролем логических выражений вместо целых выражений, где 0 является ложным и ненулевое значение верно. Например, Java , не допускает цикл С-типа как в while (x) x++; поскольку цикл может не закончиться, как и ожидалось. Вместо этого вы должны явно обеспечить логическое выражение, например, в while (x != 10) x++; (Что означает, что цикл будет выполняться до тех пор x не равен 10).

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

Теоретически, Java является безопасным. На практике различные уязвимости были обнаружены и эксплуатируются. В результате, Sun Microsystems и Oracle затем в настоящее время продолжают выпускать обновления безопасности.

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

Java представляет собой портативный язык. Архитектура нейтральности способствует мобильности. Библиотеки Java также способствуют мобильности. В случае необходимости они предоставляют типы, которые соединяют код Java с возможностями конкретных платформ наиболее портативным способом.

Java является языком высокой производительности. Интерпретация дает уровень производительности, который, как правило, более чем достаточен. Те, кто создает программы на заказ на C++, могут здесь поспорить, но на самом деле с каждой версией Java увеличивает свою производительность.

Java является многопоточным языком. В целях повышения эффективности программ, которым нужно выполнять несколько задач одновременно, Java поддерживает концепцию потоков. Например, программа, которая управляет графическим интерфейсом пользователя (GUI) во время ожидания ввода от сетевого соединения использует другой поток для выполнения ожидания вместо того, чтобы использовать GUI поток по умолчанию для обеих задач. Это позволяет работать с графическим интерфейсом, не вызывает его зависания. Синхронизация поток в Java позволяет потокам безопасно обмениваться данными между собой без их повреждения.

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

В результате, когда программа или одна из её библиотек эволюционирует (например, для исправления ошибки или повышения производительности), разработчику необходимо только распространить обновленную программу или библиотеку. Хотя результаты динамического поведения требуют меньше кода, когда происходит изменение версии, эта политика распределения может также привести к конфликтам версий. Например, разработчик удаляет тип класса из библиотеки, или переименовывает его. Когда компания распространяет обновленную библиотеку, существующие программы, которые зависят от типа класса, могут перестать работать. Для того, чтобы решить эту проблему, Java поддерживает тип интерфейса, который, является как бы договором между двумя сторонами.

Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

Источник: upread.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru