Объявление переменных и методов, использование их в программе на Java

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

public static void main(String [] args)

{

labl f= new labl();

f.resize(500,500);

f.setVisible(true);

}

В метод main() всегда передаются аргументы командной строки — массив args. Далее следующая строка уже может быть нами объяснена:

labl f= new labl();

Здесь создается объект с именем f — экземпляр класса iabi. Естественно, что обращение

new labl()

используется для вызова конструктора. Конструктор данного класса как раз и создает форму, которую мы видим на рис. 1.4.

Члены класса должны быть объявлены и созданы. Объявления — это строки наподобие следующих:

Book book;

String title; int price;

Можно одновременно объявлять и создавать члены класса:

Button bl=new Button("Exit");

Button b2=new Button("Create Object");

Button b3=new Button("Show Object");

При этом следует иметь в виду, что с помощью конструктора создаются только объектные переменные, а простые переменные наподобие int не имеют конструкторов вовсе. Однако в Java есть тип integer, который позволяет создавать объектные целочисленные переменные. Отличие его от int заключается в том, что integer предоставляет целое множество методов для работы с целыми числами, а int таких методов не предоставляет. Класс string — это класс, позволяющий создавать объектные строковые переменные. Для последующего запомним, что в Java типы, название которых начинается с большой буквы, являются объектными; типы, название которых начинается с малой буквы, являются простыми.

Приведем названия ряда важнейших типов языка Java:

Boolean

простой логический тип

char

простой символьный тип

byte

байт

short

короткое целое

int

32-разрядное целое

long

64-битовое целое число со знаком

float

вещественное число с плавающей точкой

double

вещественное число с плавающей точкой удвоенной точности

ActionEvent

класс события и действия

Applet

класс апплета — окна, отображаемого браузером

Boolean

составной логический тип

Button

кнопка

Canvas

графический класс для рисования

Character

составной символьный тип

CheckBox

флажок

Choice

выпадающий список

Color

цвет

Connection

соединение (сетевое)

Container

контейнер

Date

дата + время

DataInputStream

высокоуровневый класс для чтения данных

DataOutputStream

высокоуровневый класс для вывода данных

Dialog

диалоговое окно

Dimension

размеры экрана

Event

класс события (например, нажатия кнопки мыши)

File

класс для доступа к файлам

FileDialog

окно диалога при выборе файла

FileInputStream

низкоуровневый класс для чтения файла

FileOutputStream

низкоуровневый класс для записи в файл

Font

шрифт

Frame

окно приложения (форма)

Graphics

графический класс

GridLayout

класс для размещения элементов в окне в матрице

HashTable

ассоциативная таблица базы данных

HttpRequest

класс для чтения данных HTML-документа

HttpResponse

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

Image

рисунок

ImageObserver

класс для просмотра и загрузки рисунков

InetAddress

адрес компьютера в Интернете

Integer

составной класс целых чисел

KeyEvent

класс событий от клавиатуры

Label

ярлык

List

список

Menu

элементы линейного меню

MenuBar

панель меню

MenuItem

элементы выпадающего меню

MouseEvent

класс событий от мыши

Object

класс объектов

Panel

панель

Point

точка в окне

Rectangle

прямоугольная область в окне

ServerSocket

порт на стороне сервера

Socket

порт

Statement

инструкция SQL

String

строковый класс

StringBuffer

буфер символов

StringTokenizer

класс для выделения лексем

TextField

текстовое поле

TextArea

текстовое окно

Thread

поток

Vector

вектор

URL

(universal resource locator) адрес ресурса в Интернете

Переменные составного (объектного) типа обладают методами своего класса. Так, переменную titie класса string можно вывести большими жирными красными буквами следующим образом (рис. 1.5).

{

if(book!=null)

{

Graphics g= getGraphics ();

Font fnt=new Font("Courier",Font.BOLD,24);

g.setFont(fnt) ;

setForeground(new Color(250,0,0)); g.drawString(book.title.toUpperCase(),20,200);

Рис. 1.5. Использование методов классов

Graphics и Font

Вывод строки реализует оператор

g.drawString(book.title.toUpperCase(),20,200);

Здесь g — графическая объектная переменная класса Graphics. Вклассе Graphics есть метод для вывода строки — drawString(). Поэтому конструкция g. drawString () выполняет вывод строки, помещенной в круглые скобки. Сама строка, выводимая этим оператором, такова:

book.title.toUpperCase().

Здесь book — имя объектной переменной, созданной из класса Book. У этой переменной есть свойство titie (член класса). Но titie относится к классу string, а у класса string есть метод toUpperCase (), переводящий буквы строки к заглавному виду. Следовательно, вся конструкция book.titie.toUpperCase() дает переменную titie объекта book класса Book в форме заглавной строки. Прежде чем выводить строку, создаем новый шрифт (font) командой

Font fnt=new Font ("Courier", Font.BOLD,2 4); а командой

g.setFont(fnt);

устанавливаем этот шрифт на форме. Конструктор класса Font использует название шрифта, тип и размер соответственно в первом, втором и третьем параметре.

Теперь о красном цвете. Мы его получаем оператором

setForeground(new Color(250,0,0)); либо оператором

f.        setColor(new Color(250,0,0));

(Заметим. ЧТО В классе Graphics нет метода setForeground(), который определен в классе Frame.)

Конструктор класса coior использует комбинацию трех цветов: красного, зеленого и голубого для получения нужного цвета. Значение каждого из цветов передается целым числом от 0 до 255 (0 соответствует отсутствию цвета, 255 — максимальному уровню насыщения). Оператор для установки цвета шрифта — это setForeground (). Перед ним не записано имя объектной переменной! Поэтому остается предположить (и это на самом деле так), что данный оператор относится либо к объекту this, либо к какому-то классу. Чтобы проверить, какая гипотеза верна, запишем так:

{

if(book!=null)

{

Graphics g= getGraphics ();

this.setForeground(new Color(250,0,0));

g.drawString(book.title.toUpperCase(),20,200);

}

}

и выполним программу. Никаких ошибок компилятор не выдаст. Следовательно, опущено слово this, которое фактически указывает на тот объект, который выполняет данный оператор.

Этим объектом является объект f класса labl, созданный в методе main():

public static void main(String [] args)

labl f= new labl(); f.resize(500,500); f.setVisible(true);

ибо метод actionPerformed, в котором выполняется оператор

this.setForeground(new Color (250, 0, 0)); как раз и определяется в классе labl.

Однако следует иметь в виду, что если название метода записано без ссылки на объектную переменную, то данный метод может принадлежать классу, а не объекту. Такие методы называются статическими (определяются словом static). Например, видим такой метод в нашей программе — main(). Изменим этот метод:

public static void main(String [] args)

labl f= new labl(); setForeground(new Color(250,0,0)); f.resize(500,500); f.setVisible(true);

Компилятор отреагирует на это сообщением об ошибке (рис. 1.6).

Рис. 1.6. Неверное использование нестатического метода

Сообщение будет содержать слова о том, что нестатический метод setForeground() адресуется из статического контекста. Иначе говоря, все тело статического метода main рассматривается как статический контекст. Теперь запомним, что в статическом контексте ссылка this бессмысленна. А коль так, то методы, используемые в статическом контексте без ссылки на объектную переменную, должны быть объявлены как статические (static). Для исправления ошибки достаточно написать так:

public static void main(String [] args)

{

labl f= new labl(); f.setForeground(new Color(250,0,0)); f.resize(500,500);

f.setVisible(true);

}

Теперь рассмотрим модификаторы доступа к переменным, методам и классам: public, protected, private. Модификатор public указывает на общедоступность метода, переменной или класса. Модификатор protected разрешает доступ к переменной, методу или классу только из родительского или дочернего класса. Наконец, модификатор private ограничивает доступ к переменной, методу только классом, где она объявлена. Мы знаем теперь, что непосредственно обратиться к переменной или методу класса можно, если эта переменная или метод объявлены как статические. Доступ к таким переменным и методам регулируется через модификаторы public, protected, private. Кстати, отсутствие модификатора доступа указывает, что класс доступен в пределах активного каталога, из которого запущено приложение. Однако если создаем объект некоторого класса ciassA и этот класс доступен из того места ciassB, где мы создаем объект, то получаем доступ ко всем переменным, методам класса ciassA.

В заключение этого подраздела рассмотрим, как передаются аргументы в процедуры. У нас есть обращение к конструктору:

if (e.getSource()==b2)

if (book == null) book=new Book("Pinoccio",2 00) ;

Именно в строке new Book("Pinoccio", 200); конструктору передаются два аргумента: строка "Pinoccio" и число 200. Аргументы должны разделяться запятыми. Аргументы передаются либо непосредственно (как в нашем случае), либо передаются переменные, которым предварительно присвоены нужные значения, т. e.:

if (e.getSource()==b2)

{

if (book == null)

{

String s="Pinoccio"; int z= 200; book=new Book(s,z);

}

В объявлении конструктора следует указать типы аргументов:

Book(String s, int i)

{

this.title=s;

this.price=i;

}

Переменная s объявлена как string, переменная i объявлена как int.

Метод может возвращать или не возвращать значения. Если метод не возвращает никакие значения, то в его объявлении следует указать ключевое слово void, например: public static void main().

Но методы могут возвращать значения, тогда нужно указать в объявлении метода тип возвращаемого им значения. Поясним этот момент примером. Добавим в класс labl новый метод, который возвращает значение свойства titie объекта book.

public String showTitle(Book z)

{

return z.title;

}

Этот метод поместим в тело класса labl, как показано далее:

public class labl extends Frame implements ActionListener {

Book book;

Button bl=new Button("Exit");

Button b2=new Button("Create Object");

Button b3=new Button("Show Object"); public labl()

{

setLayout(null) ; add (Ы) ; add(b2); add (b3) ;

Ы.addActionListener(this); b2.addActionListener(this) ; b3.addActionListener(this);

Ы.setBounds(20,20,100,20) ; b2.setBounds (20,50,100,20); b3.setBounds(20,80,100,20); setBackground(new Color(120,200,120));

}

// Здесь вставлено описание и объявление нового метода // showTitle()

public String showTitle(Book z)

{

return z.title;

}

public void actionPerformed (ActionEvent e)

if (e.getSource()==bl)

System.exit(0); else

if (e.getSource()==b2)

{

if (book == null) book=new Book("Pinoccio",200); else

System.out.println("The object already exists");

}

else

if (e.getSource()==b3)

{

if(book!=null)

{

Graphics g= getGraphics();

g.drawString(this.showTitle(book),20,200);

// здесь мы обратились к новому методу

}

}

}

public static void main(String [] args)

{

labl f= new labl(); f.resize(500,500);

f.setVisible(true);

}

}

Методом showTitle () мы воспользовались в обработчике события, связанного с нажатием кнопки в окне приложения. Данный метод возвращает строковое значение, поэтому в объявлении этого метода указано ключевое слово string. Особенностью передачи в метод в качестве аргумента объекта некоторого класса является то, что фактически передается ссылка на объект. Поэтому любые изменения членов объекта в методе проводятся на исходном объекте. Поясним сказанное следующим фрагментом кода:

import java.awt.*; import java.io.*; public class peredaczaobj {

int b;

public void method(peredaczaobj x)

{

x.b=5; // Этот оператор изменяет значение b переданного // объекта

}

public static void main(String args[])

{

peredaczaobj ob=new peredaczaobj(); ob.b=l; // Начальное значение члена класса System.out.println("Before method:"+ob.b); ob.method(ob);

System.out.println("After method:"+ob.b);

}

}

При запуске этого класса на консоль будет выведено:

Before method:l After method:5.

Источник: Герман О. B., Герман Ю. О., Программирование на Java и C# для студента. — СПб.: БХВ-Петербург, 2005. — 512 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100