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

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

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

2.6 Создание Java программы

Перед тем как создать свой первый Java проект, следует обратить внимание на несколько важных моментов.

2.6.1 Видимость имен

Один из непременных вопросов всех языков программирования — это управление именами или названиями. Предположим, что вы используете имя в одном модуле программы, а другой программист использует то же самое имя в другом модуле. Как отличить одно имя от другого и избежать конфликтов? Этот вопрос особенно актуален для языка C, так как он не предоставляет эффективных методов управления именами. Язык C++, который является основой для классов Java, использует вложенные функции внутри классов, чтобы избежать конфликта с другими вложенными функциями. Однако C++ также позволяет использовать глобальные данные и функции, поэтому конфликты всё ещё возможны. Для решения этой проблемы в C++ были введены ключевые слова для создания "пространства имен".Используя новую систему, Java полностью решает эту проблему. Для создания уникального имени для библиотеки используется аналогия с доменными именами Интернета. На самом деле, дизайнеры Java рекомендуют программистам использовать обратное доменное имя, так как они гарантированно уникальны. Например, если моя доменная зона BruceEckel.com, то мой набор полезных утилит можно назвать com.bruceeckel.utility.foibles. Обратное использование доменного имени позволяет представлять точки как подкаталоги.В версиях Java 1.0 и Java 1.1 расширение домена, такие как com, edu, org, net и т.д., должны были быть записаны прописными буквами. Таким образом, библиотека будет иметь вид COM.bruceeckel.utility.foibles. Однако во время разработки Java 1.2 было замечено, что такое требование может вызывать некоторые проблемы. Поэтому в настоящее время все пакеты используют строчные буквы.

Это специальное решение Java означает, что все файлы автоматически находятся в своих собственных пространствах имён. Каждый класс в файле получает уникальный идентификатор (конечно, имена классов в одном файле должны быть уникальными). Это значит, что нет необходимости учиться специальному синтаксису для решения этой проблемы — язык уже обеспечивает это.

2.6.2 Использование других компонентовКогда требуется использовать заранее определённый класс в своей программе, компилятор должен знать, где его найти. Конечно, этот класс может находиться в том же исходном файле, где происходит обращение. В этом случае достаточно просто использовать этот класс — даже если его объявление находится в конце файла. Java решает проблему "впередсмотрящих" ссылок, поэтому вам не стоит беспокоиться об этом. А что если тот класс расположен в другом файле? Вы могли бы подумать, что компилятор должен быть достаточно "общителен", чтобы самостоятельно его найти. Но это не так. Предположим, мы хотим использовать класс с определённым названием, но определение этого класса находится во множестве файлов. Или ещё хуже, предположим, мы собираемся написать программу, но при её создании добавляем новый класс в свой библиотечный пакет, который конфликтует по имени с существующим классом.Чтобы решить эту проблему, необходимо устранить все потенциально запутанные ситуации. Для достижения этой цели следует точно указать Java-компилятору, какой именно класс нам нужен, используя ключевое слово import. Ключевое слово import служит для указания компилятору на импорт одного "пакета" — или, другими словами, одной "библиотеки классов". В других языках можно представить библиотеку как набор функций, данных и классов. Однако помните, что весь код Java должен быть помещён в класс.

Как правило, большинство времени мы используем компоненты из стандартной Java-библиотеки, которая предоставляется вместе с компилятором. При использовании этих компонентов нет необходимости беспокоиться о длинных доменах сохранения; например, достаточно просто написать следующую строчку кода:

import java.util.Vector;

Это сообщает компилятору, что мы хотим использовать класс Vector из пакета java.util. Однако пакет util содержит множество классов, и иногда нам хочется использовать несколько из них, не объявляя каждый явно. Для достижения этой цели можно использовать шаблон *, как показано ниже:

import java.util.*;

Этот подход обычно используется, когда требуется импортировать серию классов. Вместо того чтобы импортировать каждый класс отдельно, лучше избегать такого подхода.## 2.6.3 Ключевое слово staticОбычно, когда мы создаем класс, мы указываем внешний вид и поведение объектов этого класса. Без использования ключевого слова new для создания экземпляра данного класса фактического объекта не существует. Только после выполнения команды new создается область памяти для хранения данных, а также становятся доступны методы этого класса. Однако в двух специальных случаях вышеописанный подход непригоден. В одном случае требуется использовать только один участок памяти для хранения конкретных данных — независимо от того, сколько объектов будет создано или даже если объекты вообще не создаются. Во втором случае нам нужна особая функция, которая не связана ни с каким экземпляром данного класса. Другими словами, это метод, который можно вызвать, даже если нет созданных объектов. Для удовлетворения этих требований используется ключевое слово static. Как только что-либо объявлено как static, данные или методы больше не связаны с любым экземпляром этого класса. Таким образом, даже если ни одного объекта этого класса не было создано, все еще можно вызывать static методы или обращаться к static данным. В противном случае, для доступа к нестатическим данным и методам необходимо было бы создать объект и использовать его для доступа к данным или методам. Это потому, что нестатические данные и методы должны знать конкретный объект, с которым они работают.Конечно, до использования таких static методов, которые не требуют создания объектов, они не могут просто вызывать другие члены, не указывая при этом на уже существующий объект, чтобы прямым образом получить доступ к нестатическим членам или методам (так как нестатические члены и методы должны быть связаны с определённым объектом). Некоторые объектно-ориентированные языки используют термины "классовые данные" и "классовые методы". Это означает, что данные и методы существуют только для всего класса в целом, а не для какого-либо конкретного объекта этого класса. Иногда вы можете встретить такие названия в других книгах по Java.Чтобы сделать член данных или метод static, достаточно указать это ключевое слово перед его определением. Например, следующий код создаёт static член данных и инициализирует его:

