CodeGym /Kurslar /JAVA 25 SELF /Java-da proqramın strukturu, main metodu

Java-da proqramın strukturu, main metodu

JAVA 25 SELF
Səviyyə , Dərs
Mövcuddur

1. Giriş

Proqramlaşdırmağa yeni başlayanda elə gəlir ki, sadəcə kodu sətir-sətir yazmaq kifayətdir və hər şey işləyəcək. Amma proqram bir az mürəkkəbləşən kimi beyində qarışıqlıq başlayır: nə haradadır, bu niyə belə yazılıb, və bir sətiri dəyişmək lazım olanda — həmin sətir ümumiyyətlə haradadır?

Ona görə də Java digər müasir dillərin əksəriyyəti kimi kodu “rəflərə” bölmək imkanı verir ki, istənilən an proqramın nə etdiyini başa düşmək və lazım olan yeri tez tapmaq mümkün olsun.

Bir şirkəti təsəvvür edin. Orada kadrlar şöbəsi, mühasibatlıq, IT şöbəsi, logistika şöbəsi və s. var. Hər şöbənin — öz məsuliyyət sahəsi, əməkdaşları və tapşırıqları olur.

Java-dakı proqramda bu cür hər “şöbə” — bir sinifdir. Məsələn, bir sinif istifadəçilərlə işi görür, digəri — hesablamaları, üçüncüsü — fayllarla işi.

Sadə bir layihənin tipik strukturu belədir:

  • Main.java — baş ofis: burada hər şeyin başladığı “giriş nöqtəsi” yerləşir.
  • User.java — istifadəçi məlumatlarının saxlanıldığı və emal edildiyi şöbə.
  • Calculator.java — hesablamalar şöbəsi.
  • FileHelper.java — fayl üzrə mütəxəssislər.

Hətta çox kiçik bir proqramda adətən heç olmasa bir sinif olur. Böyük layihələr isə yüzlərlə sinifdən ibarət bütöv bir “göydələn”dir!

2. Sinif — alətlər qutusu kimidir

Javaobyekt yönlü dildir və burada hər şey obyektlərdir. Obyektlərin tipləri siniflər adlanır.

Sinif — sanki içərisinə lazım olan şeyləri: dəyişənləri və metodları qoyduğumuz bir qutu və ya şkaf kimidir. Üstündə “Çəkiclər” yazılan qutunu təsəvvür edin: içəridə yalnız çəkiclə bağlı alətlər var.

class Example 
{
    // Burada bizim alətlərimiz olacaq: dəyişənlər və metodlar
}

Siniflər adətən dəyişənlər və funksiyalar saxlayır. Java-da sinifin dəyişənlərini adətən sahələr, funksiyalarını isə metodlar adlandırırlar. Amma mahiyyət dəyişmir.

İlk kodumuzu xatırlayırsınız?

System.out.println("Hamıya salam!");

Bu kodda həm sinif, həm də metodlar var:

  • System — sistemlə işləmək üçün metodlar saxlayan sinifdir.
  • outPrintStream sinifinin obyektini təqdim edən sahədir.
  • printlnPrintStream sinifinin ekrana mətn çıxaran metodudur.

Ümumən proqramlaşdırma, başqa siniflərin metodlarını çağıran öz sinif və metodlarımızı yazmağa dayanır.

3. main() metodunun qısa yazılışı

Əslində Java-da minimal proqram bu cür görünür:

class Program 
{
    public static void main(String[] args) 
    {
        // Burada sizin kodunuz
    }
}

O, minimum bir sinifdən ibarətdir və həmin sinif belə başlığa (siqnaturaya) malik main metodunu ehtiva etməlidir:


public static void main(String[] args)
Java-da main metodunun imzası

Ancaq Java 21-də main() metodunu qısa şəkildə yazmaq imkanı yarandı. Java kompilyatoru isə sonra (kompilyasiya zamanı) onu düzgün main() metoduna çevirir.

Ona görə də hər dəfə bu tip kod yazanda:

void main() 
{
    Scanner console = new Scanner(System.in);
    int age = console.nextInt();
    System.out.println("Yaş: " + age);
}

Java kompilyatoru onu belə koda çevirir:

class Program 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);
        int age = console.nextInt();
        System.out.println("Yaş: " + age);
    }
}

4. Tipik Java sinifi

Tipik bir Java sinifi təxminən belə görünür:

public class MathUtils 
{
    // Statik dəyişənlər (sinif üçün qlobal)
    static final double PI = 3.14159;
    static int callCounter = 0;

    // Statik metod: dairənin sahəsini hesablamaq
    public static double circleArea(double radius) 
    {
        callCounter++;
        return PI * radius * radius;
    }

    // Statik metod: iki ədədin maksimumunu tapmaq
    public static int max(int a, int b) 
    {
        callCounter++;
        return (a > b) ? a : b;
    }

    // Statik metod: metodların neçə dəfə çağırıldığı
    public static int getCallCount() 
    {
        return callCounter;
    }

    // main() metodundan sahələrə və metodlara müraciət edirik
    public static void main(String[] args) 
    {
        System.out.println("Dairənin sahəsi: " + circleArea(5));
        System.out.println("Maksimum: " + max(10, 42));
        System.out.println("Metodlar " + getCallCount() + " dəfə çağırılıb");
    }
}

