JavaJava · Chapterبەش 8 · Lectureوانە 8.4

Packages, import and the Java APIپاکێجەکان، import و APIـی Java

Java comes with a big library of ready-made classes, the Java API, sorted into packages such as java.lang, java.util and java.time. Learn what import really does, why java.lang needs no import, what to do when two packages share a class name, how to read an API page, how to make and run your own package, and how to work with dates using LocalDate and DateTimeFormatter, plus import static.

Java گەورەی ئامادەی لەگەڵدایە، Java، کە بەسەر وەک ⁦java.lang⁩، ⁦java.util⁩ و ⁦java.time⁩ دابەش کراوە. فێر دەبیت import بەڕاستی چی دەکات، بۆچی ⁦java.lang⁩ پێویستی بە import نییە، چی بکەیت کاتێک دوو هەمان ناوی هەیە، چۆن لاپەڕەیەکی بخوێنیتەوە، چۆن خۆت دروست و جێبەجێ بکەیت و چۆن بە LocalDate و DateTimeFormatter کار لەگەڵ ڕێکەوت بکەیت، لەگەڵ import static.

18 min read18 خولەک خوێندنەوە · 20 stepsهەنگاو

What you will learnچی فێر دەبیت

  • Explain what the Java API is and how packages organise its classes.
  • Import one class or a whole package, and read the javac messages when an import is missing or wrong.
  • Find a class and its methods in the Java 17 API documentation.
  • Put your own classes in a package, compile them with javac (also with -d) and run them by their full name.
  • Create, read and format dates with LocalDate, LocalTime, LocalDateTime and DateTimeFormatter.
  • ڕوون بکەیتەوە Java چییە و چۆن ناوی ڕێک دەخەن.
  • یەک یان هەموو import بکەیت و javac بخوێنیتەوە کاتێک importـێک نییە یان هەڵەیە.
  • و لە ⁦Java 17⁩ـدا بدۆزیتەوە.
  • خۆت بخەیتە ناو ، بە javac (هەروەها بە -d) کۆمپایلیان بکەیت و بە ناوی تەواویان جێبەجێیان بکەیت.
  • بە LocalDate، LocalTime، LocalDateTime و DateTimeFormatter ڕێکەوت دروست بکەیت، بیخوێنیتەوە و بە شێوەی دڵخواز بینووسیت.

The Java API: a library of ready-made classesAPIـی Java: کتێبخانەیەک لە کلاسی ئامادە

You have already used classes that you did not write: String, Math, System and Scanner. They come with every JDK, in Java's (application programming interface), also called the : a library of ready-made classes and interfaces for building Java programs. Instead of writing a keyboard reader or a square-root method yourself, you use the class that is already there.

تا ئێستا چەند بەکار هێناوە کە خۆت نەتنووسیون: String، Math، System و Scanner. ئەمانە لەگەڵ هەموو JDKـێکدا دێن، لە ناو Javaـدا (application programming interface)، کە پێی دەوترێت یش: لە و ئامادە بۆ دروستکردنی Java. لە جیاتی ئەوەی خۆت شتێک بۆ خوێندنەوەی یان بۆ بنووسیت، ئەو بەکار دەهێنیت کە پێشتر ئامادەیە.

Four shelves of a library. Each shelf is a package, with its name on the left: java.lang holds the books String, Math, System and Integer; java.util holds Scanner, Random, ArrayList and Arrays; java.io holds File, FileWriter, FileReader and PrintStream; java.time holds LocalDate, LocalTime, Duration and Year. A legend says: a shelf is a package, a book is a class. Java SE 17 has 177 packages and about 3,300 public classes and interfaces, and every new version adds more.چوار ڕەفەی کتێبخانەیەک. هەر ڕەفەیەک پاکێجێکە و ناوەکەی لە لای چەپە: java.lang کتێبەکانی String، Math، System و Integer هەڵدەگرێت؛ java.util کتێبەکانی Scanner، Random، ArrayList و Arrays؛ java.io کتێبەکانی File، FileWriter، FileReader و PrintStream؛ java.time کتێبەکانی LocalDate، LocalTime، Duration و Year. ڕێبەرێک دەڵێت: ڕەفە پاکێجە و کتێب کلاسە. لە Java SE 17ـدا 177 پاکێج و نزیکەی 3300 کلاس و نێوبەستەی گشتی هەن و هەر وەشانێکی نوێ زیاتر زیاد دەکات.
Shelves are packages, books are classes, and the whole library is the APIڕەفەکان ، کتێبەکان و هەموو CêIT

The API keeps growing. Java 8 (2014) added the package java.time for dates, Java 11 added java.net.http for talking to web servers, and every release adds more. Java SE 17 has 177 packages with more than 3,300 public classes and interfaces (counted on JDK 17). Nobody learns them all: you learn the common ones and look the others up.

هەر گەورەتر دەبێت. ⁦Java 8 (2014)⁩ java.timeـی بۆ ڕێکەوت زیاد کرد، ⁦Java 11⁩ java.net.httpـی بۆ قسەکردن لەگەڵ زیاد کرد و هەر شتی تر زیاد دەکات. لە ⁦Java SE 17⁩ـدا ⁦177⁩ هەیە بە زیاتر لە ⁦3300⁩ و گشتییەوە (لەسەر ⁦JDK 17⁩ ژمێردراون). کەس هەموویان فێر نابێت: باوەکان فێر دەبیت و ئەوانی تر لە دەدۆزیتەوە.

Packages: folders of classesپاکێج: فۆڵدەرێک بۆ کلاسەکان

Thousands of classes need order, so the API keeps related classes together in . A package is like a folder: java.lang holds the basic classes (String, Math, System), java.util useful tools (Scanner, Random, ArrayList), java.io files, and java.time dates and times. A package can sit inside another one: java.time.format is inside java.time.

هەزاران پێویستیان بە ڕێکخستن هەیە، بۆیە پەیوەندیدار پێکەوە لە هەڵدەگرێت. وەک وایە: java.lang بنەڕەتی هەڵدەگرێت (String، Math، System)، java.util ئامرازی بەسوود (Scanner، Random، ArrayList)، java.io و java.time ڕێکەوت و کات. دەتوانێت لە ناو تردا بێت: java.time.format لە ناو java.timeـدایە.

A folder tree. The folder java holds the folders lang (String, Math, System), util (Scanner, Random, ArrayList), io (File, PrintStream) and time (LocalDate, LocalTime); inside time is the folder format (DateTimeFormatter), a package inside a package. A card explains the full name java.util.Scanner: the package java.util plus the class Scanner; each dot is one folder level, java / util / Scanner; package names are all small letters.دارێکی فۆڵدەر. فۆڵدەری java فۆڵدەرەکانی lang (String، Math، System)، util (Scanner، Random، ArrayList)، io (File، PrintStream) و time (LocalDate، LocalTime) لەخۆ دەگرێت؛ لە ناو time فۆڵدەری format هەیە (DateTimeFormatter)، پاکێجێک لە ناو پاکێجێکدا. کارتێک ناوی تەواوی java.util.Scanner ڕوون دەکاتەوە: پاکێجی java.util و کلاسی Scanner؛ هەر خاڵێک ئاستێکی فۆڵدەرە، java / util / Scanner؛ ناوی پاکێج هەمووی بە پیتی بچووکە.
Full name = package + class: each dot is one folder levelناوی تەواو = + : هەر خاڵێک ئاستێکی CêIT

A class's full name is its package, a dot and the class name: java.util.Scanner. On disk each dot is one folder level. You may always write the full name instead of importing: java.util.Scanner in = new java.util.Scanner(System.in); works with no import line, but it is long. Packages also keep names apart: two classes may share a short name if their packages differ.