class StaticTest {
    static int i = 47;
}

Хотя мы создали два объекта StaticTest, они всё ещё используют только одно место хранения для StaticTest.i. Оба объекта делают ссылку на одно и то же значение i. Рассмотрите следующий код:

StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();

На данный момент значения st1.i и st2.i равны 47, так как они ссылаются на одну и ту же область памяти.

Существует два способа обращения к static переменной. Как показано выше, можно обратиться через объект, например, st2.i. Также можно обратиться напрямую, используя имя класса, что невозможно для нестатических членов (лучше использовать этот подход при обращении к static переменным, чтобы подчеркнуть их "статический" характер).

StaticTest.i++;

Здесь оператор ++ увеличивает значение переменной на единицу. В результате значения st1.i и st2.i становятся равными 48.

Аналогичная логика применима и к статическим методам. Можно вызвать статический метод через объект, как это делается со всеми другими методами, либо использовать специальную синтаксическую конструкцию Класс.Метод(). Определение статического метода может выглядеть так:```java class StaticFun { static void incr() { StaticTest.i++; } }


Из этого следует, что метод `incr()` класса `StaticFun` увеличивает статическое поле `i`. Вызов метода `incr()` через объект осуществляется следующим образом:

```java
StaticFun sf = new StaticFun();
sf.incr();

Или, поскольку incr() является статическим методом, его можно вызывать напрямую через его класс:

StaticFun.incr();

Хотя метод является "статическим", применение этого модификатора к методу не меняет принцип создания объектов (один член данных для каждого класса и отдельный для каждого объекта). Однако использование static для метода имеет важное значение — позволяет вызывать метод без необходимости создания объекта. Этот факт будет иметь большое значение, особенно при определении точки входа программы метода main().

Как и любой другой метод, статический метод также может создавать именованные объекты своего типа. Поэтому часто используют метод static как "лидер", чтобы с его помощью генерировать серию "объектов" своего типа.Проверьте и исправьте следующий текст:

# Инструкция по установке

Для установки программы вам потребуется Java Runtime Environment версии 8 или выше. Убедитесь, что ваш компьютер поддерживает **64-bit** операционную систему.

## Шаг 1: Установите JDK

Сначала скачайте последнюю версию JDK с официального сайта Oracle. После этого установите его, следуя инструкциям мастера установки.

### Пример команды для установки

sudo apt-get install openjdk-8-jdk


## Шаг 2: Настройте переменные окружения

Добавьте путь к `JAVA_HOME` в ваш `.bashrc` файл:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PATH=$PATH:$JAVA_HOME/bin


## Шаг 3: Проверьте установку

Запустите команду `java -version` в терминале, чтобы проверить успешность установки. Вы должны видеть сообщение, подобное этому:

openjdk version "1.8.0_242" OpenJDK Runtime Environment (build 1.8.0_242-b08)


Если возникли ошибки, обратитесь к разделу "Решение проблем".

---

### Сообщение об ошибке

Если при запуске `java -version` вы получаете сообщение об ошибке типа:

Error: Could not find or load main class java.lang.ClassNotFoundException


Убедитесь, что переменные окружения настроены правильно и перезапустите терминал.

---

Перевод:

# Инструкция по установке

Для установки программы вам потребуется Java Runtime Environment версии 8 или выше. Убедитесь, что ваш компьютер поддерживает **64-битную** операционную систему.

## Шаг 1: Установите JDK

Сначала скачайте последнюю версию JDK с официального сайта Oracle. После этого установите его, следуя инструкциям мастера установки.

### Пример команды для установки

sudo apt-get install openjdk-8-jdk


## Шаг 2: Настройте переменные окружения

Добавьте путь к `JAVA_HOME` в ваш `.bashrc` файл:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PATH=$PATH:$JAVA_HOME/bin


## Шаг 3: Проверьте установку

Запустите команду `java -version` в терминале, чтобы проверить успешность установки. Вы должны видеть сообщение, подобное этому:

openjdk version "1.8.0_242" OpenJDK Runtime Environment (build 1.8.0_242-b08)


Если возникли ошибки, обратитесь к разделу "Решение проблем".

---

### Сообщение об ошибке

Если при запуске `java -version` вы получаете сообщение об ошибке типа:

Ошибка: Невозможно найти или загрузить главный класс java.lang.ClassNotFoundException


Убедитесь, что переменные окружения настроены правильно и перезапустите терминал.

---

Обратите внимание, что терминология была адаптирована для использования в русском языке, сохранив специфическую терминологию IT-индустрии.

Опубликовать ( 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