Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

java / java-intro_part_1_ibm-developerworks

.pdf
Скачиваний:
100
Добавлен:
11.05.2015
Размер:
6 Mб
Скачать

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

methodName; argumentList.

Сочетаниеэтих структурных элементов в определении метода называется его сигнатурой.

Рассмотрим оба типа методов подробнее, начиная с конструкторов.

Методы-конструкторы

Конструкторы позволяют указать, как создавать экземпляр класса. В листинге1 был показан синтаксис декларации конструктора в абстрактной форме; он ещераз приведен в листинге3.

Листинг 3. Синтаксис декларацииконструктора

accessSpecifier ClassName([argumentList]) { constructorStatement(s)

}

Конструкторы не обязательны

Если конструктор отсутствует, компилятор создаст конструктор по умолчанию (или без аргументов). Но он нестанет его генерировать, если указать другой конструктор, отличный от конструктора без аргументов (или no-arg).

accessSpecifierдля конструктора тот же, что и для переменных. Имя конструктора должно совпадать с именем класса. Так что если мы назвали свой класс Person, то и имя конструктора должно быть Person.

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

argumentType argumentName

Аргументы в спискеargumentListразделены запятыми, и два аргумента немогут носить одно и то жеимя. argumentType― это либо простой тип, либо тип класса (так же, как в случаес типами переменных).

Определение класса с помощью конструктора

Теперь посмотрим, что происходит, когда появляется возможность создания объекта Personдвумя способами: с использованием конструктора без аргументов и с инициализацией неполного списка атрибутов.

В листинге4 показано, как создавать конструкторы и как использовать argumentList.

Листинг 4. Определение класса Personс помощью конструктора

package com.makotogroup.intro; public class Person {

private String name; private int age; private int height; private int weight;

private String eyeColor; private String gender; public Person() {

// Делать больше нечего...

}

public Person(String name, int age, int height, String eyeColor, String gender) { this.name = name;

this.age = age; this.height = height; this.weight = weight; this.eyeColor = eyeColor; this.gender = gender;

}

}

Обратитевниманиена использованиеключевого слова thisпри присвоении значений переменным в листинге4. В Java оно означает "this object" (этот объект) и служит для обращения к двум переменным с одинаковыми именами (как в данном

www.ibm.com/developerworks/ru/edu/j-introtojava1/section7.html

6/8

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

случае, когда age–это и параметр конструктора, и переменная класса), а такжепомогает компилятору при неоднозначности ссылки.

Объект Personстановится всеболееинтересным, но ему требуется большеповедения. А для этого нужно большеметодов.

Другие методы

Конструктор –это методособого рода с особой функцией. Точно так жеметоды многих других видов выполняют конкретные обязанности в Java-программах. Изучениедругих методов начинается в этом разделеи продолжается до конца руководства.

Ещев листинге1 я показал, как их объявить метод:

accessSpecifier returnType methodName([argumentList]) { methodStatement(s)

}

Другиеметоды, за несколькими исключениями, выглядят так же, как конструкторы. Во-первых, другиеметоды можно называть как вам заблагорассудится (хотя, конечно, существуют правила). Ярекомендую придерживаться следующего соглашения:

начинайтесо строчной буквы;

избегайтецифр без крайней необходимости; используйтетолько буквы.

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

Другие методы объекта Person

Вооружившись этой базовой информацией, вы можетепосмотреть в листинге5, что произойдет при добавлении к объекту Personещенескольких методов. (Для краткости я опускаю конструкторы.)

Listing 5. Personс несколькиминовымиметодами

package com.makotogroup.intro;

public class Person { private String name; private int age; private int height; private int weight;

private String eyeColor; private String gender;

public String getName() { return name; }

public void setName(String value) { name = value; } // Другие комбинации геттеров/сеттеров...

}

Обратитевниманиена комментарий в листинге5 о "комбинациях геттеров/сеттеров". Впоследствии мы будем часто иметь дело с геттерами и сеттерами. Пока жевам нужно знать, что геттер –это методдля получения значения атрибута, а сеттер

–для изменения этого значения. Япоказал только одну комбинацию геттер/сеттер (для атрибута Name), но аналогичным образом можно определить и другие.

В листинге5 обратитевниманиена то, что если методневозвращает значение, нужно сообщить это компилятору, указав тип возврата voidв его сигнатуре.

Методы экземпляра истатические методы

Существуют два основных типа методов (кромеконструкторов): методы экземпляра и статические методы. Поведение метода экземпляра зависит от состояния конкретного экземпляра объекта. Статическиеметоды иногда ещеназывают методами класса, так как их поведениенезависит от состояния какого-либо одного объекта. Поведениестатического метода определяется на уровнекласса.

Статическиеметоды используются в основном для удобства, их можно представить как способ создания глобальных методов (à la С) с сохранением при этом самого кода сгруппированным с классом, которому они нужны.

Например, в этом руководствемы будем использовать класс JDK Logger для вывода информации на консоль. Чтобы создать экземпляр класса Logger, ненужно обращаться к классу Logger, достаточно вызвать статический методgetLogger().

www.ibm.com/developerworks/ru/edu/j-introtojava1/section7.html

7/8

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

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

Logger l = Logger.getLogger("NewLogger");

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

7 из 18 | предыдущая | следующая

Печатьстраницы

Сделать этустраницуобщей

 

 

Помощь

 

Ленты

Конфиденциальность

Портал для студентов

Запрос на использование

Сообщить о нарушениях

Доступность (Английский)

Бизнес-партнеры IBM

материалов developerWorks

Условия использования

 

 

 

 

 

 

 

 

 

 

 

www.ibm.com/developerworks/ru/edu/j-introtojava1/section7.html

8/8

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

 

IBM

 

 

 

 

 

Русский

 

Войти (или Регистрация)

Техническиематериалы ПробноеПО Сообщество

Введение в Java-программирование: Часть 1. Основы языка

Java

Объектно-ориентированное программирование на платформе Java

Дж. Стивен Перри, главный консультант, Makoto Consulting Group, Inc.

Описание: В этом руководствеиз двух частей рассказывается о структуре, синтаксисеи парадигмепрограммирования языка и платформы Java™. Читатели познакомятся с синтаксисом Java, с которым им, скореевсего, придется иметь дело в своей профессиональной деятельности, и выражениями Java-программирования, которыеможно использовать для построения надежных, удобных в сопровождении Java-приложений. В первой части Дж. Стивен Перри рассказывает об основах объектноориентированного программирования на платформеJava, включая основополагающий синтаксис Java и способы его использования. Для начала вы научитесь создавать Java-объекты и наделять их поведением, а в концеэтой части познакомитесь с коллекциями Java –и в промежуткевас тоже, конечно, ждект много интересного.

Дата: 26.10.2011

Уровеньсложности: простой

Активность: 381344 просмотров

Средний показатель рейтинга (основанный на 274 голосов)

Ваш первый объект Java

Пришло время собрать воедино все, чему вы научились в предыдущих разделах, и приступить к программированию. В этом разделемы объявим класс и добавим к нему переменныеи методы с помощью EclipsePackageExplorer. Вы узнаете, как использовать класс Logger, чтобы следить за поведением своего приложения, и методmain()для тестирования.

Созданиепакета

Откройтев Eclipseперспективу PackageExplorer, если вы этого ещенесделали. Вы на порогесоздания своего первого класса Java. Сначала отведем место для этого класса. Пакеты –это конструкции пространства имен, но в дополнениек этому они удобно отображаются прямо на структуру каталогов файловой системы.

Вместо того чтобы использовать пакет по умолчанию (это почти всегда плохая идея), создадим специальный пакет для своего кода. ВыберитеFile >New >Package, чтобы вызвать мастер Java Package, как показано на рисунке4.

Рисунок4. Мастер Eclipse JavaPackage

Введитеcom.makotogroup.introв текстовоеполеNameи нажмитекнопку Finish. Вы увидитеновый пакет, созданный в

PackageExplorer.

www.ibm.com/developerworks/ru/edu/j-introtojava1/section8.html

1/5

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

 

 

 

Объявлениекласса

В PackageExplorer существуют разныеспособы создания класса, но самый простой –щелкнуть правой кнопкой мыши на только что созданном пакетеи выбрать New >Class.... Вы увидитедиалоговоеокно New Class.

ВведитеPersonв текстовоеполеName. В разделеWhich method stubs would you like to create? (Заглушку какого метода нужно создать?) отметьтеpublic static void main(String[] args). (Скоро вы поймете, почему.) Затем нажмитеFinish.

В окнередактирования появится новый класс. Ярекомендую закрыть несколько видов, появляющихся по умолчанию, чтобы лучшевидеть исходный код, как показано на рисунке5.

Рисунок5. Рационально организованное рабочее пространство

Eclipseгенерирует оболочку класса и сверху вставляет оператор packageвместес запрошенным вами методом main()и комментариями. Теперь достаточно конкретизировать класс. Eclipseможно указать, как создать новый класс: Window > Preferences >Java>Code Style >Code Templates. Для простоты будем придерживаться способа генерации кода Eclipseпо умолчанию.

На рисунке5 обратитевниманиена звездочку (*) рядом с новым файлом исходного кода, указывающую на то, что я внес изменение. И заметьте, что коднесохранен. Далее, обратитевнимание, что я допустил ошибку при объявлении атрибута Name: в качестветипа Nameя указал Strin. Компилятор несмог найти ссылку на такой класс и пометил это как ошибку компиляции (подчеркнув слово Strinкрасной волнистой линией). Конечно, эту ошибку можно исправить, добавив gв конце слова Strin. Это всего лишь небольшая демонстрация возможностей IDE по сравнению с командной строкой.

Добавлениепеременных класса

В листинге4 мы начали конкретизировать класс Person, но я невдавался в детали синтаксиса. Теперь я объясню, как добавлять переменныекласса.

Вспомните, что у переменной есть параметры accessSpecifier, dataType, variableNameи, возможно, initialValue. Ранеемы вкратцерассмотрели, как определить accessSpecifierи variableName. Теперь рассмотрим dataType(тип данных), который может иметь переменная.

Тип данных dataTypeможет быть простым типом или ссылкой на другой объект. Например, обратитевнимание, что Age (возраст) имеет тип int(простой тип), а Name(имя) ― тип String (объект). В JDK много полезных классов, таких как java.lang.String, и теиз них, которыенаходятся в пакетеjava.lang, ненужно импортировать (спасибо компилятору Java). Но независимо от того, является ли dataTypeклассом JDK, таким как String, или классом, определенным пользователем, синтаксис, по сути, один и тот же.

В таблице1 приведены восемь простых типов данных, которыевы, вероятно, будетечасто встречать, со значениями по умолчанию, которыеони принимают, если неуказать значениепеременной явно.

Таблица1. Простые типы данных

www.ibm.com/developerworks/ru/edu/j-introtojava1/section8.html

2/5

02.09.13

 

 

Введениев Java-программирование: Часть 1. Основы языкаJava

 

Тип

Размерность

Значение по умолчанию

Диапазон значений

 

boolean

неприменимо

false

trueили false

 

byte

8 бит

0

От -128 до 127

 

char

16

бит

(без знака)

От \u0000' \u0000' дo \uffff', или от 0 дo 65535

 

short

16

бит

0

От -32768 до 32767

 

int

32

бита

0

От -2147483648 до 2147483647

 

long

64

бита

0

От -9223372036854775808 до 9223372036854775807

 

float

32

бита

0,0

От 1,17549435e-38 дo 3,4028235e+38

 

double

64

бита

0,0

От 4,9e-324 дo 1,7976931348623157e+308

 

 

 

 

 

 

Встроенная регистрация событий

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

В Java-платформеесть пакет java.util.logging, встроенный механизм протоколирования для сбора информации о программев удобном для чтения виде. Loggers –это именованныеобъекты времени выполнения, которыесоздаются посредством вызова статического метода класса Logger:

import java.util.logging.Logger; //. . .

Logger l = Logger.getLogger(getClass().getName());

При вызовеметода getLogger()ему передается значениеString. Пока просто возьмитев привычку передачу имени класса, в котором находится составляемый вами код. В любом регулярном (то есть нестатическом) методеприведенный вышекод всегда будет ссылаться на имя класса и передавать его в Logger.

Если вы вызываетеLogger внутри статического метода, просто укажитеимя класса, в котором находитесь:

Logger l = Logger.getLogger(Person.class.getName());

Вэтом примерекод, в котором вы находитесь, это класс Person, так что вы указываетеособоеслово class, котороеизвлекает объект Class(подробнееоб этом позже) и получает его атрибут Name.

ВразделеНаписаниекачественных Java-программ этого руководства приведен совет, как не выполнять протоколирование.

Использованиеметода main()в качествесредства тестирования

main()–это особый метод, который можно включить в любой класс, чтобы JRE мог выполнить его код. Класс необязательно должен иметь методmain()–на самом деле, в большинствеклассов его нет, –и класс может иметь неболееодного метода

main().

Методmain()удобен тем, что он позволяет быстро проверить класс. При программировании на предприятиях используют специальныебиблиотеки тестов, но для целей этого руководства в качествесредства тестирования мы будем применять

методmain().

Зайдитев редактор исходного кода Eclipseдля Personи добавьтекод, как в листинге4. Eclipseсодержит удобный генератор кода для создания геттеров и сеттеров (и нетолько). Наведитекурсор на определениекласса Person(то есть, на слово Person в определении класса) и выберитеSource >Generate Getters and Setters.... Когда откроется диалоговоеокно, нажмите кнопку Select All, как показано на рисунке6.

Рисунок6. Eclipse создает геттеры исеттеры

www.ibm.com/developerworks/ru/edu/j-introtojava1/section8.html

3/5

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

Чтобы вставить точку, выберитеLast member и нажмитекнопку OK. Обратитевнимание, что методы get и set появляются послеметода main().

Наполнение методаmain()

Теперь добавим к методу main()код, который позволит создать экземпляр класса Person, задать несколько атрибутов, а затем вывести их значения на консоль.

Начнем с добавления к Personконструктора. Введитев окнеисходного кода непосредственно подверхней частью определения класса (подстрокой public class Person () код, приведенный в листинге6.

Листинг 6. Конструктор Person

public Person(String name, int age, int height, int weight, String eyeColor, String gender) {

this.name = name; this.age = age; this.height = height; this.weight = weight; this.eyeColor = eyeColor; this.gender = gender;

}

Убедитесь в отсутствии волнистых линий, означающих ошибки компиляции.

Затем перейдитев методmain()и сделайтеего таким, как в листинге7.

Листинг 7. Метод main()

public static void main(String[] args) {

Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE"); Logger l = Logger.getLogger(Person.class.getName());

l.info("Name: " + p.getName()); l.info("Age:" + p.getAge()); l.info("Height (cm):" + p.getHeight()); l.info("Weight (kg):" + p.getWeight()); l.info("Eye Color:" + p.getEyeColor()); l.info("Gender:" + p.getGender());

}

О классеLoggerпока небеспокойтесь. Просто введитекодиз листинга 7, как есть. Теперь можно запустить свою первую Javaпрограмму.

www.ibm.com/developerworks/ru/edu/j-introtojava1/section8.html

4/5

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

Исполнениекода в Eclipse

Для запуска Java-программы в Eclipseвыберитекласс, который нужно запустить –в нем должен присутствовать методmain(). Пока у вас только один класс –и методmain()в нем присутствует, так что выберитеPersonи нажмитекнопку Run (зеленого цвета с треугольной стрелкой, указывающей вправо). В ответ на запрос выберитезапуск Personв качествеJava-приложения и

–наблюдайтеза происходящим. Вы должны увидеть что-то вродеэкрана, изображенного на рисунке7.

Рисунок7. Исполнение классаPerson

Обратитевнимание, что видConsoleоткрывается автоматически и показывает результат Logger. Явыбрал такжевидOutline на левой панели, который отображает базовую структуру класса Person.

8 из 18 | предыдущая | следующая

Печатьстраницы

Сделать этустраницуобщей

 

 

Помощь

 

Ленты

Конфиденциальность

Портал для студентов

Запрос на использование

Сообщить о нарушениях

Доступность (Английский)

Бизнес-партнеры IBM

материалов developerWorks

Условия использования

 

 

 

 

 

 

 

 

 

 

 

www.ibm.com/developerworks/ru/edu/j-introtojava1/section8.html

5/5

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

 

IBM

 

 

 

 

 

Русский

 

Войти (или Регистрация)

Техническиематериалы ПробноеПО Сообщество

Введение в Java-программирование: Часть 1. Основы языка

Java

Объектно-ориентированное программирование на платформе Java

Дж. Стивен Перри, главный консультант, Makoto Consulting Group, Inc.

Описание: В этом руководствеиз двух частей рассказывается о структуре, синтаксисеи парадигмепрограммирования языка и платформы Java™. Читатели познакомятся с синтаксисом Java, с которым им, скореевсего, придется иметь дело в своей профессиональной деятельности, и выражениями Java-программирования, которыеможно использовать для построения надежных, удобных в сопровождении Java-приложений. В первой части Дж. Стивен Перри рассказывает об основах объектноориентированного программирования на платформеJava, включая основополагающий синтаксис Java и способы его использования. Для начала вы научитесь создавать Java-объекты и наделять их поведением, а в концеэтой части познакомитесь с коллекциями Java –и в промежуткевас тоже, конечно, ждект много интересного.

Дата: 26.10.2011

Уровеньсложности: простой

Активность: 381344 просмотров

Средний показатель рейтинга (основанный на 274 голосов)

Добавлениеповедения в объект Java

Пока класс Personсмотрится хорошо, но чтобы сделать его интереснее, этот класс можно наделить дополнительным поведением. Как вы ужезнаете, наделениеповедением означает добавлениеметодов. В этом разделеболееподробно рассматриваются методыдоступа, а именно –геттеры и сеттеры, которыемы ужевидели в действии. Вы познакомитесь такжес синтаксисом для вызова методов.

Методы доступа

Для того чтобы инкапсулировать данныекласса из других объектов, его переменныеобъявляются как private, а затем применяются методы доступа. Как вам ужеизвестно, геттер –это методдля получения значения атрибута, а сеттер –для изменения этого значения. Имена методов доступа следуют строгому соглашению, называемому моделью JavaBeans, согласно которому любому атрибуту Fooсоответствует геттер, называемый getFoo()и сеттер, называемый setFoo().

Модель JavaBeans настолько распространена, что ееподдержка встроена прямо в IDE Eclipse. Вы ужевидели еев действии в предыдущем разделе–когда создавали геттеры и сеттеры для класса Person.

Для методов доступа справедливы следующиеправила:

сам атрибут всегда объявляется с доступом private;

спецификатор доступа для геттеров и сеттеров –public;

геттеры непринимают никаких параметров и возвращают значениетого жетипа, что и у атрибута, к которому они обращаются; сеттеры принимают только один параметр с тем жетипом, что и у атрибута, и невозвращают никаких значений.

Объявление методовдоступа

Самый простой способ объявления методов доступа –позволить Eclipseсделать это за вас, как было показано на рисунке6. Но вы должны такжезнать, как кодировать пару геттер-сеттер вручную. Предположим, у нас есть атрибут Fooтипа java.lang.String. Полноедекларация для него (в соответствии с правилами доступа) будет:

private String foo; public String getFoo() {

return foo;

}

public void setFoo(String value) { foo = value;

}

www.ibm.com/developerworks/ru/edu/j-introtojava1/section9.html

1/3

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

Сразу можно заметить, что параметр value, передаваемый сеттеру, назван иначе, чем если бы он был порожден Eclipse. Это моесобственноеправило, котороея рекомендую и другим разработчикам. В тех редких случаях, когда я составляю сеттер вручную, я всегда использую имя valueв качествепараметра valueдля сеттера. Это напоминает мнео том, что я кодировал сеттер вручную. Обычно созданиегеттеров и сеттеров я поручаю Eclipse, если только нет веских оснований этого неделать. Использованиеимени valueв качествепараметра valueсеттера напоминает мне, что это особый сеттер. (Для этой жецели могут служить комментарии.)

Вызов методов

Вызывать методы легко. В листинге7 вы видели, как вызвать различныегеттеры класса Personдля получения их значений. Теперь я объясню механизм вызова методов.

Вызовметодас параметрамиибез

Чтобы вызвать методдля объекта, нужно сослаться на этот объект. Синтаксис вызова метода включает в себя ссылку на объект, точку, имя метода и любыепараметры, которыенужно передать:

objectReference.someMethod(); objectReference.someOtherMethod(parameter);

Вот вызов метода без параметров:

Person p = /*obtain somehow */; p.getName();

А вот вызов метода с параметрами (обращениек атрибуту Nameкласса Person):

Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");

Помните, что конструкторы –это тожеметоды. Параметры можно разделять пробелами и переводом строки. Компилятору Java всеравно. Следующиедва вызова метода идентичны:

new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");

new Person("Joe Q Author", 42, 173, 82,

"Brown",

"MALE");

Вложенныйвызовметода

Вызов метода может быть вложенным:

Logger l = Logger.getLogger(Person.class.getName()); l.info("Name: " + p.getName());

Здесь мы передаем возвращаемоезначениеPerson.class.getName()методу getLogger(). Помните, что вызов метода getLogger()–это вызов статического метода, поэтому синтаксис немного отличается. (Для вызова ненужна ссылка Logger, достаточно просто использовать имя самого класса, как в левой части вызова.)

Собственно, вот и все, что нужно для вызова метода.

9 из 18 | предыдущая | следующая

Печатьстраницы

Сделать этустраницуобщей

www.ibm.com/developerworks/ru/edu/j-introtojava1/section9.html

2/3

Соседние файлы в папке java