ناوی تەواوی بریتییە لە ، خاڵێک و ناوی : java.util.Scanner. لەسەر دیسک هەر خاڵێک ئاستێکی . هەمیشە دەتوانیت لە جیاتی import ناوی تەواو بنووسیت: java.util.Scanner in = new java.util.Scanner(System.in); بەبێ کار دەکات، بەڵام درێژە. ناوەکانیش لە یەک جیا دەکەنەوە: دوو دەتوانن هەمان ناوی کورتیان هەبێت ئەگەر جیاواز بن.

import: use a class by its short nameimport: بەکارهێنانی کلاسێک بە ناوە کورتەکەی

To use a class of another package by its short name, write an at the top of the file, above the class: import java.util.Scanner;. Then Scanner means java.util.Scanner everywhere in the file:

بۆ بەکارهێنانی تر بە ناوە کورتەکەی، لە سەرەوەی بنووسە، لە سەرووی : import java.util.Scanner;. ئیتر Scanner لە هەموو واتای java.util.Scanner دەدات:

AskName.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import java.util.Scanner;

public class AskName {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Your name: ");
        String name = input.nextLine();
        System.out.println("Hello, " + name + "!");
    }
}

Delete the first line and javac stops with two errors, one for each Scanner on line 3 (Reading a javac message):

دێڕی یەکەم بسڕەوە و javac بە دوو دەوەستێت، یەکێک بۆ هەر Scannerـێکی دێڕی 3 (خوێندنەوەی پەیامێکی javac):

Outputدەرئەنجام
$ javac AskName.java
AskName.java:3: error: cannot find symbol
        Scanner input = new Scanner(System.in);
        ^
  symbol:   class Scanner
  location: class AskName
AskName.java:3: error: cannot find symbol
        Scanner input = new Scanner(System.in);
                            ^
  symbol:   class Scanner
  location: class AskName
2 errors
An animation in four steps. 1: AskName.java uses Scanner with no import line; the java.util shelf is greyed out as not imported, and javac reports cannot find symbol, class Scanner, because it knows only java.lang and the classes of your own package. 2: the line import java.util.Scanner; is added; an arrow goes from it to the Scanner book on the java.util shelf: Scanner means java.util.Scanner. 3: with import java.util.*; every book on the shelf is marked, but javac still takes only the classes you use. 4: the class file holds new java/util/Scanner: import copies no code, and the class files made with Scanner or with the star are byte for byte the same.
An animation in four steps. 1: AskName.java uses Scanner with no import line; the java.util shelf is greyed out as not imported, and javac reports cannot find symbol, class Scanner, because it knows only java.lang and the classes of your own package. 2: the line import java.util.Scanner; is added; an arrow goes from it to the Scanner book on the java.util shelf: Scanner means java.util.Scanner. 3: with import java.util.*; every book on the shelf is marked, but javac still takes only the classes you use. 4: the class file holds new java/util/Scanner: import copies no code, and the class files made with Scanner or with the star are byte for byte the same.
import tells javac the full name of a class; it copies no code ناوی تەواوی بە javac دەڵێت؛ هیچ کۆدێک کۆپی ناکاتCêIT

import: use a class by its short nameimport: بەکارهێنانی کلاسێک بە ناوە کورتەکەی

One class or the whole package: the starیەک کلاس یان هەموو پاکێجەکە: ئەستێرە

import java.util.*; imports every class of java.util at once. The star is a : it stands for every class name of that package. This dice game uses two classes of java.util with one line (Random):

import java.util.*; هەموو java.util بە یەکجار دەهێنێت. ئەستێرەکە : جێگەی هەموو ناوێکی لەو دەگرێتەوە. ئەم یارییە زارە بە یەک دێڕ دوو java.util بەکار دەهێنێت (Random):

DiceGame.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import java.util.*;

public class DiceGame {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Random dice = new Random(7);   // seed 7: the same numbers in every run
        System.out.print("How many dice? ");
        int n = input.nextInt();
        for (int i = 1; i <= n; i++) {
            System.out.println("Die " + i + ": " + (dice.nextInt(6) + 1));
        }
    }
}
The line import java.time.; above the folder java.time. The classes LocalDate, LocalTime, LocalDateTime and Duration, directly in the folder, are ticked: the star covers them. The subfolder format with DateTimeFormatter is crossed out: java.time.format is a separate package, javac says cannot find symbol, and the fix is a second line, import java.time.format.;.دێڕی import java.time.; لە سەرووی فۆڵدەری java.time. کلاسەکانی LocalDate، LocalTime، LocalDateTime و Duration کە ڕاستەوخۆ لە فۆڵدەرەکەدان نیشانەی ڕاستیان لەسەرە: ئەستێرەکە دەیانگرێتەوە. فۆڵدەری ناوەوەی format بە DateTimeFormatterـەوە خەتی لێ دراوە: java.time.format پاکێجێکی جیایە، javac دەڵێت cannot find symbol و چارەسەرەکە دێڕێکی دووەمە، import java.time.format.;.
The star reaches only the classes of one packageئەستێرەکە تەنیا دەگاتە یەک CêIT

Packages only look nested. java.time.* does not import java.time.format.DateTimeFormatter: that class needs its own line. Which form is better? Both compile to the same program; many programmers import single classes so the reader sees where each name comes from.

تەنیا وا دیارن کە لە ناو یەکدان. java.time.* java.time.format.DateTimeFormatter ناهێنێت: ئەو دێڕی خۆی پێویستە. کامیان باشترە؟ هەردووکیان هەمان دروست دەکەن؛ زۆر بەرنامەساز بە import دەکەن تا خوێنەر ببینێت هەر ناوێک لە کوێوە هاتووە.

import: use a class by its short nameimport: بەکارهێنانی کلاسێک بە ناوە کورتەکەی

Does import make a program bigger?ئایا import بەرنامەیەک گەورەتر دەکات؟

No. An import line only tells javac the full name of a class; nothing is copied into your program. Here the same class is compiled twice, once with import java.util.Scanner; and once with import java.util.*;. cmp finds no difference, and javap -c shows that the class file names the class in full, java/util/Scanner:

نەخێر. تەنیا ناوی تەواوی بە javac دەڵێت؛ هیچ شتێک کۆپی ناکرێت بۆ ناو . لێرەدا هەمان دوو جار کۆمپایل دەکرێت، جارێک بە import java.util.Scanner; و جارێک بە import java.util.*;. cmp هیچ جیاوازییەک نادۆزێتەوە و javap -c نیشان دەدات کە فایلی class ناوی بە تەواوی دەنووسێت، java/util/Scanner:

BASHType in a terminalلە تێرمیناڵدا بینووسە
javac one/Greet.java
javac star/Greet.java
cmp one/Greet.class star/Greet.class && echo "The two class files are byte for byte the same."
javap -c one/Greet.class | grep Scanner

So import is not like copying a page out of a book: it is like writing the book's shelf on a note. Java loads the real class from the library only when the program runs (Loading on demand).

کەواتە import وەک کۆپیکردنی لاپەڕەیەک لە کتێبێک نییە: وەک نووسینی ناوی ڕەفەی کتێبەکە وایە لەسەر کاغەزێک. Java ڕاستەقینە تەنیا ئەو کاتە لە بار دەکات کە جێبەجێ دەکرێت (بارکردن کاتی پێویست).

import: use a class by its short nameimport: بەکارهێنانی کلاسێک بە ناوە کورتەکەی

Two packages, one class nameدوو پاکێج، یەک ناوی کلاس

