
Федеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
Факультет инфокоммуникационных сетей и систем Кафедра программной инженерии и вычислительной техники
ЛАБОРАТОРНАЯ РАБОТА №1
по дисциплине «Разработка Java-приложений управления телекоммуникациями»
Выполнил: студент 3-го курса дневного отделения группы ИКПИ-85
Коваленко Леонид Александрович Преподаватель:
доцент кафедры ПИиВТ Белая Татьяна Иоанновна
Санкт-Петербург
2020

Цель работы
Ознакомиться со структурой исходного кода на Java, изучить особенности областей видимости и использования пакетов.
Ход работы
Задание №1.
Запустим компилятор javac без параметров и ознакомимся с форматом задания его опций (рис. 1, табл. 1).
Рисунок 1 — Вывод javac в консоли при запуске без параметров
Использование: javac [<опции>] <файл(-ы) с расширением .java>.
Таблица 1 — Опции javac
Опция |
|
Описание опции |
|
|
-g |
Создать всю отладочную информацию. |
|||
-g:none |
Не генерировать отладочную информацию. |
|||
-g:{lines,vars,source} |
Создавать только некоторую отладочную информацию. |
|||
-nowarn |
Не генерировать предупреждений. |
|
||
-verbose |
Выводить сообщения о том, что делает компилятор. |
|||
-deprecation |
Отобразить расположения областей исходных файлов, |
|||
в которых используются устаревшие API. |
||||
|
||||
-classpath <path> |
Где найти файлы классов пользователей и обработчики |
|||
-cp <path> |
аннотаций. |
|
|
|
-sourcepath <path> |
Где искать исходные файлы ввода. |
|
||
-bootclasspath <path> |
Переопределить |
расположение |
файлов классов |
|
начальной загрузки. |
|
|||
-extdirs <dirs> |
Переопределить |
расположение |
установленных |
|
расширений. |
|
|
||
|
|
|
||
-endorseddirs <dirs> |
Переопределить путь к одобренным стандартам. |
|||
-proc:{none,only} |
Выполняется обработка и / или компиляция аннотаций. |
|||
-processor |
Имена запускаемых обработчиков аннотаций; обходит |
|||
<class1>[,<class2>,<cla |
||||
ss3>...] |
процесс обнаружения по умолчанию. |
|
2

