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.
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. لە جیاتی ئەوەی خۆت شتێک بۆ خوێندنەوەی یان بۆ بنووسیت، ئەو بەکار دەهێنیت کە پێشتر ئامادەیە.
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 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 دەدات:
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 + "!");
}
}$ java AskName Your name: Shilan Hello, Shilan!
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):
$ 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

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):
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));
}
}
}$ java DiceGame How many dice? 3 Die 1: 5 Die 2: 3 Die 3: 4
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:
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$ cmp one/Greet.class star/Greet.class && echo "The two class files are byte for byte the same."
The two class files are byte for byte the same.
$ javap -c one/Greet.class | grep Scanner
0: new #7 // class java/util/Scanner
7: invokespecial #15 // Method java/util/Scanner."<init>":(Ljava/io/InputStream;)V
15: invokevirtual #22 // Method java/util/Scanner.next:()Ljava/lang/String;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 ناتوانێت هەڵبژێرێت:
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);
}
}$ javac TwoLists.java
TwoLists.java:6: error: reference to List is ambiguous
List<String> names = List.of("Aram", "Shilan");
^
both interface java.util.List in java.util and class java.awt.List in java.awt match
TwoLists.java:6: error: reference to List is ambiguous
List<String> names = List.of("Aram", "Shilan");
^
both interface java.util.List in java.util and class java.awt.List in java.awt match
2 errorsFix 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 automaticallyjava.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 نییە.
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
}
}$ java NoImport HAWLER 9 2147483647 9.0
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ـوە دروستیان دەکات (لێدوانەکانی بەڵگەنامە).
At the top: module
java.base, packagejava.util. So the import line isimport java.util.Scanner;.لە سەرەوە: module
java.base،java.util. کەواتە دەبێتەimport java.util.Scanner;.The description, and Since: 1.5:
Scannerexists since Java 5. A method marked Since: 11 does not exist in Java 8.ڕوونکردنەوەکە و Since: 1.5:
Scannerلە Java 5ـەوە هەیە. کە Since: 11ـی لەسەر بێت لە Java 8ـدا نییە.The Method Summary: the left column is what the method gives back (
intfornextInt(),StringfornextLine()), then its name and parameters.Method Summary: ستوونی چەپ ئەوەیە کە دەیگەڕێنێتەوە (
intبۆnextInt()،StringبۆnextLine())، پاشان ناوەکەی و .Click a method for its details: Parameters, Returns and Throws.
nextInt()throwsInputMismatchExceptionwhen 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ـیە:
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));
}
}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 دەکات:
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 لە تەنیشتی دادەنێت:
javac Main.java
ls school
java Main$ javac Main.java $ ls school Report.class Report.java $ java Main === Term 1 === Aram: 92 Excellent Hana: 47 Fail
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ـە:
java school.Report
cd school && java Report$ java school.Report Testing Report: 95 is Excellent $ cd school && java Report Error: Could not find or load main class Report Caused by: java.lang.NoClassDefFoundError: Report (wrong name: school/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):
javac -d classes Main.java
ls classes classes/school
java -cp classes Main$ javac -d classes Main.java $ ls classes classes/school classes: Main.class school classes/school: Report.class $ java -cp classes Main === Term 1 === Aram: 92 Excellent Hana: 47 Fail
Your own packageپاکێجی خۆت
Naming packagesناونانی پاکێجەکان
Package names follow simple rules, so names from different people never clash:
ناوی یاسای سادە پەیڕەو دەکەن، تا ناوی کەسە جیاوازەکان هەرگیز بەریەک نەکەون:
- All small letters:
school,tools, neverSchool(class names start with a capital, package names do not). - Companies start with their internet domain written backwards: the company of
example.comusescom.example.school, and the folders becomecom/example/school. - Names starting with
java.andjavax.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.comcom.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() لە کاتژمێری دەپرسێت:
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());
}
}$ java Now 2026-11-04 15:35:43.809213 2026-11-04T15:35:43.809253
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 ساڵەکە دەپشکنێت:
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());
}
}$ java Newroz 2027-03-21 Year: 2027 Month: 3 (MARCH) Day: 21 Weekday: SUNDAY 10 days later: 2027-03-31 Leap year? false
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[]، کە لە ڕیزەکەکانـدا دێت:
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)));
}
}
}$ java Formats dd/MM/yyyy -> 04/11/2026 yyyy-MM-dd -> 2026-11-04 dd-MMM-yyyy -> 04-Nov-2026 E, d MMM yyyy -> Wed, 4 Nov 2026 HH:mm -> 09:05 dd/MM/yyyy HH:mm -> 04/11/2026 09:05
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 خۆیان وەک ئەو نیشان دەدەن:
java -Duser.language=ckb -Duser.country=IQ Formats
java -Duser.language=ar -Duser.country=IQ Formats$ java -Duser.language=ckb -Duser.country=IQ Formats dd/MM/yyyy -> 04/11/2026 yyyy-MM-dd -> 2026-11-04 dd-MMM-yyyy -> 04-تشرینی دووەم-2026 E, d MMM yyyy -> چوارشەممە, 4 تشرینی دووەم 2026 HH:mm -> 09:05 dd/MM/yyyy HH:mm -> 04/11/2026 09:05 $ java -Duser.language=ar -Duser.country=IQ Formats dd/MM/yyyy -> 04/11/2026 yyyy-MM-dd -> 2026-11-04 dd-MMM-yyyy -> 04-تشرين الثاني-2026 E, d MMM yyyy -> الأربعاء, 4 تشرين الثاني 2026 HH:mm -> 09:05 dd/MM/yyyy HH:mm -> 04/11/2026 09:05
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ـدا بینی؛ لێرەدا دوو ئەندام یەک بە یەک دەهێنرێن:
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));
}
}$ java Circle Area: 19.634954084936208 Side of a square with the same area: 4.43113462726379
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هەموو |
Common mistakesهەڵە باوەکان
| You wroteنووسیت | javac or the run saysjavac یان جێبەجێکردن دەڵێت | Fixچارەسەر |
|---|---|---|
no import line for Scannerهیچ بۆ Scanner نییە | cannot find symbol symbol: class Scanner | Add import java.util.Scanner;.import java.util.Scanner; زیاد بکە. |
import java.util.scanner; | symbol: class scanner location: package java.util | Class names start with a capital: Scanner.ناوی بە پیتی گەورە دەست پێ دەکات: Scanner. |
import java.util; | symbol: class util location: package java | Import a class, or java.util.*. import بکە، یان java.util.*. |
| an import inside the classimportـێک لە ناو | illegal start of type | Imports go above the class. دەچنە سەرووی . |
package school; after an importpackage school; لە دوای importـێک | class, interface, enum, or record expected | The package line comes first.دێڕی package یەکەم دێت. |
DateTimeFormatter with only java.time.*DateTimeFormatter تەنیا بە java.time.* | cannot find symbol symbol: class DateTimeFormatter | Also import java.time.format.DateTimeFormatter.java.time.format.DateTimeFormatterـیش import بکە. |
import java.awt.*; import java.util.*; | reference to List is ambiguous | Add import java.util.List;.import java.util.List; زیاد بکە. |
class Report without publicclass Report بەبێ public | Report is not public in school; cannot be accessed from outside package | Write public class Report.بنووسە public class Report. |
cd school then java Reportcd school پاشان java Report | NoClassDefFoundError: Report (wrong name: school/Report) | Run java school.Report from the top folder.لە سەرەوە java school.Report جێبەجێ بکە. |
ofPattern("dd/mm/yyyy") | UnsupportedTemporalTypeException: Unsupported field: MinuteOfHour | MM 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 چاپیان دەکات:
$ 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 errorsPracticeڕاهێنان
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وەڵامەکە پیشان بدە
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());
}
}$ java TodayFormatted Today is 04/11/2026 It is a WEDNESDAY
Run on 4 November 2026; your output shows your own day.
لە 4ی تشرینی دووەمی 2026 جێبەجێ کراوە؛ تۆ ڕۆژی خۆت نیشان دەدات.
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وەڵامەکە پیشان بدە
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);
}
}$ java DaysToNewroz Today: 04/11/2026 Newroz: 21/03/2027 Days to wait: 137
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 ڕۆژ.
This program does not compile. Read the messages and add the missing lines.
ئەم کۆمپایل نابێت. پەیامەکان بخوێنەوە و دێڕە ونبووەکان زیاد بکە.
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 + ".");
}
}$ javac Birthday.java
Birthday.java:3: error: cannot find symbol
Scanner in = new Scanner(System.in);
^
symbol: class Scanner
location: class Birthday
Birthday.java:3: error: cannot find symbol
Scanner in = new Scanner(System.in);
^
symbol: class Scanner
location: class Birthday
Birthday.java:6: error: cannot find symbol
int age = LocalDate.now().getYear() - year;
^
symbol: variable LocalDate
location: class Birthday
3 errorsShow 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):
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 + ".");
}
}$ java Birthday Year you were born: 2008 This year you turn 18.
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 دەدات. لە هەر جێبەجێکردنێکدا دەگۆڕێت:
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));
}
}$ java Dice You rolled 3 and 2: total 5 $ java Dice You rolled 3 and 1: total 4
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وەڵامەکە پیشان بدە
package tools;
public class Greeting {
public static String hello(String name) {
return "Hello, " + name + "! Have a nice day.";
}
}import tools.Greeting;
public class Main {
public static void main(String[] args) {
System.out.println(Greeting.hello("Lana"));
System.out.println(Greeting.hello("Soran"));
}
}$ javac Main.java $ java Main Hello, Lana! Have a nice day. Hello, Soran! Have a nice day.
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وەڵامەکە پیشان بدە
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) orimport java.util.*;(a whole package, never its subpackages) goes above the class. It copies no code.java.langis 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 folderschool, public classes; run withjava school.Report;javac -dsends class files to a separate folder. - Dates:
LocalDate,LocalTime,LocalDateTimefromjava.time; patterns withDateTimeFormatter(dd/MM/yyyy,MMmonth,mmminutes).
- 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خولەک).
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زاراوە سەرەکییەکان
Arrays in One and Two Dimensionsڕیزەکەکان لە یەک و دوو ڕەهەنددا
Related lecturesوانە پەیوەندیدارەکان
- The Math Classکلاسەکەی Math
- Keyboard Input with Scanner and Formatted Outputنێوخستە لە کیبۆردەوە بە Scanner و دەرخستەی ڕێکخراو
- Welcome to Java: the JDK, the JRE and the JVMبەخێربێیت بۆ Java: JDK، JRE و JVM
- Compiling and Running: javac, Bytecode and the JVMکۆمپایلکردن و جێبەجێکردن: javac، بایتکۆد و ئامێری گریمانەیی Java
- Your First Java Program: Output and Commentsیەکەم بەرنامەی Javaـت: دەرخستە و لێدوانەکان
- Modules and importمۆدیوڵەکان و import
- ArrayList and Wrapper ClassesArrayList و کلاسە پێچەرەوەکان
References and further readingسەرچاوەکان و خوێندنەوەی زیاتر
- W3Schools: Java Packages / API
- W3Schools: Java Date and Time
- Java SE 17 & JDK 17: API documentation
- Java SE 17 API: java.util.Scanner
- Java SE 17 API: java.time.LocalDate
- Java SE 17 API: java.time.format.DateTimeFormatter
- Java Language Specification (Java SE 17), chapter 7: Packages and Modules (§7.3 java.lang, §7.5 import declarations)
- Java Language Specification (Java SE 17), §6.1 package names, §6.4.1 shadowing of imports
- The Java Tutorials: Naming a Package
- The Java Tutorials: Using Package Members
- The Java Tutorials: Managing Source and Class Files
This lecture is a first edition. The Kurdish text and terminology are waiting for review by Kurdish IT teachers.ئەم وانەیە چاپی یەکەمە. دەقە کوردییەکە و زاراوەکانی چاوەڕێی پێداچوونەوەی مامۆستایانی کوردی بواری IT ن.