Short names can clash. java.util has a List (a list of values) and java.awt has a List too (a list box on a window). Import both packages with a star and javac cannot choose:

ناوە کورتەکان دەتوانن بەریەک بکەون. java.util Listـێکی هەیە ( لە ) و java.awtـیش Listـێکی هەیە (سندووقی لیست لەسەر پەنجەرەیەک). هەردوو بە ئەستێرە import بکە و javac ناتوانێت هەڵبژێرێت:

TwoLists.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import java.awt.*;
import java.util.*;

public class TwoLists {
    public static void main(String[] args) {
        List<String> names = List.of("Aram", "Shilan");
        System.out.println(names);
    }
}
Two shelves: java.util with List, Scanner and Random, and java.awt with List, Button and Color. Both List books are marked. The code imports java.awt.* and java.util.* and declares List<String> names; dashed arrows go to both List books with a question mark, and javac reports reference to List is ambiguous. The fix below: import java.util.List; a single-class import is stronger than a wildcard import.دوو ڕەفە: java.util بە List، Scanner و Randomـەوە و java.awt بە List، Button و Colorـەوە. هەردوو کتێبی List نیشان کراون. کۆدەکە java.awt.* و java.util.* دەهێنێت و List<String> names دەناسێنێت؛ دوو تیری پچڕپچڕ بە نیشانەی پرسیارەوە دەچن بۆ هەردوو کتێبەکەی List و javac دەڵێت reference to List is ambiguous. چارەسەرەکە لە خوارەوە: import java.util.List;، هێنانی یەک کلاس بە ناوی تەواو لە هێمای جێگرەوە بەهێزترە.
One single-class import decides which List you meanimportـی یەک بڕیار دەدات مەبەستت کام ListـەCêIT

Fix it by naming the one you mean: add import java.util.List;. A single-class import is stronger than any wildcard import, so List now means java.util.List, and the program prints [Aram, Shilan]. (List.of makes a fixed list; lists come in ArrayList.)

بە ناونانی ئەوەی مەبەستتە چاکی بکە: import java.util.List; زیاد بکە. importـی یەک لە هەموو بەهێزترە، بۆیە ئێستا List واتای java.util.List دەدات و [Aram, Shilan] چاپ دەکات. (List.of نەگۆڕ دروست دەکات؛ لە ArrayListـدا دێن.)

java.lang: imported automatically⁦java.lang⁩: خۆکار هێنراوە

Why did String, Math and System never need an import? They are in java.lang, the one package that Java imports into every file by itself, as if import java.lang.*; stood at the top. The other classes of your own package need no import either.

بۆچی String، Math و System هەرگیز پێویستیان بە import نەبوو؟ ئەوان لە java.langـدان، تاکە کە Java خۆی دەیهێنێتە ناو هەموو ، وەک ئەوەی import java.lang.*; لە سەرەوە نووسرابێت. تری خۆشت پێویستیان بە import نییە.

NoImport.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
public class NoImport {
    public static void main(String[] args) {
        String city = "Hawler";
        System.out.println(city.toUpperCase());
        System.out.println(Math.max(4, 9));
        System.out.println(Integer.MAX_VALUE);
        System.out.println(java.lang.Math.sqrt(81));   // the full name works too
    }
}
Two panels. Left, java.lang, imported automatically: the books String, Math, System, Integer, Double and Character, and the code String city = "Duhok"; int big = Math.max(4, 9); with a tick: no import line needed. Right, every other package: java.util with Scanner, java.time with LocalDate and java.io with File, each behind a padlock, and the line import java.util.Scanner;: first an import line, then the short name.دوو بەش. چەپ، java.lang کە خۆکار هێنراوە: کتێبەکانی String، Math، System، Integer، Double و Character و کۆدی String city = "Duhok"; int big = Math.max(4, 9); بە نیشانەی ڕاستەوە: پێویستی بە ڕستەی import نییە. ڕاست، هەموو پاکێجێکی تر: java.util بە Scannerـەوە، java.time بە LocalDateـەوە و java.io بە Fileـەوە، هەریەکەیان لە پشت قوفڵێکەوە و دێڕی import java.util.Scanner;: سەرەتا ڕستەی import، پاشان ناوە کورتەکە.
Only java.lang is open without an import lineتەنیا ⁦java.lang⁩ بەبێ کراوەیەCêIT

The last line shows that the full name java.lang.Math works too, though nobody writes it. Math is a class full of static methods (The Math class); the wrapper classes such as Integer come in Wrapper classes.

دوایین دێڕ نیشان دەدات کە ناوی تەواوی java.lang.Mathـیش کار دەکات، هەرچەندە کەس نایینووسێت. Math پڕ لە (کلاسی Math)؛ وەک Integer لە کلاسە پێچەرەوەکانـدا دێن.

Reading the API documentationخوێندنەوەی بەڵگەنامەی API

Every class of the API has its own web page in the API . For Java 17 it starts at docs.oracle.com/en/java/javase/17/docs/api; type a class name such as Scanner into its SEARCH box. Newer versions have their own pages; as of November 2026 the newest is Java 27 (…/javase/27/docs/api/). The pages are made by the JDK's javadoc tool from the documentation comments in Java's own source code (Documentation comments).

هەموو تایبەتی خۆی لە هەیە. بۆ ⁦Java 17⁩ لێرەوە دەست پێ دەکات: ⁦docs.oracle.com/en/java/javase/17/docs/api⁩؛ ناوی وەک Scanner لە خانەی SEARCHـدا بنووسە. نوێتر لاپەڕەی خۆیان هەیە؛ تا تشرینی دووەمی ⁦2026⁩ نوێترینیان ⁦Java 27⁩ـە (…/javase/27/docs/api/). ئامرازی javadocـی JDK لە ناو خودی Javaـوە دروستیان دەکات (لێدوانەکانی بەڵگەنامە).

A simplified drawing of the API page of Scanner, with five numbered notes. 1: at the top, Module java.base and Package java.util: where the class lives. 2: the title Class Scanner. 3: the description and Since: 1.5. 4: the Method Summary table with the columns Modifier and Type, Method and Description; rows boolean hasNextInt(), int nextInt() (highlighted) and String nextLine(): one row per method, with what it returns, its name and parameters. 5: the details of nextInt(): Returns, and Throws InputMismatchException and NoSuchElementException.وێنەیەکی سادەکراوی لاپەڕەی APIـی Scanner بە پێنج تێبینیی ژمارەدار. 1: لە سەرەوە Module java.base و Package java.util: کلاسەکە لە کوێدایە. 2: ناونیشانی Class Scanner. 3: ڕوونکردنەوەکە و Since: 1.5. 4: خشتەی Method Summary بە ستوونەکانی Modifier and Type، Method و Description؛ ڕیزەکانی boolean hasNextInt()، int nextInt() (نیشانکراو) و String nextLine(): هەر میتۆدێک ڕیزێک، بە ئەوەی دەیگەڕێنێتەوە، ناوەکەی و پارامیتەرەکانی. 5: وردەکاریی nextInt(): Returns و Throws InputMismatchException و NoSuchElementException.
An API page, simplified: where the class lives, what it does, its methods and their detailsلاپەڕەیەکی بە سادەیی: لە کوێیە، چی دەکات، و وردەکارییەکانیانCêIT
  1. At the top: module java.base, package java.util. So the import line is import java.util.Scanner;.

    لە سەرەوە: module java.base، java.util. کەواتە دەبێتە import java.util.Scanner;.

  2. The description, and Since: 1.5: Scanner exists since Java 5. A method marked Since: 11 does not exist in Java 8.

    ڕوونکردنەوەکە و ⁦Since: 1.5⁩: Scanner لە ⁦Java 5⁩ـەوە هەیە. کە ⁦Since: 11⁩ـی لەسەر بێت لە ⁦Java 8⁩ـدا نییە.

  3. The Method Summary: the left column is what the method gives back (int for nextInt(), String for nextLine()), then its name and parameters.

    Method Summary: ستوونی چەپ ئەوەیە کە دەیگەڕێنێتەوە (int بۆ nextInt()، String بۆ nextLine())، پاشان ناوەکەی و .

  4. Click a method for its details: Parameters, Returns and Throws. nextInt() throws InputMismatchException when the next word is not a whole number (Wrong input).

    کرتە لە بکە بۆ وردەکارییەکانی: Parameters، Returns و Throws. nextInt() کاتێک وشەی دواتر نەبێت InputMismatchException فڕێ دەدات (نێوخستەی هەڵە).

