Наконец, давайте создадим официальную программу (заметка ⑤). Она выводит информацию о текущей системе и использует различные методы объекта System
из стандартной библиотеки Java. Обратите внимание, что здесь используется дополнительный стиль комментариев: //
. Он указывает, что всё до конца строки является комментарием:
// Property.java
import java.util.*;
public class Property {
public static void main(String[] args) {
System.out.println(new Date());
Properties p = System.getProperties();
p.list(System.out);
System.out.println("--- Использование памяти:");
Runtime rt = Runtime.getRuntime();
System.out.println("Общее количество памяти = "
+ rt.totalMemory()
+ " Свободная память = "
+ rt.freeMemory());
}
}
⑤: В некоторых средах разработки программа может пролететь мгновенно, даже не успев показать результат. Вы можете поместить следующий код в конце метода main()
, чтобы приостановить выполнение:
try {
Thread.currentThread().sleep(5 * 1000);
} catch(InterruptedException e) {}
}
```Этот код приостанавливает выполнение программы на 5 секунд. Некоторые концепции, используемые в этом коде, будут рассмотрены позже в книге. Поэтому сейчас нет необходимости углубленно изучать этот код; достаточно знать, что это способ приостановить выполнение программы. В начале каждого файла программы следует включить инструкцию `import`, чтобы импортировать все дополнительные классы, необходимые для выполнения кода этого файла. Обратите внимание, что мы говорим о них как о "дополнительных", потому что специальная библиотека автоматически импортируется в каждый Java-файл: `java.lang`. Откройте свой веб-браузер и просмотрите пользовательскую документацию, предоставленную Oracle (если вы ещё не скачали её с `https://docs.oracle.com/javase/` или установили другим способом, немедленно сделайте это). В файле `packages.html` можно найти названия всех библиотек классов, предоставляемых вместе с Java. Выберите `java.lang`. Под разделом "Class Index" находится список всех классов, входящих в эту библиотеку. Поскольку `java.lang` автоматически входит в каждый Java-кодовый файл, эти классы могут использоваться в любое время без дополнительной записи `import`. В этом списке можно найти `System` и `Runtime`, которые мы использовали в `Property.java`. Класс `Date` не указан в `java.lang`, поэтому его необходимо импортировать из другой библиотеки.Если вы не уверены, в какой библиотеке находится конкретный класс, или хотите просмотреть все классы, выберите "Class Hierarchy" (иерархия классов) в пользовательской документации Java. Хотя создание этой структуры в веб-браузере может занять некоторое время, она позволяет легко находить любой класс, предоставляемый вместе с Java. Затем используйте функцию поиска ("Find") вашего браузера для поиска ключевых слов `Date`. После такого поиска вы обнаружите, что ваш объект представлен в виде `java.util.Date`. Теперь вы знаете, что он расположен в библиотеке `util`, поэтому вам необходимо импортировать `java.util.*`; в противном случае использование `Date` невозможно. Просмотрите начальную часть документа `packages.html` (который я установил как свою основную страницу по умолчанию), выберите `java.lang`, затем `System`. Вы увидите несколько полей в классе `System`. Если вы выберете `out`, то узнаете, что это объект типа `static PrintStream`. Поскольку он является "статическим", нам не требуется создавать его самостоятельно. Объект `out` всегда существует, поэтому мы можем использовать его сразу. Возможности, предоставляемые этим объектом `out`, зависят от его типа: `PrintStream`. В описании `PrintStream` приведена гиперссылка, которая очень удобна для просмотра всех методов, доступных для этого типа. Количество этих методов довольно велико, но подробнее они будут рассмотрены позже в книге.Сейчас нас интересует только метод `println()`. Этот метод означает "вывести переданное значение на консоль с новой строки". Поэтому при любом желании вывести информацию на консоль в Java программе можно просто написать `System.out.println("сообщение")`.Имя класса совпадает с именем файла. Если вы создаёте независимую программу, как сейчас, один из классов в файле должен иметь такое же имя, как и сам файл (если этого не сделать, компилятор сообщит вам об этом). Внутри этого класса должен быть метод `main()`, который имеет следующий вид:
```java
public static void main(String[] args) {
Ключевое слово public
указывает на то, что этот метод может быть вызван извне (подробнее об этом будет объяснено в главе 5). Аргументы метода main()
представляют собой массив объектов типа String
. Аргумент args
не используется в данной программе, но он должен быть указан здесь, так как он хранит аргументы командной строки.
Первая строка программы весьма интересна:
System.out.println(new Date());
```Обратите внимание на её параметр: единственная цель создания объекта `Date` — передача его значения методу `println()`. Как только эта строка выполнится, объект `Date` больше не потребуется. Garbage collector заметит это и освободит память, занимаемую этим объектом, когда это будет возможно. На самом деле, нам не обязательно заботиться о деталях очистки. Вторая строка вызывает `System.getProperies()`. Если использовать веб-браузер для просмотра онлайн-документации, можно узнать, что `getProperties()` является статическим методом класса `System`. Поскольку он является "статическим", его можно вызвать без создания какого-либо объекта. Методы с модификатором `static` доступны всегда независимо от того, существует ли экземпляр данного класса. При вызове `getProperties()`, он генерирует системные свойства как объект класса `Properties` (обратите внимание, что `Properties` означает "свойства"). В последующей ссылке этот объект сохраняется в переменной типа `Properties`, которая называется `p`. На третьей строке видно, что объект класса `Properties` имеет метод `list()`, который отправляет все свои содержимое в объект типа `PrintStream`, переданный в качестве аргумента. Четвёртая и шестая строки метода `main()` являются типичными операторами вывода. Обратите внимание, что для печати нескольких значений типа `String` используется знак плюса (`+`). Однако здесь также следует обратить внимание на некоторые странные вещи.При использовании знака плюса с объектами типа `String`, он не представляет собой настоящего «соединения» или «сложения». В большинстве случаев при работе со строками нам не нужно беспокоиться о каких-либо специальных свойствах знака `+`. Однако класс `String` в Java подчиняется механизму, известному как «перегрузка операторов», который делает знак плюса специальным только при его использовании с объектами типа `String`. Это значит, что знак плюса будет иметь другое значение, когда используется вместе с объектами типа `String`.Однако история не заканчивается здесь. Обратите внимание на следующий оператор:
```java
System.out.println("Общее количество памяти = "
+ rt.totalMemory()
+ " Свободная память = "
+ rt.freeMemory());
Здесь методы totalMemory()
и freeMemory()
возвращают значения типа long
, а не объекты типа String
. Что произойдет, если мы попробуем сложить число с строкой? Как и мы, компилятор осознает эту проблему и вызывает метод, который преобразует это число (например, int
, float
) в строку. После этого они могут быть объединены с помощью знака плюса. Этот процесс автоматического преобразования типов также относится к категории «перегрузка операторов».
Многие книги по Java активно обсуждают полезность «перегрузки операторов» (это свойство C++). В данном случае это может считаться примером недостатков этой возможности! Тем не менее, это больше является вопросом компилятора (или программы) и относится только к объектам типа String
. Для любого исходного кода, который вы пишете самостоятельно, невозможно выполнить перегрузку операторов.Пятая строка main()
создаёт объект типа Runtime
, вызывая метод getRuntime()
. Возвращаемым значением является ссылка на объект типа Runtime
. Мы можем не беспокоиться о том, является ли этот объект статическим или создан с помощью ключевого слова new
. Это потому, что мы не отвечаем за очистку объекта и можем использовать его без ограничений. Как показано выше, объект типа Runtime
позволяет получить информацию о использовании памяти.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )