Исходный текст программ на Java состоит из совокупности пробелов, знаков окончания строки, табуляций, идентификаторов, литералов, комментариев, операторов, разделителей и ключевых слов.
Сразу стоит отметить, что Java чувствительна к регистру символов . Поэтому, к примеру, идентификаторы demo, Demo, DEMO и т.п. не являются в Java одним и тем же идентификатором, это все РАЗНЫЕ идентификаторы.
Это надо усвоить сразу, раз и на всегда!
Условно код программы на Java можно условно разделить на три части:
- Незначащие символы
- Комментарии
- Лексемы
Незначащие символы – символы не служащие для генерации какого-либо кода или данных
- пробелы
- табуляция
- ограничители строк (LF – символ новой строки, CR – возврат каретки, CR+LF)
Комментарии – служат для пояснения текста программы или генерации документации, не генерируют ни какой исполняемый код
- однострочные // текст комментария
- блочные /* текст комментария */
- комментарии документации /** документация */
Лексемы – это элементарные конструкции языка, из которых транслятор javac генерирует исполняемый байт-код, который может быть выполнен виртуальной машиной Java.
#2 Структура программы, переменные, константы, оператор присваивания | Java для начинающих
Незначащие символы и комментарии являются разделителями для лексем, но ни как не влияют на скомпилированный код.
В Java существуют следующие виды лексем:
- Идентификаторы
- Ключевые слова
- Литералы
- Разделители
- Операторы
Идентификатором является любое символическое имя какого-либо элемента в Java программе. Идентификатором может выступать имя класса, метода, параметра и переменной. Идентификатор должен начинаться с буквы, символа подчеркивания (_) или с валютного символа Unicode (например, $, £, ¥). За начальным символом может следовать любое количество букв, цифр, символов подчеркивания или валютных символов. Следует помнить, что Java использует множество символов Unicode, куда входит довольно много букв и цифр, не входящих во множество символов ASCII. Ниже представлены разрешенные идентификаторы:
i
engine3
theCurrentTime
the_current_time
θ
переменная
Идентификаторы могут содержать цифры, но не могут начинаться с цифры . Более того, идентификаторы не могут содержать знаков пунктуации, за исключением подчеркивания и валютных знаков . Обычно знак доллара и другие валютные знаки остаются в резерве для автоматического генерирования кода компилятором или другим препроцессором. Лучше избегать этих символов в создаваемых идентификаторах.
В состав идентификатора может входить любой разрешенный символ UTF-8, именно поэтому идентификаторы переменная и θ являются допустимыми идентификаторами в Java. Хотя использование не-ASCII идентификаторов является допустимым в Java, но обычно этим не пользуются и предпочитают символы латинского алфавита.
Еще одно существенное ограничение: в качестве идентификаторов нельзя применять ключевые слова и литералы (такие как true, false и null), являющиеся частью самого языка Java .
СТРУКТУРА КОДА JAVA #2 JAVA ДЛЯ ДЕБИЛОВ | ПОЛНЫЙ ТУТОРИАЛ ПО ДЖАВЕ С НУЛЯ
На заметку! Начиная с версии JDK 8, сам знак подчеркивания не рекомендуется употреблять в качестве идентификатора.
Ключевые слова языка Java сейчас насчитывают 50 слов которые вместе с синтасисом операторов и разделителей образуют основу языка Java. Их нельзя использовать ни в качестве идентификаторов, ни для обозначения имен переменных, классов или методов.
Кроме ключевых слов, в Java зарезервированы так же слова true, false и null, являющиеся литералами. Они представляют значения, определенные в специикац языка Java. Их, так же нельзя использовать для обозначения имен переменных классов и т.п.
Обратите внимание, что const и goto являются зарезервированными словами, но не представляют собой часть языка Java.
Литералы позволяют задать непосредственно в коде программы значения для числовых, символьных, логических и строковых выражений. В Java определены следующие типы литералов:
- целый (integer) – по умолчанию имеет тип данных int
примеры: 55 (десятичное), 555_555 (десятичное 555555, этот формат введен в Java 7),
7000000000L (десятичное тип long, ASCII символ L в любом регистре)
07 (восьмеричное начинается с нуля, цифры 8 и 9 запрещены),
0xFF, 0XFF или 0xff (шестнадцатеричное, ASCII символ X в любом регистре, шестнадцатеричные значения A, B, C, D, Е и F, так же могут записывать в любом регистре),
0b0101 или 0B0101 (двоичное, ASCII символ B в любом регистре, введен в Java 7) - вещественный (floating-point) – по умолчанию имеет тип данных double
примеры: 5.5 (тип double), 5.5f или 5.5F (тип float, ASCII символ F в любом регистре),
5. (5.0 тип double), .24f (0.24 тип float), 0.125e4 или 0.125E4 (тип double, ASCII символ Е в любом регистре), 1600e-2 (тип double) - логический (boolean) – пример: true или false
- символьный (charaster) – может содержать один символ из набора Unicode, заключенный в одинарные кавычки, специальную последовательность (управляющие символы) начинающуюся со знака косой черты –
Управляющие символы:
b – backspase BS — забой
t – horizontal tab HT — табуляция
n – line feed LF – конец строки
f – form feed FF – конец страницы
r – carriage return CR – возврат каретки
” – двойная кавычка
’ – одинарная кавычка
\ – backslash – обратная косая черта
uxxxx – символ Unicode, где xxxx цифровой код символа Unicode
xxx – символ кодовой таблицы Latin-1, где xxxвосьмеричный код символа Latin-1
примеры: ‘A’, u0950, b, t, 333 и т.п. - строковый (string) – всегда имеет тип String и ссылается на экземпляр класса String. Состоит из нуля или большего количества символов, каждый символ может быть предствлен Unicode последовательностью, так же может содержать строковый литерал.
примеры: “”, “string”, “symbol u0950”, “test t test” - null-литерал (null-literal) – это литерал ссылочного типа, причем эта ссылка null ни куда не ссылается.
пример: null
Логические литералы true и false, а так же null литерал являются зарезервированными словами в Java. Их относят к литералам, поскольку с их помощью задаются значения для переменных или ссылок.
Так же тут были затронуты разные типы данных (int, long, double и float), которые мы рассмотрим чуть позже, в другом разделе.
Разделители – это специальные символы, которые используются в служебных целях языка. В Java существуют следующие 12 разделителей:
Операторы – используются в различных операциях: арифметических, логических, битовых, сравнения и присваивания. Ниже представлены все операторы Java:
Более подробно мы их рассмотрим чуть позже.
Ну и на последок, чтобы лексическая структура Java лучше уложилось в голове, можно запомнить простую диаграмму:
Несколько хороших видео по этой теме приведены ниже. Хотя они и от 2009 года и некоторые новшества в языке там отсутствуют, но все же они весьма полезны и я очень рекомендую их посмотреть.
Источник: pr0java.blogspot.com
Структура Java-программы
Все Java-программы содержат в себе четыре разновидности блоков: классы (classes), методы (methods), переменные (variables) и пакеты (package).
Классы представляют собой основу объектно-ориентирован-ных свойств языка. Классы содержат переменные и методы. Методы есть не что иное как функции или подпрограммы. В переменных хранятся данные.
Пакеты содержат в себе классы и помогают компилятору найти те классы, которые нужны ему для компиляции пользовательской программы. Классы, входящие в один пакет, особым образом зависят друг от друга. Например, приложение Hello импортирует пакет java.util, в котором содержится класс Date.
Java-программа может содержать в себе любое количество классов, но один из них всегда имеет особый статус и непосредственно взаимодействует с оболочкой времени выполнения (первичный класс). Для приложений первичный класс должен обязательно содержать метод main ().
Переменные
В Java существует два вида переменных:
— примитивные типы (primitive types). К ним относятся стандартные, встроенные в язык типы для представления численных значений, одиночных символов и булевских (логических) значений. Все примитивные типы имеют предопределенный размер занимаемой ими памяти.
— ссылочные типы (reference type) — относятся типы, определенные пользователем (классы, интерфейсы) и типы массивов. Все ссылочные типы являются динамическими типами, для них выделяется память во время работы программы.
Переменные примитивных типов передаются в методы по значению, тогда как ссылочные переменные всегда передаются по ссылке.
Примитивные типы. Всего в Java определено восемь примитивных типов: int (4b), short (2b), byte (1b), long (8b), float (4b), double (8b), boolean (true, false), char (2b).
Первые шесть типов предназначены для хранения численных значений, с ними можно производить арифметические операции. Тип char предназначен для хранения символов в стандарте Unicode (2 байта). Булевские (логические) переменные могут иметь одно из двух допустимых значений: true или false.
Ссылочные типы. Переменной ссылочного типа выделяется память при помощи оператора new. Таким образом, каждая переменная ссылочного типа является объектом или экземпляром соответствующего типа.
Типы, определенные пользователем. Язык Java позволяет определять новые типы помощью новых классов. Рассмотрим пример определения и использования нового класса (нового типа) MyType:
Пример 1.1. Файл NewClass.java
public int myData=5; // переменная-элемент класса
System.out.println(«Constructor without parameters»);
System.out.print(«Constructor with one parameter»);
System.out.println(» Setting myData=»+v);
// Реализация объектов и действия с ними
public static void main(String[] args)
// объект obj1 — реализация класса MyType
MyType obj1=new MyType();
obj1.myMethod(); // использование метода
// доступ к открытой переменной
// объект obj2 — реализация класса MyType
MyType obj2=new MyType(100);
// доступ к открытой переменной
Класс String (тип строковых переменных). Класс String – это класс неизменяемых строк. Данный класс представляет собой гибрид примитивных и ссылочных типов. В основе своей тип String является ссылочным типом, содержащий в себе методы и переменные. Но в то же время этот тип проявляет некоторые свойства примитивного типа, что выражается, в том, как осуществляется присвоение значение этим переменным при помощи знака операции = (но можно для инициализации создаваемых объектов пользоваться и явным вызовом конструктора), например:
String S1=»Hello»; // 1-ый способ инициализации
String S2=new String(«Hello»); // 2-ый способ инициализации
Кроме того, строковый тип проявляет свойства примитивных типов в том, что для конкатенации (сложения) двух строк можно использовать знак операции +, например:
String S2=new String(S0+»myInt»+myInt);
Несмотря на поддержку таких операций, строковые переменные типа String являются в то же время и объектами, для них можно вызывать методы класса String, например, узнать длину строки:
Итак, тип String является особым — этоединственный класс, переменные которого могут объявляться и использоваться без применения оператора new.
Типы массива. Типы массива используются для определения массивов — упорядоченного набора однотипных переменных. Можно определить массив любого существующего типа, включая типы, определенные пользователем. Кроме того, можно пользоваться и массивами массивов или многомерными массивами.
Создание массивов требует использования оператора new, например:
// объявление ссылочной переменной типа массив
intArray=new int[3]; // создание массива целого типа
// создание двумерного массива вещественного типа
float[][] flArray = new float[2][3];
// создание массива и инициализация
// создание и инициализация двумерного массива переменных целых
Массивы Java имеют три важных преимущества перед массивами других языков:
— программисту не обязательно указывать размер массива при его объявлении;
— любой массив в языке Java является переменной — а это значит, что его можно передать как параметр методу и использовать в качестве значения, возвращаемого методом;
— размер массива в любой момент времени можно узнать через специальную переменную length, имеющуюся в каждом массиве, например:
Классы
Статические и динамические элементы класса. Если при определении элемента не используется ключевое слово static, то этот элемент по умолчанию является динамическим (dynamic).
Динамические методы и переменные всегда являются элементами объекта класса, и доступ к ним осуществляется через переменную-объект.
ИмяОбъекта.ИмяПеременнойЭкземпляра
ИмяОбъекта.ИмяМетодаЭкземпляра()
Статические методы и переменные связаны с классом, а не с экземпляром класса, и являются элементами класса. Их можно использовать без создания объекта этого класса, доступ осуществляется через имя класса.
ИмяКласса.ИмяПеременнойКласса
ИмяКласса.ИмяМетодаКласса()
Статические методы класса могут работать только со статическими переменными класса, для которых также не важно наличие реализованного объекта. Эти элементы класса используются всеми объектами класса (для всех объектов существует только один экземпляр статической переменной).
Источник: megalektsii.ru
Русские Блоги
Опыт обучения Java-разработке (три): структура проекта
3 Структура проекта
После предыдущей серии исследований я почти получил определенное представление о процессе разработки Java. Чтобы поддерживать хорошую структуру проекта с учетом следующей разработки, вам также необходимо изучить структуру проекта Java.
Следующие две структуры проекта используются в качестве справочных.
Первый — это демонстрация, когда я учился один, пока я изучал и создавал файлы, должны быть некоторые ошибки, а второй — изображение с более четкой структурой, увиденное из Интернета.
Структура рисунка 1 немного более полная, поэтому давайте поговорим о рисунке 1 как о его основной части.
3.1 src
Поскольку я использую Maven, две основные папки проекта в общем направлении — это src и target, а также файл конфигурации pom.xml. В каталоге src находятся файлы исходного кода, файлы конфигурации и файлы ресурсов проекта. level Две папки: основная и тестовая.
3.1.1 main
Основная папка — это основной исходный файл проекта, а затем две папки ниже: java и ресурсы, на самом деле, это также упоминается выше, и, как следует из названия, java — это исходный файл, а resources — это файл ресурсов.
3.1.1.1 java
Приведенная ниже файловая структура может относиться к рисунку 2 выше, который примерно соответствует модели-сопоставителю-сервис-контроллеру, а также существуют другие общедоступные классы и уровни представления, которые разделены на отдельную главу ниже.
3.1.1.2 resources
Папка ресурсов по умолчанию выглядит так. Application.properties используется для заполнения различных конфигураций, таких как информация о конфигурации подключения к базе данных, информация о конфигурации компонента журнала и т. Д. Некоторые люди изменят имя суффикса yml, но формат внутри не соответствует то же самое. Об этом уже упоминалось ранее, поэтому я не буду повторять это здесь.
Кроме того, в этой папке находятся файлы конфигурации различных компонентов.
Другая основная функция — хранить статические файловые ресурсы, включая jsp, html, css, js, изображения и т. Д., К которым необходимо получить доступ, а также шаблоны кода.
- Файл конфигурации проекта: resources / application.yml
- Каталог статических ресурсов: resources / static /
—— используется для хранения html, css, js, изображений и других ресурсов. - Просмотр каталога шаблонов: resources / templates /
—— используется для хранения файлов шаблонов, таких как jsp и тимелеаф. - Файл сопоставления mybatis: resources / mapper / (проект mybatis)
- Файл конфигурации mybatis: resources / mapper / config / (проект mybatis)
3.1.2 test
Как упоминалось в названии, для модульного тестирования
3.2 target
Цель состоит в том, чтобы сохранить файлы и каталоги после сборки проекта, пакеты jar, пакеты war, скомпилированные файлы классов и т. Д.
Весь контент в цели создается при построении maven
Пакет Jar — это своего рода формат документа файла архива java java. jar файл очень похож на zip
WAR — это формат веб-приложений, предложенный Sun. Подобно JAR, это также сжатый пакет из множества файлов. Файлы в этом пакете организованы в соответствии с определенной структурой каталогов:
Обычно его корневой каталог содержит файлы Html и Jsp или каталоги, содержащие эти два файла, а также каталог WEB-INF, что очень важно. Обычно в каталоге WEB-INF есть файл web.xml и каталог классов, web.xml — это файл конфигурации этого приложения, а каталог классов содержит скомпилированные классы сервлетов и другие классы, от которых зависит Jsp или сервлет (например, JavaBean).
Обычно эти зависимые классы также могут быть упакованы в JAR и помещены в каталог lib в WEB-INF, конечно, также могут быть помещены в CLASSPATH системы, но это неудобно для трансплантации и управления
Весь контент в цели создается при построении maven
4 Файловая структура проекта Java
Нет необходимости объяснять традиционные три уровня. В Java соответствующий уровень доступа к данным — это DAO, который выполняет взаимодействие с данными, а соответствующий уровень бизнес-логики — это уровень сервиса. Напишите здесь код логики, а затем уровень пользовательского интерфейса.
4.1 Объяснение нескольких объектов
Упомянутый выше DAO, вот краткий разговор о некоторых связанных аббревиатурах, я видел это в некотором исходном коде, я был немного сбит с толку, когда был новичком
- PO (постоянный объект): постоянный объект, может рассматриваться как объект Java, сопоставленный с таблицей в базе данных. Простейший PO соответствует записи в таблице в базе данных, а несколько записей могут быть коллекцией PO. Заказ на покупку не должен содержать никаких операций с базой данных. юридическое лицо
- VO (объект значения): объект значения, обычно используемый для передачи данных между бизнес-уровнями, так же, как PO содержит только данные. Но это должен быть абстрактный бизнес-объект, который может соответствовать таблице или нет, в зависимости от потребностей бизнеса. Может быть, это Get / Set?
- DAO (объект доступа к данным): объект доступа к данным, используемый для доступа к базе данных, который содержит различные операции с базой данных и взаимодействует с VO для CRUD.
- DTO (объект передачи данных): объект передачи данных — это простой контейнер агрегированных данных, которые необходимо передавать через процессы или границы сети. Он не должен содержать бизнес-логику и ограничивать свое поведение такими действиями, как проверки внутренней согласованности и базовая проверка. Сначала я подумал, что это коммерческое предприятие, но это была не вещь, это был БО.
Использование DTO:
Например, если наша таблица имеет 100 полей, то соответствующий PO имеет 100 атрибутов. Но пока в нашем интерфейсе отображается 10 полей, клиент использует веб-службу для получения данных. Нет необходимости передавать клиенту весь PO-объект. В настоящее время мы можем использовать DTO только с этими 10 атрибутами для передать результат клиенту.
Это не приведет к раскрытию структуры таблицы сервера. После прибытия к клиенту, если этот объект используется для соответствия отображению интерфейса, его идентификатор будет изменен на VO. DTO также имеет функции уменьшения количества запросов, упрощения объектов передачи и предотвращения дублирования кода.
- ORM (O / R Mapping, Object Relational Mapping): реляционное отображение объектов
4.2 Как разработать фактический проектный документ
- Компонент — это объект, соответствующий полю базы данных.
- DAO, как я сказал ранее, но есть много разных способов его написания. Использование Mybatis означает файл интерфейса Mapper или метод записи xml. Если также используется JPA, будет файл класса репозитория.
- Сервис, похоже, по поводу написания много споров, вы можете прочитать эту статьюСколько людей неправильно используют service + serviceImpl, и сколько людей злоупотребляют myBatis
Я видел интерфейс ServiceImpl во многих местах, класс обслуживания написан, я никогда не понимал, почему это необходимо делать так много раз, но я все же сделал это, как упоминалось в статья выше Это устаревший способ написания. Использование файлов интерфейса заключается в решении проблемы нескольких уровней доступа к данным, которые могут подключаться к различным базам данных, поэтому необходимо реализовать только соответствующую структуру, и эта проблема не существует с Mybatis, Значит нет необходимости писать файл интерфейса impl, используйтеservice+dao+mapper.xml Лучший выбор - Контроллер, здесь обсуждается только MVC, написания обычного java web еще нет, и тогда контроллер должен перейти прямо на HTML-страницу в файле ресурсов
- Вышеупомянутое идет снизу вверх в дополнение к некоторым общим уровням: библиотека классов инструментов (utils), класс конфигурации (config), объект передачи данных (dto), объект упаковки представления (vo)
Источник: russianblogs.com