Your own packageپاکێجی خۆت

Your classes can live in a package too. Two rules: the file starts with a package line, and it sits in a folder with the same name as the package. This class Report is in the package school, so its file is school/Report.java:

خۆشت دەتوانن لە بژین. دوو یاسا: بە دێڕێکی package دەست پێ دەکات و لە کە هەمان ناوی هەیە. ئەم Report لە schoolـدایە، بۆیە school/Report.javaـیە:

school/Report.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
package school;

public class Report {
    public static void printTitle(String title) {
        System.out.println("=== " + title + " ===");
    }

    public static String grade(int mark) {
        if (mark >= 90) {
            return "Excellent";
        } else if (mark >= 50) {
            return "Pass";
        }
        return "Fail";
    }

    public static void main(String[] args) {      // a quick self-test of this class
        System.out.println("Testing Report: 95 is " + grade(95));
    }
}
Left, a folder tree: myproject holds Main.java and the folder school, which holds Report.java. Right, two code cards: school/Report.java starts with package school; and public class Report, and Main.java starts with import school.Report;. A dashed arrow joins the folder school to the line package school;, another joins the file Report.java to class Report. Notes: folder school = package school;, file Report.java = class Report; another package uses it with import school.Report;, and the class must be public.لای چەپ دارێکی فۆڵدەر: myproject Main.java و فۆڵدەری school لەخۆ دەگرێت، کە Report.javaـی تێدایە. لای ڕاست دوو کارتی کۆد: school/Report.java بە package school; و public class Report دەست پێ دەکات و Main.java بە import school.Report;. تیرێکی پچڕپچڕ فۆڵدەری school بە دێڕی package school;ـەوە دەبەستێتەوە و یەکێکی تر فایلی Report.java بە class Reportـەوە. تێبینییەکان: فۆڵدەری school = package school;، فایلی Report.java = class Report؛ پاکێجێکی تر بە import school.Report; بەکاری دەهێنێت و کلاسەکە دەبێت public بێت.
The folder matches the package, the file matches the class لەگەڵ و لەگەڵ یەک دەگرنەوەCêIT

Report and its methods are marked public, so code in other packages may use them; without public, javac refuses (Package access explains the rest). The main method at the end is a small test of the class itself.

Report و بە public نیشان کراون، بۆیە کۆدی تر دەتوانێت بەکاریان بهێنێت؛ بەبێ public، javac ڕەتی دەکاتەوە (دەستڕاگەیشتنی پاکێج باقییەکەی ڕوون دەکاتەوە). main لە کۆتاییدا تاقیکردنەوەیەکی بچووکی خودی .

Your own packageپاکێجی خۆت

Using your packageبەکارهێنانی پاکێجەکەت

Main.java sits in the top folder and imports the class like any API class:

Main.java لە سەرەوەدایە و وەک هەر import دەکات:

Main.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import school.Report;

public class Main {
    public static void main(String[] args) {
        Report.printTitle("Term 1");
        System.out.println("Aram: 92 " + Report.grade(92));
        System.out.println("Hana: 47 " + Report.grade(47));
    }
}

Compile Main.java from the top folder: javac sees import school.Report;, finds school/Report.java and compiles it as well, putting Report.class next to it:

Main.java لە سەرەوە کۆمپایل بکە: javac import school.Report; دەبینێت، school/Report.java دەدۆزێتەوە و ئەویش کۆمپایل دەکات و Report.class لە تەنیشتی دادەنێت:

BASHType in a terminalلە تێرمیناڵدا بینووسە
javac Main.java
ls school
java Main

Your own packageپاکێجی خۆت

Running a class of a package, and javac -dجێبەجێکردنی کلاسێکی پاکێج و ⁦javac -d⁩

A class inside a package runs with its full name, from the top folder: java school.Report runs the test main of Report. From inside the folder school the short name fails, because the class file knows it belongs to school:

کە لە ناو بە ناوی تەواوی جێبەجێ دەکرێت، لە سەرەوە: java school.Report mainـی تاقیکردنەوەی Report جێبەجێ دەکات. لە ناو schoolـەوە ناوە کورتەکە سەرناگرێت، چونکە فایلی class دەزانێت هی schoolـە:

BASHType in a terminalلە تێرمیناڵدا بینووسە
java school.Report
cd school && java Report

The option -d of javac puts the class files into a separate folder, in folders that copy the packages. java -cp classes Main then says where to look for them (the class path):

هەڵبژاردەی -dـی javac فایلەکانی class دەخاتە جیاوە، لە ناو کە وێنەی دەگرنەوە. پاشان java -cp classes Main دەڵێت لە کوێ بەدوایاندا بگەڕێت ⁦(class path)⁩:

BASHType in a terminalلە تێرمیناڵدا بینووسە
javac -d classes Main.java
ls classes classes/school
java -cp classes Main
Two folder trees. Left, after javac Main.java: myproject holds Main.java, Main.class and the folder school with Report.java and Report.class: the class files sit next to the .java files. Right, after javac -d classes Main.java: myproject holds Main.java, school with Report.java, and a new folder classes with Main.class and a folder school holding Report.class. Below: java Main and java -cp classes Main, run from the top folder; -cp says where the class files are.دوو داری فۆڵدەر. چەپ، دوای javac Main.java: myproject Main.java، Main.class و فۆڵدەری school بە Report.java و Report.classـەوە لەخۆ دەگرێت: فایلەکانی class لە تەنیشت فایلەکانی javaـن. ڕاست، دوای javac -d classes Main.java: myproject Main.java، school بە Report.javaـوە و فۆڵدەرێکی نوێی classes لەخۆ دەگرێت کە Main.class و فۆڵدەرێکی school بە Report.classـەوە تێدایە. لە خوارەوە: java Main و java -cp classes Main، لە فۆڵدەری سەرەوە؛ -cp دەڵێت فایلەکانی class لە کوێن.
Without -d the class files sit next to the sources; with -d they get their own folderبەبێ -d فایلەکانی class لە تەنیشت ؛ بە -d تایبەتیان هەیەCêIT

Your own packageپاکێجی خۆت

Naming packagesناونانی پاکێجەکان

Package names follow simple rules, so names from different people never clash:

