Loading...

Пакеттер

 

Адатта, Java тилиндеги класстар пакеттелген. Пакеттер класстарды логикалык түрдө топтомдорго уюштурууга мүмкүндүк берет. Демейки боюнча, java мурунтан эле java.lang, java.util, java.io ж.б. сыяктуу бир катар орнотулган пакеттерге ээ. Ошондой эле, пакеттерде уя салынган пакеттер болушу мүмкүн.

 

Класстарды пакет катары уюштуруу класстар ортосундагы конфликттерди атоодон сактайт. Анткени, иштеп чыгуучулар өз класстарын бирдей ат менен аташат. Пакетке таандык болуу бир түшүнүктүү аталыштарга кепилдик берүүгө мүмкүндүк берет.

 

Класс белгилүү бир пакетке таандык экенин көрсөтүү үчүн, пакеттин директивасын, андан кийин пакеттин аталышын колдонуңуз:

 

package пакеттин_аты;

 

Эреже катарлар, пакеттердин аталыштары долбордун физикалык тузумуно, башкача айтканд, баштапкы код файлдары жайгашкан каталогдорду уйуштурууга туура келет. Ал эми долбоордун ичиндеги фаилдарга жол бул файлдардын пакет атына туура келет. Мисалы, класстар мыпак пакетине таандык болсо, анда бул класстар долбордун мыпак папкасына жайгаштырылат.

 

Классстар пакеттерде аныкталышы керек эмес. Эгерде класс үчүн пакет аныкталбаса, анда класс ата жок демаики пакетте деп эсептелет.

 

Мисалы, баштапкы файлдар папкасында изилдөө каталогун түзөлү. Анда биз төмөнкү код өзгөртүлдү Program.java file түзөбүз:

package study;

 

public class Program{

     

    public static void main(String[] args) {

            

        Person kate = new Person("Kate", 32);

        kate.displayInfo();

    }

}

class Person{

    

    String name;

    int age;

 

    Person(String name, int age){

        this.name = name;

        this.age = age;

    }

    void displayInfo(){

        System.out.printf("Name: %s \t Age: %d \n", name, age);

    }

}

Файлдын башындагы топтомду изилдөө директивасы бул жерде аныкталган Программа жана Адам класстары изилдөө пакетине таандык экенин көрсөтөт.

 

Биз иштеп чыгуу чөйрөсүндө иштегенде, мисалы, Netbeans'та, IDE пакеттерди жана алардын файлдарын түзүүнүн бардык маселелерин чечет. Демек, биз жөн гана баскычты басышыбыз керек, жана баары даяр болот. Бирок, биз программаны буйрук сабында компиляция кылсак, анда кээ бир кыйынчылыктарга туш болушубуз мүмкүн. Андыктан бул жагын карап көрөлү.

Программаны компиляциялоо үчүн, адегенде команда сабында/терминалда, cd буйругун колдонуп, изилдөө каталогу жайгашкан папкага өтүңүз.

 

cd C:\java

 

Мисалы, менин жагдайымда, бул C:\java каталогу (башкача айтканда, баштапкы код файлы C:\java\study\Program.java жолунда жайгашкан).

 

Компиляциялоо үчүн, буйрукту иштетиңиз

javac study\Program.java

Андан кийин окуу папкасында түзүлгөн Program.class жана Person.class файлдары пайда болот. Программаны иштетүү үчүн төмөнкү буйрукту аткарыңыз:

 

java study.Program

Пакеттерди жана класстарды импорттоо

Башка пакеттерден класстарды колдонуу керек болсо, анда бул пакеттерди жана класстарды камтышыбыз керек. Бул программага автоматтык түрдө кошулган java.lang пакетинин класстары (мисалы, String).

 

Мисалы, мурунку темалардан тааныш болгон Сканер классы java.util пакетинде, ошондуктан биз ага төмөнкү жол менен кире алабыз:

java.util.Scanner in = new java.util.Scanner(System.in);

Башкача айтканда, пакеттеги файлга анын объектисин түзүүдө толук жолду көрсөтөбүз. Бирок, пакет аталыштарынын бул башаламандыгы дайыма эле ыңгайлуу боло бербейт жана альтернатива катары, пакет директивасында көрсөтүлгөн импорттук директиваны колдонуу менен долбоорго пакеттерди жана класстарды импорттой алабыз:

package study;

 

import java.util.Scanner; // импорт класса Scanner

 

public class Program {

 

    public static void main(String[] args) {

        

        Scanner in = new Scanner(System.in);

    }

}

Import директивасы коддун эң башында көрсөтүлөт, андан кийин киргизилген класстын аталышы (бул учурда, Сканер классы).

 

Жогорудагы мисалда биз бир гана классты кошконбуз, бирок 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 да импорттун, статикалык импорттун өзгөчө формасына ээ. Бул үчүн, статикалык өзгөрткүч импорттук директивалар менен бирге колдонулат:

 

package study;

 

import static java.lang.System.*;

import static java.lang.Math.*;

 

public class Program {

 

    public static void main(String[] args) {

        

        double result = sqrt(20);

        out.println(result);

    }

}

Бул жерде Система жана Математика класстары статикалык түрдө импорттолот. Бул класстарда статикалык методдор бар. Статикалык импорттук операциянын аркасында биз бул ыкмаларды класстын аталышысыз колдоно алабыз. Мисалы, Math.sqrt(20) эмес, sqrt(20) деп жазыңыз, анткени сандын квадрат тамырын кайтаруучу sqrt() функциясы статикалык. (Биз класстын статикалык мүчөлөрүн кийинчерээк карайбыз.)

 

Ушундай эле нерсе System классына да тиешелүү: ал статикалык объектти аныктайт, ошондуктан биз аны классты көрсөтпөстөн колдоно алабыз.