-processorpath <path> |
Где искать обработчики аннотаций. |
|
|
||||
-parameters |
Создание |
метаданных для |
отражения |
параметров |
|||
метода. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-d <directory> |
Где разместить сгенерированные файлы классов. |
||||||
-s <directory> |
Где разместить сгенерированные исходные файлы. |
||||||
-h <directory> |
Где разместить сгенерированные файлы собственных |
||||||
заголовков. |
|
|
|
|
|
||
|
|
|
|
|
|
||
-implicit:{none,class} |
Следует ли создавать файлы классов для файлов с |
||||||
неявной ссылкой. |
|
|
|
|
|
||
-encoding <encoding> |
Указание кодировки символов, используемой в |
||||||
исходных файлах. |
|
|
|
|
|
||
-source <release> |
Обеспечить совместимость |
исходного |
кода с |
||||
указанным выпуском. |
|
|
|
|
|||
|
|
|
|
|
|||
-target <release> |
Создание |
файлов |
классов |
для конкретной |
версии |
||
виртуальной машины. |
|
|
|
|
|||
|
|
|
|
|
|||
-profile <profile> |
Указание профиля, в котором доступен используемый |
||||||
API. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-version |
Информация о версии. |
|
|
|
|
||
-help |
Вывод краткого обзора стандартных опций. |
|
|
||||
-Akey[=value] |
Параметры для передачи обработчикам аннотаций. |
||||||
-X |
Вывод краткого обзора нестандартных опций. |
|
|||||
-J<flag> |
Установка |
флага |
<flag> |
непосредственно |
системе |
||
времени выполнения. |
|
|
|
|
|||
|
|
|
|
|
|||
-Werror |
Прекращение |
компиляции |
при |
появлении |
|||
предупреждений. |
|
|
|
|
|
||
|
|
|
|
|
|
||
@<filename> |
Чтение параметров и имен файлов из файла. |
|
|
||||
Запустим программу java без параметров и ознакомимся с форматом |
задания опций запуска виртуальной машины Java — JVM (рис. 2, табл. 2).
Рисунок 2 — Вывод java в консоли при запуске без параметров
Использование: java [<опции>] <файл с расширением .class> [<args>]. Также: java [<опции>] -jar <файл с расширением .jar> [<args>].
3
Таблица 2 — Опции java |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Опция |
|
|
Описание опции |
|
|
|
||
-d32 |
Использовать |
32-битную |
модель |
данных, |
если |
|||
она доступна. |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
-d64 |
Использовать |
64-битную |
модель |
данных, |
если |
|||
она доступна. |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
-server |
Выбрать «серверную» ВМ (по умолчанию). |
|
||||||
-zero |
Выбрать «нулевую» ВМ. |
|
|
|
|
|
||
-dcevm |
Выбрать виртуальную машину «dcevm». |
|
|
|||||
-cp <class search path of |
|
|
|
|
|
|
|
|
directories and zip/jar |
Разделенный список каталогов, архивов JAR и |
|||||||
files> |
||||||||
-classpath <class search |
архивов ZIP для поиска файлов классов. |
|
|
|||||
path of directories and |
|
|
|
|
|
|
|
|
zip/jar files> |
|
|
|
|
|
|
|
|
-D<name>=<value> |
Установить системное свойство. |
|
|
|
||||
-verbose:[class|gc|jni] |
Включить подробный вывод. |
|
|
|
||||
-version |
Вывод версии продукта и выход. |
|
|
|
||||
|
Предупреждение: эта функция устарела и будет |
|||||||
-version:<value> |
удалена в следующем выпуске. |
|
|
|
||||
|
Требование указанной версии для запуска. |
|
||||||
-showversion |
Вывод версии продукта и продолжение. |
|
|
|||||
|
Предупреждение: эта функция устарела и будет |
|||||||
-jre-restrict-search | - |
удалена в следующем выпуске. |
|
|
|
||||
no-jre-restrict-search |
Включить / исключить частные JRE пользователя |
|||||||
|
в поиске версий. |
|
|
|
|
|
||
-? -help |
Вывод этого справочного сообщения. |
|
|
|||||
-X |
Вывод справки по нестандартным опциям. |
|
||||||
- |
|
|
|
|
|
|
|
|
ea[:<packagename>...|:<cla |
Включить |
утверждения |
с |
заданной |
степенью |
|||
ssname>] |
||||||||
- |
детализации. |
|
|
|
|
|
|
|
enableassertions[:<package |
|
|
|
|
|
|
||
name>...|:<classname>] |
|
|
|
|
|
|
|
|
- |
|
|
|
|
|
|
|
|
da[:<packagename>...|:<cla |
Отключить |
утверждения |
с |
указанной |
степенью |
|||
ssname>] |
||||||||
- |
детализации. |
|
|
|
|
|
|
|
disableassertions[:<packag |
|
|
|
|
|
|
||
ename>...|:<classname>] |
|
|
|
|
|
|
|
|
-esa | - |
Включить системные assertions. |
|
|
|
||||
enablesystemassertions |
|
|
|
|||||
-dsa | - |
Отключить системные assertions. |
|
|
|
||||
disablesystemassertions |
|
|
|
|||||
- |
Загрузить |
собственную |
|
библиотеку |
агента |
|||
agentlib:<libname>[=<optio |
|
|||||||
ns>] |
<libname>. |
|
|
|
|
|
|
|
- |
Загрузить собственную библиотеку агента по |
|||||||
agentpath:<pathname>[=<opt |
||||||||
ions>] |
полному пути. |
|
|
|
|
|
|
|
- |
Загрузить агент языка программирования Java, |
|||||||
javaagent:<jarpath>[=<opti |
||||||||
ons>] |
см. java.lang.instrument. |
|
|
|
|
|
4

|
|
|
|
|
-splash:<imagepath> |
Отображение |
заставки |
с |
указанным |
изображением. |
|
|
|
|
|
|
|
|
Задание №2.
Создадим файл MyFirstProgram.java, содержащий исходный код пустого класса с именем MyFirstClass. Откомпилируем его с помощью компилятора javac. Запустим полученный файл класса MyFirstClass.class (рис. 3).
Рисунок 3 — Компиляция и запуск с ошибкой На вход компилятора нужно подавать имя файла с расширением, а на
вход JVM — без расширения.
Ошибка, описанная в выводе, указывает на то, что главный метод не был найден в классе MyFirstClass. Его нужно добавить как «public static void main(String[] s)». Внутри этого метода добавим команду вывода строки «Hello world!!!», используя статический метод println статического экземпляра out класса PrintStream в классе System (рис. 4).
Рисунок 4 — Компиляция и запуск без ошибки, вывод «Hello world!!!» Задание №3.
Заменим код метода main() на следующий:
for (int i = 0; i < args.length(); ++i) System.out.println(args[i]);
Откомпилируем и запустим программу, добавив в командную строку ряд аргументов (рис. 5).
5

Рисунок 5 — Компиляция и запуск программы, выводящей аргументы командной строки
Как видно, каждый аргумент выводится с новой строки. Задание №4.
В том же файле MyFirstProgram.java после определения класса MyFirstClass добавим определение второго класса MySecondClass, реализующего следующую функциональность:
—два приватных поля типа int;
—методы для получения (геттеры) и модификации (сеттеры) значений;
—конструктор, создающий объект и инициализирующий его поля;
—методы с возвращающим типом int, реализующие над этими числами действия.
Список действий над числами: 1. Сложение; 2. Вычитание; 3. Умножение; 4. Деление;
5. Взятие остатка от деления;
6. Побитовое «И»;
7. Побитовое «ИЛИ»;
8. Побитовое «Исключающее ИЛИ»;
9. Выбор максимального из чисел;
10. Выбор минимального из чисел. Код программы представлен в табл. 3.
6

