1. Пакети
Обикновените Java програми включват огромен брой класове. Колко? Хиляди, десетки хиляди. И ако вземете предвид и факта, че програмата използва различни библиотеки, съдържащи класове, написани от други програмисти, тогава броят на класовете може лесно да се измери в мorони!
Би било почти невъзможно да се измислят уникални имена за всички тези мorони or дори само хиляди класове.
Разбира се, можем да си представим имена като A123
и B345
, но ако говорим за избор на добро име на клас, такова, което улеснява разбирането на класа (като String
за низове, например), тогава дори генерирането на хиляда уникални имена е много на работа.
Ето защо в Java е обичайно класовете да се групират в пакети с помощта на ключовата дума package.
Java класовете и техните пакети са много подобни на файлове и папки на компютър.
Например, ако трябва да съхраните 10 documentа на вашия компютър, вероятно просто ще ги държите в една папка. Но Howво ще стане, ако имате хиляди documentи (например хранorще на всички documentи на фирма)?
С хиляди documentи, които трябва да се съхраняват, едно решение е да се създадат множество нива на папки с добри описателни имена. И след това в папка на последното ниво съхранете documentите, които се отнасят до тази конкретна папка. Добрите описателни имена за documentите също не вредят.
Всъщност ние правим всичко това за класове в Java.
Файловете, съдържащи класовете, се съхраняват в различни директории (папки), а пълното име на папката на класа с всичките му подпапки е името на пакета. Пример:
Път до file | Име на пакета | Име на класа |
---|---|---|
|
|
|
|
|
|
|
|
|
За разлика от имената на папките, имената на пакетите използват точка като разделител. С други думи, папката \com\codegym\tasks\
съответства на com.codegym.tasks
пакета.
2. src
папка
В Java е обичайно да се съхраняват всички класове за програма в една папка (и подпапки). Тази папка обикновено се нарича src
(съкратено от източник ).
Тази папка се нарича корен на проекта (or корен на източника ) и всички пътища на пакета са относителни към него. Примери:
Папки | Име на пакета |
---|---|
|
|
|
|
В тази ситуация програмистите казват нещо като „имаме проект с име my
, който се намира в c:\projects\data
папката“ or „имаме проект с име project
, който се намира в d:\files\git\data
папката“
Най-добре е винаги да поставяте класове в пакети, а не директно в главната папка ( src
. Ако имате само няколко класа, това не представлява проблем. Но когато има много класове, е много лесно да се объркате. Така че , винаги създавайте вашите класове само в пакети.
В Java е обичайно да се дават смислени имена на класове и пакети. Много компании пускат свои собствени библиотеки (набор от класове) и, за да избегнат объркване, те включват името на компанията/уебсайта/проекта в името на пакета:
Име на пакета | Име на фирма/проект |
---|---|
|
Проект Apache |
|
Компания Oracle |
|
Компания Oracle, Java проект |
|
Компания IBM, проект WebSphere |
|
Проект JBoss |
3. Съдържание на file
Съгласно езиковия стандарт Java във file с codeа трябва да бъде включена информация за името на класа и името на неговия пакет. Общият формуляр е показан по-долу:
package package-name;
public class ClassName
{
}
Името на пакета трябва да съвпада с името на папката, а името на file трябва да съвпада с името на публичния клас.
Ако имате файл, той трябва да съдържа това:...\src\com\project\Service.java
package com.project;
public class Service
{
}
4. Импортиране на класове
Името на класа и името на пакета образуват това, което се нарича пълно квалифицирано име на класа .
Примери:
Напълно квалифицирано име | Име на пакета | Име на класа |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
нито един |
|
Добрата новина:
Напълно квалифицираното име на клас винаги е уникално в рамките на проекта. В крайна сметка не можете да създадете два file с едно и също име в една папка.
Лошата новина:
Напълно квалифицираните имена на класове обикновено са дълги or много дълги. И изписването на дълго име (например java.util.ArrayList) всеки път в codeа е супер неудобно.
Ето защо Java добави възможността за импортиране на класове .
Можете да използвате кратко име на клас във вашия code, но първо трябва да уведомите компилатора кое пълно име на клас съответства на краткото име . Ами ако сега имате множество класове с едно и също име във вашия проект? Или първоначално имате един, но след това са добавени още 15...
За да използвате кратко име на клас във вашия code, трябва да добавите следната конструкция:
import fully-qualified-class-name;
Тази декларация трябва да се добави в самото начало на класа, веднага след декларацията package
.
Пример:
package com.codegym.tasks.task01;
import java.util.Scanner;
import com.test.helper.special.ArrayList;
public class Solution
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
ArrayList list = new ArrayList();
}
}
Импортирахме два класа ( и ), така че можем да използваме техните кратки имена в нашия code . И компилаторът ще знае кои класове да използва.java.util.Scanner
com.test.helper.special.ArrayList
И ето How би изглеждал същият code, ако не бяхме използвали import
:
package com.codegym.tasks.task01;
public class Solution
{
public static void main(String[] args)
{
java.util.Scanner console = new java.util.Scanner(System.in);
com.test.helper.special.ArrayList list = new com.test.helper.special.ArrayList();
}
}
Между другото, ако вашият проект има два класа с име Scanner
, няма да можете да импортирате и двата в един и същи файл: ще трябва да използвате дългото име за един от тях.
Да приемем, че имате Джен в екипа си. Няма проблеми с комуникацията, тъй като всички знаят коя е тя. Но ако имаше три Jens, тогава трябваше да се използват напълно квалифицирани имена, за да се разграничат.
Между другото, ако сте твърде мързеливи, за да добавите много оператори за импортиране към вашия клас, можете да използвате неговата мързелива version: instead of конкретно име на клас, поставете звездичка:
import package-name.*;
Това ще ви позволи да използвате кратките имена на всички класове в пакета.
Всички класове в java.lang
пакета се импортират автоматично, така че не е необходимо да пишете import
изявление за тях. Със сигурност вече знаете един от тези класове: java.lang.String
. Да, така е. Това е String
класът, който сме използвали за работа с низове.
GO TO FULL VERSION