1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-thinking-in-java-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
2.7 我们的第一个Java程序.md 14 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 11.03.2025 09:15 d56454c

2.7 Наши первые Java-программы

Наконец, давайте создадим официальную программу (заметка ⑤). Она выводит информацию о текущей системе и использует различные методы объекта 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-thinking-in-java-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-thinking-in-java-zh.git
oschina-mirror
wizardforcel-thinking-in-java-zh
wizardforcel-thinking-in-java-zh
master