Показаны сообщения с ярлыком Java. Показать все сообщения
Показаны сообщения с ярлыком Java. Показать все сообщения

Обработка строк в Java

Строковые литералы

Строковые литералы являются последовательностью символов заключенной в двойные кавычки и расположенной на одной строке. Все строковые литералы являются объектами класса String. 

В строковые литералах могут использоваться escape-последовательности и Unicode-значения:
"Here comes a tab.\t And here comes another one\u0009!"

Одиночный апостроф внутри строки не нужно писать как escape-последовательность:
"What's on the menu?"
Но если мы указываем как символьный литерал, то тогда нужно: '\''

Двойные кавычки нужно превращать в escape-последовательность:
"\"String literals are double-quoted.\""

Использование escape-последовательности \n для вставки новой строки:
"Left!\nRight!"

Ошибка компиляции:
"Don't split
me up!"

Следует также использовать escape-последовательности \n и \r для корректной интерпретации символов \u000a (newline) и \u000d (form feed) в строковых символах.

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

Оглавление:

Обзор примитивных типов в Java:


Сводка по примитивным типам данных:


Лексическая структура языка программирования Java

Как и любой язык программирования Java определяется:
  • грамматическими правилами (grammar rules), которые указывают как строить синтаксически верные конструкции из элементов языка;
  • семантическим определением (semantic definition), которое указывает на значение синтаксически верных конструкций.

Многопоточность в Java

Java предоставляет высокоуровневую поддержку многопоточности, которая позволяет множеству потоков выполнять различные задачи. Предоставляемый API (Fork & Join Framework и Stream API) позволяет эффективно использовать много ядер для параллельной обработки большого количества данных.

Инкапсуляция в Java

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

Ввод-вывод Java программ

Стандартный вывод

Данные производимые программой называются выводом. Этот вывод может направляться на различные устройства. Java программы могут посылать вывод в окно терминала используя объект, который называется стандартный вывод (standard out). Доступ к этому объекту может быть получен через публичное статическое финальное поле out в классе System. Стандартный вывод является объектом класса java.io.PrintStream, который предоставляет методы для печати значений. Эти методы преобразуют значения к их строковому представлению и печатают результирующие строки.

System.out.println("Original string: " + str);
System.out.print("Reversed string: ");
System.out.println(); 

Java программы

Файл с исходным кодом Java может содержать больше одного объявления класса. Каждый файл с исходным код имеет расширение .java. JDK (Java Development Kit) принуждает к тому чтобы каждый файл с public доступностью был размещен в собственном файле с тем же именем файла, что и имя класса. Т.е. каждый .java файл может содержать как максимум один публичный класс. Если файл содержит публичный класс, то у этого файла должно быть имя как у класса.

Вопросы для подготовки к экзамену номер 1Z0-808 — Java SE 8 Programmer I

1.1 Which statement is true about methods?
Select the one correct answer.
(a) A method is an implementation of an abstraction.
(b) A method is an attribute defining the property of a particular abstraction.
(c) A method is a category of objects.
(d) A method is an operation defining the behavior for a particular abstraction.
(e) A method is a blueprint for making operations.

Метод - это операция определяющая поведение для конкретной абстракции. Java имплементирует абстракции используя классы у которых есть свойства и поведение. Поведение определяется операциями абстракции.

Наследование в языке программирования Java

Есть два фундаментальных механизма для построения новых классов из существующих: наследование и агрегация. Есть смысл унаследоваться от существующего класса Vehicle при определении класса Car, потому что автомобиль - это транспортное средство. Класс Vehicle имеет несколько частей, поэтому имеет смысл определить композитный объект (composite object) класса Vehicle, который бы образовывал одно целое из объектов классов Engine, Axle, и GearBox из которых делается транспортное средство.

Абстракция в Java

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

Классы и объекты в Java

Оглавление:

Базовая терминология и концепции ООП

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

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

Поведение объекта класса также называют операциями. Операции определяются с помощью методов Java.

Поля и методы в объявлении класса называются общим словом - члены.

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

Объявление метода с таким же именем как у класса называется конструктором. Конструктор выполняется при создании объекта из класса.

Процесс создания объектов из классов называется инстанцированием. Объект - это экземпляр класса. Объект - это конкретный экземпляр той абстракции, которую представляет собой класс.

При создании объекта возвращается ссылочное значение (reference value). Ссылочное значение отсылает к объекту. Переменная метит место в памяти, куда может быть сохранено значение. Ссылка на объект (object reference) это переменная, которая хранит ссылочное значение. В Java объектами можно манипулировать только посредством их ссылочных значений или, что то же самое, посредством ссылок, которые содержат ссылочные значения.

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

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

Каждый созданный объект имеет свою копию полей определенных в классе. Поля объекта называются переменными экземпляра (instance variables). Значения переменных экземпляра конституциируют состояние объекта (state). Два разных объекта могут иметь одно и то же состояние, если их переменные экземпляра имеют одни и те же значения. Методы объекта определяющие его поведение называются методами экземпляра (instance methods). Эти методы принадлежат каждому объекту класса. Имплементация этих методов находится в общем использовании у всех объектов класса. Переменные и методы экземпляра, которые принадлежат объектам называются общим термином члены экземпляра (instance members).

В некоторых случаях члены должны принадлежать только классу, т.е. они не должны быть частью ни одного из экземпляров класса. Члены, которые принадлежат только классу называются статическими членами (static members). Поля объявленные с ключевым словом static называются статическими переменными (static variable). Статическая переменная инициализируется при загрузке класса в среду исполнения. Также существуют статические методы (static methods), которые принадлежат скорее к классу, чем к объектам этого класса.

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

Dot (.) нотация может использоваться вместе с ссылкой для доступа к полям объекта. При использовании dot нотации учитывается доступность (accessibility) члена. Члены в классе имеющие уровень доступности private не доступны извне класса.

Краткое резюме по терминологии членов класса:
  • Члены экземпляра: переменные и методы экземпляра. Они могут быть доступны или запущены только через ссылку на объект.
  • Переменная экземпляра - это поле аллоцированное при инстанцировании класса (т.е. при создании экземпляра класса). Также называется non-static полем или просто полем, когда контекст очевиден.
  • Метод экземпляра. Объекты одного класса разделяют между собой имплементацию методов принадлежащих к экземпляру класса.
  • Статические члены: статические переменные и методы класса. Они могут быть доступны и запущены посредством имени класса или ссылки на объект.
  • Статическая переменная - это поле аллоцированное при загрузке класса. Оно принадлежит классу и не принадлежит ни одному из объектов класса. Также называется статическим полем или переменной класса.
  • Статический метод - принадлежит классу и не принадлежит ни одному из объектов класса. Также называется методом класса.

О технологии Java

Java позволяет писать множество типов программ: приложения, апплеты, сервлеты.

Есть 3 главные Java платформы для языка программирования Java:
  • Java SE (Standard Edition) - базовая функциональность. Документация по Java Standard Edition (SE).
  • Java EE (Enterprise Edition) - надмножество над Java SE, предназначена для разработки корпоративных приложений.
  • Java ME (Micro Edition) - подмножество Java SE, предназначена для разработки мобильные и встроенных приложений.
Каждая платформа предоставляет заточенные под железо/ОС JVM и API. Java программа разработанная под одну платформу, не обязательно будет работать на JVM другой Java платформы. JVM на которой запускается Java-программа должна быть совместимо с той JVM на которой эта программа разрабатывалась.

API и инструменты для разработки и запуска Java-приложений упакованы в так называемый  JDK. JVM и библиотеки среды исполнения также упакованы в отдельный JRE (Java Runtime Environment).

Java - строго статически типизированный язык. Компилятор гарантирует выполнимость кода в среде исполнения (runtime), если код скомпилировался без ошибок. Надежность (reliability) Java обеспечивается отсутствием указателей, проверкой индексов массивов и строк во время исполнения, автоматической сборка мусора. Обработка исключений без сомнений является главным фактором способствующим разработке устойчивых (robust) систем.

В языке Java много заимствовано из C++. Но в целях простоты, не стали заимствовать препроцессор, управление указателями, перегрузку операторов, множественное наследование классов. В Java предпочли автоматическую сборку мусора, проблемам ручного управления памятью, которые приводят к утечкам памяти. Несмотря на всё это, многим кажется, что вряд ли такие присутствующие в Java вещи как синтаксис вложенных классов или подстановочные знаки (wild cards) для универсальных шаблонов (generics) упрощают язык.

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

The Java ® Language Specification: Java SE 8 Edition

Основные положения Java:
  • Код в Java инкапсулируется в классы.
  • Есть 2 типа значений:
    • Объекты являющиеся экземплярами классов и массивов.
    • Атомарные значения примитивных типов данных.
  • Ссылки хранят ссылочные значения отсылающие к объектам. Ссылки используются для манипулирования объектами.
  • Объекты в Java не могут содержать другие объекты. Они могут только содержать ссылки на другие объекты.
  • Во время исполнения заботу о больше не используемых объектах берет на себя среда исполнения.

Java предоставляет многоуровневую защиту от вредоносного кода. Язык не допускает прямого доступа к памяти. Верификатор байт-кода проверяется на безопасность любой не доверенный код (untrusted code), который загружается в JVM. Модель песочницы используется для ограничения и исполнения любого не доверенного кода, тем самым сокращая урон, который может быть нанесен этим кодом.

Java предоставляет широкую сетевую поддержку для построения распределенных систем, в которых объекты могут взаимодействовать по сети используя различные коммуникационные протоколы и технологии, например Remote Method Invocation (RMI) или сокеты.

Оформление кода Java

  • Имена классов и интерфейсов начинаются с большой буквы.
  • Имена пакетов, переменных, методов начинаются с маленькой буквы.
  • Константы пишутся заглавными буквами.
  • Имена интерфейсов начинаются с буквы I, тогда когда имеет смысл отличать их от классов.

История Java

Java Development Kit 1.0 (JDK 1.0) была выпущена в 1996 году.

В 2015 году Java праздновала свой 20-летний юбилей. Java 8 была выпущена годом ранее.

JDK 8 несмотря на своё название является одиннадцатой версией платформы. Основные изменения в JDK 8:
  • lambda expressions;
  • Streams API;
  • Date и Time API.

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

Java сертификация

Сертификационный процесс был начат компанией Sun Microsystems и продолжается корпорацией Oracle начиная с 2010 года, когда Oracle купила Sun.

Кандидат должен продемонстрировать четкое знание синтаксиса Java и всестороннее знание API классов из стандартной библиотеки. Начиная с JDK 8 разработчики должны понимать не только императивное и объектно-ориентированное, но и функциональное программирование (lambda expressions и Streams API).


Компиляция и исполнение кода на Java

Оглавление:
  • Что такое компиляция?
  • Элементы Java-приложения
  • Компиляция и запуск Java-приложения
  • JVM

Что такое компиляция?



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

Не каждая программа, написанная на языке с виртуальной машиной, переносима. Т.е. не любая программа, написанная на языке с виртуальной машиной, будет работать везде одинаково.

Исключения в Java


Классификация исключений

  • java.lang.Throwable - базовый класс для всех исключений;
  • Исключительные ситуации в пользовательском коде:
    • java.lang.Exception - базовый класс для проверяемых (checked) исключений, соответствующих ошибкам программной логики;
    • java.lang.RuntimeException - базовый класс для непроверяемых (unchecked) исключений, соответствующих ошибкам программной логики:
      • java.lang.NullPointerException;
      • java.lang.ArrayIndexOutOfBoundsException;
      • java.lang.ArithmeticException;
      • ...
  • Исключительные ситуации в JVM:
    • java.lang.Error - базовый класс для исключений, соответствующих ошибкам виртуальной машины:
      • java.lang.OutOfMemoryError;
      • java.lang.NoClassDefFoundError;
      • java.lang.VerifyError;
      • ...