Руководство по Java metanit com Данный раздел посвящен языку программирования Java и всем сопутствующим


Глава 3. Классы. Объектно-ориентированное



Download 1,75 Mb.
Pdf ko'rish
bet13/110
Sana23.02.2022
Hajmi1,75 Mb.
#177154
TuriРуководство
1   ...   9   10   11   12   13   14   15   16   ...   110
Bog'liq
2 5305247065486395003

Глава 3. Классы. Объектно-ориентированное
программирование


Классы и объекты
Java является объектно-ориентированным языком, поэтому такие понятия как "класс" и
"объект" играют в нем ключевую роль. Любую программу на Java можно представить как набор
взаимодействующих между собой объектов.
Шаблоном или описанием объекта является класс, а объект представляет экземпляр этого
класса. Можно еще провести следующую аналогию. У нас у всех есть некоторое представление о
человеке - наличие двух рук, двух ног, головы, пищеварительной, нервной системы, головного
мозга и т.д. Есть некоторый шаблон - этот шаблон можно назвать классом. Реально же
существующий человек (фактически экземпляр данного класса) является объектом этого класса.
Класс определяется с помощью ключевого слова сlass:
class Book{
}
класс Book мог бы иметь следующее определение:
class Book{
public String name;
public String author;
public int year;
public void Info(){
System.out.printf("Книга '%s' (автор %s) была издана в %d году \n", name,
author, year);
}
}
Таким образом, в классе Book определены три переменных и один метод, который выводит
значения этих переменных
Кроме обычных методов в классах используются также и специальные методы, которые
называются конструкторами. Конструкторы нужны для создания нового объекта данного класса
и, как правило, выполняют начальную инициализацию объекта. Название конструктора должно
совпадать с названием класса:
class Book{
public String name;
public String author;
public int year;
Book(){
name = "неизвестно";
author = "неизвестно";
year = 0;
}
Book(String name, String author, int year){
this.name = name;
this.author = author;
this.year = year;
}
public void Info(){
System.out.printf("Книга '%s' (автор %s) была издана в %d году \n", name,
author, year);
}
}
Здесь у класса Book определено два конструктора. Первый конструктор без параметров
присваивает неопределенные начальные значения полям. Второй конструктор присваивает полям
класса значения, которые передаются через его параметры.
Так как имена параметров и имена полей класса в данном случае у нас совпадают - name,
author, year, то мы используем ключевое слово this. Это ключевое слово представляет ссылку на


текущий объект. Поэтому в выражении this.name = name; первая часть this.name означает, что
name - это поле текущего класса, а не название параметра name. Если бы у нас параметры и поля
назывались по-разному, то использовать слово this было бы необязательно.
Мы можем определить несколько конструкторов для установки разного количества
параметров и затем вызывать один конструктор из другого:
public class Book{
public String name;
public String author;
public int year;
Book(String name, String author){
this.name = name;
this.author = author;
}
Book(String name, String author, int year){
this(name, author);
this.year = year;
}
}
Например, у нас может сложиться ситуация, когда нам нужно установить только два
параметра или только три, однако устанавливать в конструкторами с тремя параметрами все три
поля класса не имеет смысла, так как мы можем передать две из них в другой конструктор
класса, где и произойдет их установка. Вызов конструктор производится с помощью ключевого
слова this, после которого идет в скобках список параметров.
Создание объекта
Чтобы непосредственно использовать класс в программе, надо создать его объект. Процесс
создания объекта двухступенчатый: вначале объявляется переменная данного класса, а затем с
помощью ключевого слова new и конструктора непосредственно создается объект, на который и
будет указывать объявленная переменная
Book b; // объявление переменной, которая еще не хранит ссылку на объект
b = new Book(); // выделение памяти под объект Book
После объявления переменной Book b; эта переменная еще не ссылается ни на какой объект
и имеет значение null. Затем мы создаем непосредственно объект класса Book с помощью одного
из конструкторов и ключевого слова new.
Инициализаторы
Кроме конструктора начальную инициализацию объекта вполне можно было проводить с
помощью инициализатора объекта. Так, мы бы могли заменить конструктор без параметров
следующим блоком:
public class Book{
public String name;
public String author;
public int year;
/*начало блока инициализатора*/
{
name = "неизвестно";
author = "неизвестно";
year = 0;
}
/*конец блока инициализатора*/
Book(String name, String author, int year){
this.name = name;
this.author = author;
this.year = year;
}
}