Таблица 3 — Код MyFirstProgram.java
class MyFirstClass { // Точка входа
public static void main(String[] args) { MySecondClass obj = new MySecondClass(0, 0); for (int i = 1; i <= 4; ++i) {
obj.setA(i);
for (int j = 1; j <= 4; ++j) { obj.setB(j);
System.out.println("Numbers: " + obj.getA() + ", " +
obj.getB());
System.out.println("Add: " + obj.add()); System.out.println("Sub: " + obj.sub()); System.out.println("Mul: " + obj.mul()); System.out.println("Div: " + obj.div()); System.out.println("Mod: " + obj.mod()); System.out.println("And: " + obj.and()); System.out.println("Or: " + obj.or() ); System.out.println("Xor: " + obj.xor()); System.out.println("Max: " + obj.max()); System.out.println("Min: " + obj.min() + "\n");
}
}
}
}
class MySecondClass {
// Конструктор с параметрами
public MySecondClass(int operandA, int operandB) { this.operandA = operandA;
this.operandB = operandB;
}
//Метод для получения значения первого операнда public int getA() {
return operandA;
}
//Метод для получения значения второго операнда public int getB() {
return operandB;
}
//Метод для модификации значения первого операнда public void setA(int operandA) {
this.operandA = operandA;
}
//Метод для модификации значения второго операнда public void setB(int operandB) {
this.operandB = operandB;
}
//Сложение двух операндов
public int add() {
return operandA + operandB;
}
//Вычитание двух операндов public int sub() {
return operandA - operandB;
}
//Умножение двух операндов public int mul() {
return operandA * operandB;
}
//Деление двух операндов public int div() {
return operandA / operandB;
}
7

//Взятие остатка от деления public int mod() {
return operandA % operandB;
}
//Побитовое "И"
public int and() {
return operandA & operandB;
}
//Побитовое "ИЛИ" public int or() {
return operandA | operandB;
}
//Побитовое "Исключающее ИЛИ" public int xor() {
return operandA ^ operandB;
}
//Выбор максимального из чисел public int max() {
return operandA > operandB ? operandA : operandB;
}
//Выбор минимального из чисел
public int min() {
return operandA < operandB ? operandA : operandB;
}
// Два приватных поля: операнды private int operandA, operandB;
}
Вывод программы представлен в табл. 4 (слева-направо, сверху-вниз). Таблица 4 — Вывод программы
Numbers: 1, 1 |
Numbers: 1, 2 |
Numbers: 1, 3 |
Numbers: 1, 4 |
Add: 2 |
Add: 3 |
Add: 4 |
Add: 5 |
Sub: 0 |
Sub: -1 |
Sub: -2 |
Sub: -3 |
Mul: 1 |
Mul: 2 |
Mul: 3 |
Mul: 4 |
Div: 1 |
Div: 0 |
Div: 0 |
Div: 0 |
Mod: 0 |
Mod: 1 |
Mod: 1 |
Mod: 1 |
And: 1 |
And: 0 |
And: 1 |
And: 0 |
Or: 1 |
Or: 3 |
Or: 3 |
Or: 5 |
Xor: 0 |
Xor: 3 |
Xor: 2 |
Xor: 5 |
Max: 1 |
Max: 2 |
Max: 3 |
Max: 4 |
Min: 1 |
Min: 1 |
Min: 1 |
Min: 1 |
Numbers: 2, 1 |
Numbers: 2, 2 |
Numbers: 2, 3 |
Numbers: 2, 4 |
Add: 3 |
Add: 4 |
Add: 5 |
Add: 6 |
Sub: 1 |
Sub: 0 |
Sub: -1 |
Sub: -2 |
Mul: 2 |
Mul: 4 |
Mul: 6 |
Mul: 8 |
Div: 2 |
Div: 1 |
Div: 0 |
Div: 0 |
Mod: 0 |
Mod: 0 |
Mod: 2 |
Mod: 2 |
And: 0 |
And: 2 |
And: 2 |
And: 0 |
Or: 3 |
Or: 2 |
Or: 3 |
Or: 6 |
Xor: 3 |
Xor: 0 |
Xor: 1 |
Xor: 6 |
Max: 2 |
Max: 2 |
Max: 3 |
Max: 4 |
Min: 1 |
Min: 2 |
Min: 2 |
Min: 2 |
Numbers: 3, 1 |
Numbers: 3, 2 |
Numbers: 3, 3 |
Numbers: 3, 4 |
Add: 4 |
Add: 5 |
Add: 6 |
Add: 7 |
Sub: 2 |
Sub: 1 |
Sub: 0 |
Sub: -1 |
Mul: 3 |
Mul: 6 |
Mul: 9 |
Mul: 12 |
Div: 3 |
Div: 1 |
Div: 1 |
Div: 0 |
Mod: 0 |
Mod: 1 |
Mod: 0 |
Mod: 3 |
And: 1 |
And: 2 |
And: 3 |
And: 0 |
Or: 3 |
Or: 3 |
Or: 3 |
Or: 7 |
Xor: 2 |
Xor: 1 |
Xor: 0 |
Xor: 7 |
Max: 3 |
Max: 3 |
Max: 3 |
Max: 4 |
8