Burada nə görürük:

  • Sinifin çoxlu metodu ola bilər.
  • Sinifin öz dəyişənləri ola bilər.
  • Sinifin metodları bir-birini çağırabilir.
  • Sinifin metodları ümumi dəyişənlərə müraciət edə bilər.
  • Hər metodun qarşısında eyni “sehrli sözlər” var: public static.
  • Hər metodun qarşısında müxtəlif tiplər var: int, double, void.

Aşağıda bu məqamların hamısını izah edəcəyik.

5. Sinifin sahələri (dəyişənləri) — onun yaddaşıdır

Sinifin daxilində dəyişənlər saxlamaq olar; onlara tez-tez sahələr (fields) deyilir. Bunlar hansısa məlumatı qoyduğumuz yaddaş hüceyrələri kimidir.

public class MathUtils 
{
    // Statik dəyişənlər (sinif üçün qlobal)
    static final double PI = 3.14159;
    static int callCounter = 0;
}    

Sahələr sinifə müxtəlif metod çağırışları arasında nələri isə “yada saxlamağa” imkan verir. Məsələn, düyməyə neçə dəfə basıldığını, yaxud metodun neçə dəfə çağırıldığını (callCounter) saymaq. Sahələrin sayı məhdud deyil.

6. Metodlar — sinifin yerinə yetirə biləcəyi hərəkətlər

Metodlar — sinifin “bacarıqları”dır. Əgər sinif əməkdaşdırsa, metodlar onun bacarıqlarıdır: nə edə bildiyi.

Məsələn, metod edə bilər:

  • nəyisə ekrana çıxartsın,
  • iki ədədin cəmini hesablasın,
  • “girişdə” məlumat qəbul edib nəticə qaytarsın.

Metodun quruluşu:

  1. Qaytarılan dəyərin tipi (məsələn, heç nə qaytarmırsa void, ədəd qaytarırsa int).
  2. Metodun adı (məsələn, circleArea).
  3. Daxil olan parametrlər (ola da bilər, olmaya da).
  4. Mövqeli mötərizələr { ... } — metodun gövdəsi.
public class MathUtils 
{
    // Statik metod: dairənin sahəsini hesablamaq
    public static double circleArea(double radius) 
    {
        callCounter++;
        return PI * radius * radius;
    }

    // Statik metod: iki ədədin maksimumunu tapmaq
    public static int max(int a, int b) 
    {
        callCounter++;
        return (a > b) ? a : b;
    }
}    

Metodlar və onlarla bağlı bütün məqamları yaxın mühazirələrdə daha ətraflı öyrənəcəksiniz.

7. Görünürlük modifikatorları

Java-da sinifin hansı hissələrinin digər siniflərdən əlçatan olacağını, hansılarının isə yalnız daxili ehtiyaclar üçün qalacağını təyin etmək olar. Bunun üçün görünürlük modifikatorları istifadə olunur.

  • publichamıya görünən. Belə metod və sahələr proqramın istənilən yerindən istifadə oluna/çağırıla bilər.
  • privateyalnız sinifin daxilində görünən. Bunlar kənardan əlçatan olmamalı olan daxili detallardır. Elə bil ki, ümumiyyətlə yoxdur.
public class MathUtils 
{
    // Statik dəyişənlər (sinif üçün qlobal)
    private static final double PI = 3.14159;
    private static int callCounter = 0;

    // Statik metod: dairənin sahəsini hesablamaq
    public static double circleArea(double radius) 
    {
        callCounter++;
        return PI * radius * radius;
    }
}    

Qızıl qayda: adətən sahələr private edilir, kənara isə yalnız lazım olan metodlar public modifikatoru ilə “çıxarılır”. Görünürlük modifikatorları barədə daha ətraflı — yaxın mühazirələrdə.

8. Statik metodlar və dəyişənlər

Adətən Java-da sinif obyekt yaratmaq üçün şablon kimi istifadə olunur. Siz sinifinizi yazırsınız, sonra new açar sözü ilə həmin sinifdən obyektlər yaradırsınız. Və yalnız bundan sonra obyektlərin metodlarını çağırırsınız.

Amma sinifdən istifadə etməyin ikinci yolu da var — o, proqramın istənilən yerindən çağırıla bilən qlobal dəyişən və metodlar üçün konteynerdir. Məhz bunun üçün static açar sözü istifadə olunur. O, Java kompilyatoruna deyir ki, sinifin metod və sahələri sinif obyektinə deyil, birbaşa sinifin özünə bağlıdır. Buna görə də onları sinifdən obyekt yaratmadan çağırmaq olar.

Siz, bu arada, belə metodlardan mütəmadi istifadə edirsiniz:

Integer.parseInt();     // Integer sinfindəki statik parseInt() metodu
String.valueOf();       // String sinfindəki statik valueOf() metodu 
Double.isInfinite();    // Double sinfindəki statik isInfinite() metodu 
Arrays.copy();          // Arrays sinfindəki statik copy() metodu 

main() metodu həmişə statik elan olunur, çünki Java proqramınızın icrası ondan başlayır. Hər hansı obyekt yaradılmadan öncə.

9. IDEA üçün lifehack

Tam main() metodu siqnatırı belədir:

public static void main(String[] args) 

Və onu IntelliJ IDEA-da hər dəfə yazmamaq üçün qısa yol var. Sadəcə psvm yazın və Tab düyməsini basın, IntelliJ IDEA isə sizin yerinizə bu kodu yazacaq:

public static void main(String[] args) 
{
    
}

Yadda saxlamaq asandır — psvmpublic static void main sözlərinin ilk hərfləridir.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION