Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Герберт Шилдт. Java 2, v5.0 (Tiger). Новые возм...doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
1.21 Mб
Скачать

Общий вид оператора статического импорта

Существуют два варианта синтаксической записи оператора import static. Первый, приведенный в листинге 8.2, вариант импортирует единичное имя. Его общий вид приведен в следующей строке:

import static pkg.type-namе.static-member-name;

В этой записи type - nameэто имя класса или интерфейса, содержащее нужный статический член. Полное имя пакета, в который входит заданный класс или интерфейс, определено в pkg. А имя члена содержится в static-member-name.

Во втором варианте статического импорта, общий вид которого приведен в следующей строке, импортируются все статические члены:

import static pkg. type-name.*;

Если Вы будете использовать много статических методов или полей, определенных в классе, второй вариант записи позволит импортировать их без явного перечисления. Таким образом, программа из листинга 8.2 могла бы с помощью единственного оператора import импортировать оба метода: sqrt () и pow () (и все остальные статические члены класса Math) в область видимости следующим образом:

import static Java.lang.Math.*;

Конечно, статический импорт не ограничен только классом Math или только методами. В следующей строке приведен пример импортирования статического поля System.out:

import static Java.lang.System.out;

После вставки этого оператора, можно вывести на консоль без уточнения имени стандартного вывода out именем system, как показано в следующей строке:

out.println("After importing System.out, you can use out directly.")

Хорошо ли импортировать поле system.out таким образом— это вопрос для обсуждения. Хотя такой импорт укорачивает оператор, после его применения у человека, читающего программу, пропадает уверенность в том, что имя out ссылается на поле System.out.

Импорт статических членов классов, созданных Вами

Помимо импорта статических членов классов и интерфейсов, определенных в прикладном программном интерфейсе (API) языка Java, Вы можете использовать это средство для импорта статических членов классов и интерфейсов, созданных Вами. Рассмотрим класс Msg, приведенный в листинге 8.3. Обратите внимание на то, что он содержится в пакете, названном

MyMsg.

Листинг 8.З. Статический импорт членов созданного Вами класса

package MyMsg;

public class Msg {

public static final int UPPER = 1;

public static final int LOWER = 2;

public static final int MIXED = 3;

private String msg;

// Display a message in the specified case.

public void showMsg(int how) {

String str;

switch(how) {

case UPPER:

str = msg.toUpperCase();

break;

case LOWER:

str = msg.toLowerCase();

break;

case MIXED:

str = msg;

break;

default:

System.out.println("Invalid command.");

return;

}

System.out.println(str);

}

public Msg(String s) { msg = s; }

}

В классе Msg инкапсулирована строка, которая может выводиться на экран в первоначальном виде (содержит как заглавные, так и строчные буквы), в верхнем регистре (только заглавные буквы) или в нижнем регистре (только строчные буквы) в зависимости от значения, переданного в метод showMsg(). Значения, определяющие, какой регистр используется,— это целочисленные поля, описанные с модификаторами static final и названные upper, lower и mixed. Обычно эти члены должны уточняться с помощью имени класса, например Msg.upper. Предположим, что объект класса Msg назван m, для вывода строки в нижнем регистре пришлось бы вызывать метод showMsg(), как показано в следующей строке:

m.showMsg(Msg.LOWER);

Но если Вы статически импортируете эти значения, то сможете непосредственно использовать их имена следующим образом:

m.showMsg(LOWER);

В листинге 8.4 показан процесс импорта статических членов класса MyMsg.Msg и в дальнейшем использование констант upper, lower и mixed без уточнения их имен.

Листинг 8.4. Статический импорт статических полей, определенных пользователем

import MyMsg.*;

import static MyMsg.Msg.*;

class Test {

public static void main(String args[]) {

Msg m = new Msg("Testing static import.");

m.showMsg(MIXED);

m.showMsg(LOWER);

m.showMsg(UPPER);

}

}