ناوی یاسای سادە پەیڕەو دەکەن، تا ناوی کەسە جیاوازەکان هەرگیز بەریەک نەکەون:

  • All small letters: school, tools, never School (class names start with a capital, package names do not).
  • Companies start with their internet domain written backwards: the company of example.com uses com.example.school, and the folders become com/example/school.
  • Names starting with java. and javax. belong to the Java platform itself; never use them for your own code.
  • A small program may stay in no package at all (the unnamed package), as most programs in this course do.
  • هەمووی بە پیتی بچووک: school، tools، هەرگیز School (ناوی بە پیتی گەورە دەست پێ دەکات، ناوی نا).
  • کۆمپانیاکان بە ناوی دۆمەینەکەیان بە پێچەوانە دەست پێ دەکەن: کۆمپانیای example.com com.example.school بەکار دەهێنێت و دەبنە com/example/school.
  • ئەو ناوانەی بە java. و javax. دەست پێ دەکەن هی خودی ؛ هەرگیز بۆ کۆدی خۆت بەکاریان مەهێنە.
  • بچووک دەتوانێت لە هیچ نەبێت (unnamed package)، وەک زۆربەی ئەم کۆرسە.

Dates and times: java.timeڕێکەوت و کات: ⁦java.time⁩

The package java.time (since Java 8) holds Java's date and time classes. Three are used most: LocalDate (a date: year, month, day), LocalTime (a time: hours, minutes, seconds and fractions) and LocalDateTime (both). now() asks the computer's clock:

java.time (لە ⁦Java 8⁩ـەوە) ڕێکەوت و کاتی Java هەڵدەگرێت. سێیان زۆرتر بەکار دێن: LocalDate (ڕێکەوت: ساڵ، مانگ، ڕۆژ)، LocalTime (کات: کاتژمێر، خولەک، چرکە و بەشی چرکە) و LocalDateTime (هەردووکیان). now() لە کاتژمێری دەپرسێت:

Now.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;

public class Now {
    public static void main(String[] args) {
        System.out.println(LocalDate.now());
        System.out.println(LocalTime.now());
        System.out.println(LocalDateTime.now());
    }
}
Three cards. LocalDate: a calendar page, NOV 2026, 04: a day on the calendar, printed 2026-11-04. LocalTime: a clock at 15:35: a time on the clock, printed 15:35:43.809213. LocalDateTime: the calendar page and the clock together, printed 2026-11-04T15:35:43.809253. Note: LocalDateTime prints a T between the date and the time.سێ کارت. LocalDate: لاپەڕەیەکی ڕۆژژمێر، NOV 2026، 04: ڕۆژێک لە ڕۆژژمێردا، چاپکراو 2026-11-04. LocalTime: کاتژمێرێک لە 15:35دا: کاتێک لە کاتژمێردا، چاپکراو 15:35:43.809213. LocalDateTime: لاپەڕەی ڕۆژژمێرەکە و کاتژمێرەکە پێکەوە، چاپکراو 2026-11-04T15:35:43.809253. تێبینی: LocalDateTime پیتی T لە نێوان ڕێکەوت و کاتدا چاپ دەکات.
A date, a time, or both: three classesڕێکەوت، کات یان هەردووکیان: سێ CêIT

This run was made on 4 November 2026 in Hawler; your output shows your own date and time. Local means that no time zone is stored: now() uses the computer's . The T separates the date from the time.

ئەم جێبەجێکردنە لە 4ی تشرینی دووەمی ⁦2026⁩ لە هەولێر کراوە؛ تۆ ڕێکەوت و کاتی خۆت نیشان دەدات. Local واتە هیچ هەڵناگیرێت: now() بەکار دەهێنێت. T ڕێکەوت لە کات جیا دەکاتەوە.

Dates and times: java.timeڕێکەوت و کات: ⁦java.time⁩

Making a date and reading its partsدروستکردنی ڕێکەوتێک و خوێندنەوەی بەشەکانی

LocalDate.of(year, month, day) makes any date; here Newroz 2027. Its methods read the parts, plusDays moves the date and isLeapYear checks the year:

LocalDate.of(year, month, day) هەر ڕێکەوتێک دروست دەکات؛ لێرەدا نەورۆزی ⁦2027⁩. بەشەکانی دەخوێننەوە، plusDays ڕێکەوتەکە دەجووڵێنێت و isLeapYear ساڵەکە دەپشکنێت:

Newroz.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import java.time.LocalDate;

public class Newroz {
    public static void main(String[] args) {
        LocalDate newroz = LocalDate.of(2027, 3, 21);
        System.out.println(newroz);
        System.out.println("Year:  " + newroz.getYear());
        System.out.println("Month: " + newroz.getMonthValue() + " (" + newroz.getMonth() + ")");
        System.out.println("Day:   " + newroz.getDayOfMonth());
        System.out.println("Weekday: " + newroz.getDayOfWeek());
        System.out.println("10 days later: " + newroz.plusDays(10));
        System.out.println("Leap year? " + newroz.isLeapYear());
    }
}
The code LocalDate newroz = LocalDate.of(2027, 3, 21); above a calendar page: MARCH 2027, 21, SUNDAY. Arrows go from the page to newroz.getYear() -> 2027, newroz.getMonthValue() -> 3, newroz.getMonth() -> MARCH, newroz.getDayOfMonth() -> 21 and newroz.getDayOfWeek() -> SUNDAY. Note: months count from 1, so 3 is March; array indexes start at 0.کۆدی LocalDate newroz = LocalDate.of(2027, 3, 21); لە سەرووی لاپەڕەیەکی ڕۆژژمێرەوە: MARCH 2027، 21، SUNDAY. تیرەکان لە لاپەڕەکەوە دەچن بۆ newroz.getYear() -> 2027، newroz.getMonthValue() -> 3، newroz.getMonth() -> MARCH، newroz.getDayOfMonth() -> 21 و newroz.getDayOfWeek() -> SUNDAY. تێبینی: مانگەکان لە 1ـەوە دەژمێردرێن، بۆیە 3 مانگی ئادارە؛ ئیندێکسەکانی ڕیزەک لە 0ـەوە دەست پێ دەکەن.
Months count from 1: 3 is Marchمانگەکان لە 1ـەوە دەژمێردرێن: 3 ئادارەCêIT

A date that does not exist stops the program: LocalDate.of(2027, 2, 30) throws DateTimeException: Invalid date 'FEBRUARY 30'. A LocalDate never changes: plusDays(10) returns a new date, so keep it with =, just as with strings (Strings never change).

ڕێکەوتێک کە بوونی نییە دەوەستێنێت: LocalDate.of(2027, 2, 30) DateTimeException: Invalid date 'FEBRUARY 30' فڕێ دەدات. LocalDate هەرگیز ناگۆڕێت: plusDays(10) ڕێکەوتێکی نوێ دەگەڕێنێتەوە، بۆیە بە = هەڵیبگرە، وەک (زنجیرەنووسەکان ناگۆڕێن).

Writing a date your way: DateTimeFormatterنووسینی ڕێکەوت بە شێوەی خۆت: DateTimeFormatter

Printed directly, a date is written year first, 2026-11-04 (the international ISO format). For 04/11/2026, as schools and offices in Kurdistan write it, give a pattern to DateTimeFormatter.ofPattern (package java.time.format, so it needs its own import). The six patterns are kept in an array, String[], which comes in Arrays:

ئەگەر ڕاستەوخۆ چاپ بکرێت، ڕێکەوت بە ساڵ دەست پێ دەکات، 2026-11-04 (شێوە نێودەوڵەتییەکەی ISO). بۆ 04/11/2026، وەک قوتابخانە و فەرمانگەکانی کوردستان دەینووسن، شێوازێک بدە بە DateTimeFormatter.ofPattern ( java.time.format، بۆیە importـی تایبەتی خۆی پێویستە). شەش شێوازەکە لە ، String[]، کە لە ڕیزەکەکانـدا دێت:

Formats.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Formats {
    public static void main(String[] args) {
        LocalDateTime t = LocalDateTime.of(2026, 11, 4, 9, 5);
        String[] patterns = {"dd/MM/yyyy", "yyyy-MM-dd", "dd-MMM-yyyy", "E, d MMM yyyy", "HH:mm", "dd/MM/yyyy HH:mm"};
        for (String p : patterns) {
            System.out.println(p + "  ->  " + t.format(DateTimeFormatter.ofPattern(p)));
        }
    }
}
The code LocalDate.of(2026, 11, 4).format(DateTimeFormatter.ofPattern("dd/MM/yyyy")). The pattern is split into dd, /, MM, /, yyyy, and arrows lead down to 04, /, 11, /, 2026. A legend: d day, M month, y year, H hour, m minute (marked in orange), E weekday. Warning: small m is minutes: "dd/mm/yyyy" on a LocalDate stops the program with UnsupportedTemporalTypeException: Unsupported field: MinuteOfHour.کۆدی LocalDate.of(2026, 11, 4).format(DateTimeFormatter.ofPattern("dd/MM/yyyy")). شێوازەکە دابەش کراوە بۆ dd، /، MM، /، yyyy و تیرەکان بەرەو خوار دەچن بۆ 04، /، 11، /، 2026. ڕێبەرێک: d ڕۆژ، M مانگ، y ساڵ، H کاتژمێر، m خولەک (بە پرتەقاڵی نیشانکراوە)، E ڕۆژی هەفتە. هۆشداری: mـی بچووک خولەکە: "dd/mm/yyyy" لەسەر LocalDate بەرنامەکە بە UnsupportedTemporalTypeException: Unsupported field: MinuteOfHour دەوەستێنێت.
Each letter group of the pattern becomes one part of the dateهەر کۆمەڵە پیتێکی شێوازەکە دەبێتە بەشێکی ڕێکەوتەکەCêIT

Writing a date your way: DateTimeFormatterنووسینی ڕێکەوت بە شێوەی خۆت: DateTimeFormatter

Month names follow the computer's languageناوی مانگەکان زمانی کۆمپیوتەرەکە پەیڕەو دەکەن

Patterns with words, such as MMM (short month name) and E (weekday), use the computer's language and region, its . On a computer set to Central Kurdish or Arabic the same program writes Kurdish or Arabic names. The -Duser.language and -Duser.country options pretend to be such a computer:

ئەو شێوازانەی وشەیان تێدایە، وەک MMM (ناوی کورتی مانگ) و E (ڕۆژی هەفتە)، زمان و ناوچەی بەکار دەهێنن، واتە . لەسەر کە بۆ کوردیی ناوەندی یان عەرەبی ڕێکخرابێت هەمان ناوی کوردی یان عەرەبی دەنووسێت. هەڵبژاردەکانی -Duser.language و -Duser.country خۆیان وەک ئەو نیشان دەدەن:

BASHType in a terminalلە تێرمیناڵدا بینووسە
java -Duser.language=ckb -Duser.country=IQ Formats
java -Duser.language=ar -Duser.country=IQ Formats
Three cards for one program: on an English computer dd-MMM-yyyy prints 04-Nov-2026; on a Central Kurdish computer (ckb_IQ) 04-تشرینی دووەم-2026; on an Arabic computer (ar_IQ) 04-تشرين الثاني-2026. On all three, dd/MM/yyyy prints 04/11/2026: numbers stay the same. Note: MMM and E use the locale; ofPattern(p, Locale.ENGLISH) fixes the language.سێ کارت بۆ یەک بەرنامە: لەسەر کۆمپیوتەرێکی ئینگلیزی dd-MMM-yyyy 04-Nov-2026 چاپ دەکات؛ لەسەر کۆمپیوتەرێکی کوردیی ناوەندی (ckb_IQ) 04-تشرینی دووەم-2026؛ لەسەر کۆمپیوتەرێکی عەرەبی (ar_IQ) 04-تشرين الثاني-2026. لەسەر هەر سێکیان dd/MM/yyyy 04/11/2026 چاپ دەکات: ژمارەکان وەک خۆیان دەمێننەوە. تێبینی: MMM و E ڕێکخستنە ناوچەییەکە بەکار دەهێنن؛ ofPattern(p, Locale.ENGLISH) زمانەکە جێگیر دەکات.
Month names follow the locale; numbers do notناوی مانگەکان پەیڕەو دەکەن؛ ژمارەکان ناCêIT

Number patterns such as dd/MM/yyyy stay 04/11/2026 everywhere. For English names on every computer, give the locale yourself: DateTimeFormatter.ofPattern(p, Locale.ENGLISH), with import java.util.Locale;. The same trap with numbers is in Computers set to Kurdish or Arabic.

شێوازی ژمارەیی وەک dd/MM/yyyy لە هەموو شوێنێک 04/11/2026 دەمێنێتەوە. بۆ ناوی ئینگلیزی لەسەر هەموو ، خۆت بدە: DateTimeFormatter.ofPattern(p, Locale.ENGLISH)، لەگەڵ import java.util.Locale;. هەمان تەڵە بۆ ژمارەکان لە کۆمپیوتەرەکان کە بۆ کوردی یان عەرەبی ڕێکخراونـدایە.

import staticimport static: هێنانی ئەندامە ستاتیکەکان

An ordinary import names a class. import static names a of a class, so you can drop the class name: after import static java.lang.Math.PI; you may write PI instead of Math.PI. You met import static java.lang.Math.*; in The Math class; here two members are imported one by one:

importـێکی ئاسایی ناوی دەبات. import static ناوی دەبات، بۆیە دەتوانیت ناوی لاببەیت: دوای import static java.lang.Math.PI; دەتوانیت لە جیاتی Math.PI بنووسیت PI. import static java.lang.Math.*;ـت لە کلاسی Mathـدا بینی؛ لێرەدا دوو ئەندام یەک بە یەک دەهێنرێن:

Circle.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import static java.lang.Math.PI;
import static java.lang.Math.sqrt;

public class Circle {
    public static void main(String[] args) {
        double r = 2.5;
        System.out.println("Area: " + PI * r * r);
        System.out.println("Side of a square with the same area: " + sqrt(PI * r * r));
    }
}

It works for any static member of the API: with import static java.time.temporal.ChronoUnit.DAYS; the call DAYS.between(today, newroz) counts the days between two dates (see the Newroz exercise). Use it sparingly: with the class name in front, the reader sees at once where a name comes from. The four forms of import:

بۆ هەموو کار دەکات: بە import static java.time.temporal.ChronoUnit.DAYS; بانگکردنی DAYS.between(today, newroz) ڕۆژەکانی نێوان دوو ڕێکەوت دەژمێرێت (ڕاهێنانی نەورۆز ببینە). کەم بەکاری بهێنە: کاتێک ناوی لە پێشەوە بێت، خوێنەر یەکسەر دەبینێت ناوێک لە کوێوە هاتووە. چوار شێوەی import:

LineدێڕBrings inچی دەهێنێت
import java.util.Scanner;one classیەک
import java.util.*;every class of one packageهەموو یەک
import static java.lang.Math.PI;one static member of a classیەک
import static java.lang.Math.*;every static member of a classهەموو
Two panels. Left: import java.util.Scanner; brings a class, Scanner, so you write Scanner in = new Scanner(System.in); with the short class name. Right: import static java.lang.Math.PI; brings a static member, PI, out of the class Math, so you write double area = PI * r * r; with no Math. in front. Note: use import static sparingly: Math.PI shows where PI comes from.دوو بەش. چەپ: import java.util.Scanner; کلاسێک دەهێنێت، Scanner، بۆیە دەنووسیت Scanner in = new Scanner(System.in); بە ناوی کورتی کلاسەکە. ڕاست: import static java.lang.Math.PI; ئەندامی ستاتیکێک دەهێنێت، PI، لە کلاسی Mathـەوە، بۆیە دەنووسیت double area = PI * r * r; بەبێ Math. لە پێشەوە. تێبینی: import static کەم بەکار بهێنە: Math.PI نیشان دەدات PI لە کوێوە هاتووە.
A class name or a member nameناوی یان ناوی ئەندامێکCêIT

Common mistakesهەڵە باوەکان

You wroteنووسیتjavac or the run saysjavac یان جێبەجێکردن دەڵێتFixچارەسەر
no import line for Scannerهیچ بۆ Scanner نییەcannot find symbol symbol: class ScannerAdd import java.util.Scanner;.import java.util.Scanner; زیاد بکە.
import java.util.scanner;symbol: class scanner location: package java.utilClass names start with a capital: Scanner.ناوی بە پیتی گەورە دەست پێ دەکات: Scanner.
import java.util;symbol: class util location: package javaImport a class, or java.util.*. import بکە، یان java.util.*.
an import inside the classimportـێک لە ناو illegal start of typeImports go above the class. دەچنە سەرووی .
package school; after an importpackage school; لە دوای importـێکclass, interface, enum, or record expectedThe package line comes first.دێڕی package یەکەم دێت.
DateTimeFormatter with only java.time.*DateTimeFormatter تەنیا بە java.time.*cannot find symbol symbol: class DateTimeFormatterAlso import java.time.format.DateTimeFormatter.java.time.format.DateTimeFormatterـیش import بکە.
import java.awt.*; import java.util.*;reference to List is ambiguousAdd import java.util.List;.import java.util.List; زیاد بکە.
class Report without publicclass Report بەبێ publicReport is not public in school; cannot be accessed from outside packageWrite public class Report.بنووسە public class Report.
cd school then java Reportcd school پاشان java ReportNoClassDefFoundError: Report (wrong name: school/Report)Run java school.Report from the top folder.لە سەرەوە java school.Report جێبەجێ بکە.
ofPattern("dd/mm/yyyy")UnsupportedTemporalTypeException: Unsupported field: MinuteOfHourMM is the month, mm the minutes.MM مانگە و mm خولەک.
LocalDate.of(2027, 2, 30)DateTimeException: Invalid date 'FEBRUARY 30'Check the day and month.ڕۆژ و مانگەکە بپشکنە.

Two of these messages in full, as javac prints them:

دوو لەم پەیامانە بە تەواوی، وەک javac چاپیان دەکات:

Outputدەرئەنجام
$ javac AskName.java
AskName.java:1: error: cannot find symbol
import java.util.scanner;
                ^
  symbol:   class scanner
  location: package java.util
AskName.java:5: error: cannot find symbol
        Scanner input = new Scanner(System.in);
        ^
  symbol:   class Scanner
  location: class AskName
AskName.java:5: error: cannot find symbol
        Scanner input = new Scanner(System.in);
                            ^
  symbol:   class Scanner
  location: class AskName
3 errors

$ javac Main.java
Main.java:1: error: Report is not public in school; cannot be accessed from outside package
import school.Report;
             ^
Main.java:5: error: Report is not public in school; cannot be accessed from outside package
        Report.printTitle("Term 1");
        ^
Main.java:6: error: Report is not public in school; cannot be accessed from outside package
        System.out.println("Aram: 92 " + Report.grade(92));
                                         ^
Main.java:7: error: Report is not public in school; cannot be accessed from outside package
        System.out.println("Hana: 47 " + Report.grade(47));
                                         ^
4 errors

Practiceڕاهێنان

ExerciseڕاهێنانToday in dd/MM/yyyyئەمڕۆ بە ⁦dd/MM/yyyy⁩

Write a program that prints today's date as dd/MM/yyyy and the day of the week.

بنووسە کە ڕێکەوتی ئەمڕۆ بە شێوەی dd/MM/yyyy و ڕۆژی هەفتە چاپ بکات.

Hintئاماژە

LocalDate.now(), DateTimeFormatter.ofPattern(...) and getDayOfWeek().

LocalDate.now()، DateTimeFormatter.ofPattern(...) و getDayOfWeek().

Show answerوەڵامەکە پیشان بدە
TodayFormatted.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class TodayFormatted {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        System.out.println("Today is " + today.format(f));
        System.out.println("It is a " + today.getDayOfWeek());
    }
}

Run on 4 November 2026; your output shows your own day.

لە 4ی تشرینی دووەمی ⁦2026⁩ جێبەجێ کراوە؛ تۆ ڕۆژی خۆت نیشان دەدات.

ExerciseڕاهێنانDays until Newrozچەند ڕۆژی تر نەورۆزە؟

Newroz is on 21 March. Write a program that prints how many days are left until the next Newroz. If this year's Newroz has passed, count to next year's.

نەورۆز لە ⁦21⁩ی ئادارە. بنووسە کە چاپ بکات چەند ڕۆژی تر نەورۆزی داهاتوو دێت. ئەگەر نەورۆزی ئەمساڵ تێپەڕیبێت، بۆ نەورۆزی ساڵی داهاتوو بژمێرە.

Hintئاماژە

isBefore, plusYears(1) and ChronoUnit.DAYS.between(a, b).

isBefore، plusYears(1) و ChronoUnit.DAYS.between(a, b).

Show answerوەڵامەکە پیشان بدە
DaysToNewroz.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import static java.time.temporal.ChronoUnit.DAYS;

public class DaysToNewroz {
    public static void main(String[] args) {
        LocalDate today = LocalDate.of(2026, 11, 4);      // LocalDate.now() in a real program
        LocalDate newroz = LocalDate.of(today.getYear(), 3, 21);
        if (newroz.isBefore(today)) {                     // this year's Newroz has passed
            newroz = newroz.plusYears(1);
        }
        long days = DAYS.between(today, newroz);
        System.out.println("Today:  " + today.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
        System.out.println("Newroz: " + newroz.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
        System.out.println("Days to wait: " + days);
    }
}

The date is fixed at 4 November 2026 so the output can be checked: 26 days of November, 31 of December, 31 of January, 28 of February and 21 of March make 137. With LocalDate.now() instead, the program counts from the day it runs: on 7 November 2026 it is 134 days.

ڕێکەوتەکە لە 4ی تشرینی دووەمی ⁦2026⁩ جێگیر کراوە تا بپشکنرێت: ⁦26⁩ ڕۆژی تشرینی دووەم، ⁦31⁩ی کانوونی یەکەم، ⁦31⁩ی کانوونی دووەم، ⁦28⁩ی شوبات و ⁦21⁩ی ئادار دەکاتە ⁦137⁩. بە LocalDate.now() لە جیاتی ئەوە، لە ڕۆژی جێبەجێکردنەوە دەژمێرێت: لە 7ی تشرینی دووەمی ⁦2026⁩ دەکاتە ⁦134⁩ ڕۆژ.

ExerciseڕاهێنانFix the importsimportـەکان چاک بکە

This program does not compile. Read the messages and add the missing lines.

ئەم کۆمپایل نابێت. پەیامەکان بخوێنەوە و دێڕە ونبووەکان زیاد بکە.

Birthday.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
public class Birthday {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Year you were born: ");
        int year = in.nextInt();
        int age = LocalDate.now().getYear() - year;
        System.out.println("This year you turn " + age + ".");
    }
}
Show answerوەڵامەکە پیشان بدە

Two classes are missing: Scanner from java.util and LocalDate from java.time. With both import lines the program runs (here in 2026, with 2008 typed in):

دوو نین: Scanner لە java.utilـەوە و LocalDate لە java.timeـەوە. بە هەردوو جێبەجێ دەبێت (لێرەدا لە ⁦2026⁩ـدا، بە نووسینی ⁦2008⁩):

Birthday.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import java.util.Scanner;
import java.time.LocalDate;

public class Birthday {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Year you were born: ");
        int year = in.nextInt();
        int age = LocalDate.now().getYear() - year;
        System.out.println("This year you turn " + age + ".");
    }
}
ExerciseڕاهێنانAPI detective: Randomلێکۆڵەری ⁦API: Random⁩

Find the class Random in the Java 17 API documentation. In which package is it? What does nextInt(int bound) return? Then write a program that rolls two dice and prints their total.

Random لە ⁦Java 17⁩ـدا بدۆزەرەوە. لە کام ؟ nextInt(int bound) چی دەگەڕێنێتەوە؟ پاشان بنووسە کە دوو زار فڕێ بدات و کۆیان چاپ بکات.

Show answerوەڵامەکە پیشان بدە

Random is in java.util. nextInt(int bound) returns an int from 0 up to bound - 1, so nextInt(6) + 1 gives 1 to 6. The output changes with every run:

Random لە java.utilـدایە. nextInt(int bound) intـێک لە 0 تا bound - 1 دەگەڕێنێتەوە، بۆیە nextInt(6) + 1 ژمارەیەک لە 1 تا 6 دەدات. لە هەر جێبەجێکردنێکدا دەگۆڕێت:

Dice.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import java.util.Random;

public class Dice {
    public static void main(String[] args) {
        Random r = new Random();
        int a = r.nextInt(6) + 1;
        int b = r.nextInt(6) + 1;
        System.out.println("You rolled " + a + " and " + b + ": total " + (a + b));
    }
}
ExerciseڕاهێنانYour own package: toolsپاکێجی خۆت: tools

Make a package tools with a class Greeting and a static method hello(String name) that returns a greeting. Use it from a class Main in the top folder.

tools دروست بکە بە Greeting و static بە ناوی hello(String name) کە سڵاوێک دەگەڕێنێتەوە. لە Mainـەوە لە سەرەوە بەکاری بهێنە.

Hintئاماژە

The file goes into the folder tools, starts with package tools;, and the class and method are public.

دەچێتە ناو tools، بە package tools; دەست پێ دەکات و و publicـن.

Show answerوەڵامەکە پیشان بدە
tools/Greeting.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
package tools;

public class Greeting {
    public static String hello(String name) {
        return "Hello, " + name + "! Have a nice day.";
    }
}
Main.javaJAVAType in a terminalلە تێرمیناڵدا بینووسە
import tools.Greeting;

public class Main {
    public static void main(String[] args) {
        System.out.println(Greeting.hello("Lana"));
        System.out.println(Greeting.hello("Soran"));
    }
}
ExerciseڕاهێنانWhich import lines?کام دێڕی import؟

A program uses String, Scanner, Math, LocalDate, DateTimeFormatter and ArrayList. Write the import lines it needs.

String، Scanner، Math، LocalDate، DateTimeFormatter و ArrayList بەکار دەهێنێت. ئەو دێڕانەی import بنووسە کە پێویستیەتی.

Show answerوەڵامەکە پیشان بدە
importsJAVA
import java.util.Scanner;
import java.util.ArrayList;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

String and Math are in java.lang and need nothing. import java.util.*; may replace the first two lines, but java.time.* would not cover DateTimeFormatter.

String و Math لە java.langـدان و هیچیان ناوێت. import java.util.*; دەتوانێت جێگەی دوو دێڕی یەکەم بگرێتەوە، بەڵام java.time.* DateTimeFormatter ناگرێتەوە.

Summaryکورتە

  • The Java API is a big library of ready-made classes and interfaces; it grows with every version.
  • Packages are folders of classes: java.lang, java.util, java.io, java.time. Full name = package + class.
  • import java.util.Scanner; (one class) or import java.util.*; (a whole package, never its subpackages) goes above the class. It copies no code.
  • java.lang is imported automatically. When two imports clash, a single-class import decides.
  • API pages show the package, Since, and every method with its return type, parameters and exceptions.
  • Own package: package school; first, the file in the folder school, public classes; run with java school.Report; javac -d sends class files to a separate folder.
  • Dates: LocalDate, LocalTime, LocalDateTime from java.time; patterns with DateTimeFormatter (dd/MM/yyyy, MM month, mm minutes).
  • Java گەورەیە لە و ئامادە؛ لەگەڵ هەر گەورەتر دەبێت.
  • وەک بۆ وان: java.lang، java.util، java.io، java.time. ناوی تەواو = + .
  • import java.util.Scanner; (یەک ) یان import java.util.*; (هەموو ، هەرگیز ناوەوەی نا) لە سەرووی دەنووسرێت. هیچ کۆدێک کۆپی ناکات.
  • java.lang خۆکار هێنراوە. کاتێک دوو import بەریەک دەکەون، importـی یەک بڕیار دەدات.
  • لاپەڕەکانی ، Since و هەموو بە ، و نیشان دەدەن.
  • خۆت: یەکەم package school;، لە school، public؛ بە java school.Report جێبەجێ دەکرێت؛ javac -d فایلەکانی class دەنێرێتە جیا.
  • ڕێکەوت: LocalDate، LocalTime، LocalDateTime لە java.timeـەوە؛ شێواز بە DateTimeFormatter (dd/MM/yyyy، MM مانگ، mm خولەک).
Review questionsپرسیارەکانی پێداچوونەوە
Why does String need no import but Scanner does?بۆچی String پێویستی بە import نییە بەڵام Scanner هەیەتی؟

String is in java.lang, which every file imports automatically; Scanner is in java.util.

String لە java.langـدایە کە هەموو خۆکار دەیهێنێت؛ Scanner لە java.utilـدایە.

Does import java.util.*; make a program slower or bigger?ئایا import java.util.*; بەرنامەیەک هێواشتر یان گەورەتر دەکات؟

No. Imports only tell javac full names; the class file is byte for byte the same as with single imports.

نەخێر. import تەنیا ناوی تەواو بە javac دەڵێت؛ فایلی class بایت بە بایت وەک ئەوەیە کە بە importـی تاک دروست دەبێت.

What does ofPattern("dd/MM/yyyy") print for 4 November 2026?ofPattern("dd/MM/yyyy") بۆ 4ی تشرینی دووەمی ⁦2026⁩ چی چاپ دەکات؟

04/11/2026.

04/11/2026.

Lesson complete!وانەکە تەواو بوو!

Well done. Review the key terms, then go on to the next lesson.دەستخۆش. سەیرێکی زاراوە سەرەکییەکان بکەرەوە، پاشان بڕۆ بۆ وانەی داهاتوو.

Key termsزاراوە سەرەکییەکان

Next lessonوانەی داهاتوو

Arrays in One and Two Dimensionsڕیزەکەکان لە یەک و دوو ڕەهەنددا

References and further readingسەرچاوەکان و خوێندنەوەی زیاتر

This lecture is a first edition. The Kurdish text and terminology are waiting for review by Kurdish IT teachers.ئەم وانەیە چاپی یەکەمە. دەقە کوردییەکە و زاراوەکانی چاوەڕێی پێداچوونەوەی مامۆستایانی کوردی بواری IT ن.

Appearanceڕووکار

Modeدۆخ
Styleشێواز
Coloursڕەنگەکان

Saved on this device only.تەنیا لەسەر ئەم ئامێرە پاشەکەوت دەکرێت.