Программа с классами
Теперь используем класс в программе. Создадим в NetBeans новый проект. Назовем его,
например, BookStore:
Итак, по умолчанию у нас в проекте создается пакет bookstore. Добавим в него новый класс.
Для этого нажмем на пакет bookstore правой кнопкой мыши и в появившемся контекстном меню
выберем Новый-> Класс Java...
Затем в окне создания нового класса назовем его Book, а остальные опции оставим по
умолчанию. После этого в пакет bookstore будет добавлен новый класс:
Изменим автосгенерированный код в файле Book.java на следующий:
package bookstore;
public class Book{
public String name;
public String author;
public int year;
Book(){
name = "неизвестно";
author = "неизвестно";
year = 0;
}
Book(String name, String author, int year){
this.name = name;
this.author = author;
this.year = year;
}
public void info(){
System.out.printf("Книга '%s' (автор %s) была издана в %d году \n", name,
author, year);


}
}
Теперь перейдем к коду файла BookStore.java и изменим его следующим образом:
package bookstore;
public class BookStore {
public static void main(String[] args) {
Book b1 = new Book("Война и мир", "Л. Н. Толстой", 1869);
b1.info();
Book b2 = new Book();
b2.info();
}
}
Если мы запустим код на выполнение, то консоль выведет нам информацию о книгах b1 и
b2:
Книга 'Война и мир' (автор Л. Н. Толстой) была издана в 1869 году
Книга 'неизвестно' (автор неизвестно) была издана в 0 году


Пакеты
Как правило, в Java классы объединяются в пакеты. Пакеты позволяют организовать классы
логически в наборы. По умолчанию java уже имеет ряд встроенных пакетов, например, java.lang,
java.util, java.io и т.д. Кроме того, пакеты могут иметь вложенные пакеты.
Организация классов в виде пакетов позволяет избежать конфликта имен между классами.
Ведь нередки ситуации, когда разработчики называют свои классы одинаковыми именами.
Принадлежность к пакету позволяет гарантировать однозначность имен.
Чтобы указать, что класс принадлежит определенному пакету, надо использовать директиву
package, после которой указывается имя пакета:
package bookstore;
public class BookStore {
public static void main(String[] args) {
}
}
В данном случае класс BookStore находится в пакете bookstore. При определении классов в
пакеты на жестком диске эти классы должны размещаться в подкаталогах, путь к которым
соответветствует названию пакета. Например, в данном случае файл BookStore.java будет
находиться в каталоге bookstore.
Классы необязательно определять в пакеты. Если для класса пакет не определен, то
считается, что данный класс находится в пакете по умолчанию, который не имеет имени.
Импорт пакетов и классов
Если нам надо использовать классы из других пакетов, то нам надо подключить эти пакеты и
классы. Исключение составляют классы из пакета java.lang (например, String), которые
подключаются в программу автоматически.
Например, знакомый по прошлым темам класс Scanner находится в пакете java.util, поэтому
мы можем получить к нему доступ следующим способом:
java.util.Scanner in = new java.util.Scanner(System.in);
То есть мы указываем полный путь к файлу в пакете при создании его объекта. Однако
такое нагромождение имен пакетов не всегда удобно, и в качестве альтернативы мы можем
импортировать пакеты и классы в проект с помощью директивы import, которая указывается
после директивы package:
package bookstore;
import java.util.Scanner; // импорт класса Scanner
public class BookStore {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
}
}
Директива import указывается в самом начале кода, после чего идет имя подключаемого
класса (в данном случае класса Scanner).
В примере выше мы подключили только один класс, однако пакет java.util содержит еще
множество классов. И чтобы не подключать по отдельности каждый класс, мы можем сразу
подключить весь пакет:
import java.util.*; // импорт всех классов из пакета java.util
Теперь мы можем использовать любой класс из пакета java.util.
Возможна ситуация, когда мы используем два класса с одним и тем же названием из двух
разных пакетов, например, класс Date имеется и в пакете java.util, и в пакете java.sql. И если нам
надо одновременно использовать два этих класса, то необходимо указывать полный путь к этим


классам в пакете:
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date();
Статический импорт
В java есть также особая форма импорта - статический импорт. Для этого вместе с
директивой import используется модификатор static:
package bookstore;
import static java.lang.System.*;
import static java.lang.Math.*;
public class BookStore {
public static void main(String[] args) {
double result = sqrt(20);
out.println(result);
}
}
Здесь происходит статический импорт классов System и Math. Эти классы имеют
статические методы. Благодаря операции статического импорта мы можем использовать эти
методы без названия класса. Например, писать не Math.sqrt(20), а sqrt(20), так как функция sqrt(),
которая возвращает квадратный корень числа, является статической. (Позже мы рассмотрим
статические члены класса).
То же самое в отношении класса System: в нем определен статический объект out, поэтому
мы можем его использовать без указания класса.



Download 1,75 Mb.

Do'stlaringiz bilan baham:
1   ...   9   10   11   12   13   14   15   16   ...   110




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish