Redundant Imports
Əgər iki class eyni paket daxilində yerləşərsə, bir class`ın daxilində digər class`a müraciət etmək üçün həmin class`ı import etməyə ehtiyac yoxdur. Amma həmin class`ı import etsək, bu xəta verməyəcək, normal compile olunacaq. Bu hal “redundant import” sayılır, yəni import etməsək belə kod compile olunacaq, etsək də kod xəta verməyəcək. Başqa sözlə, bu halda import etmək artıq, lazımsız işdir.
Hətta class`ın özünü belə mövcud olduğu fayl daxilində import etsək compiler xəta verməyəcək, kod normal işləyəcək:
File: mm/MasterITM.java
package mm; public class MasterITM {}
File: mm/OrientITM.java
package mm; import mm.MasterITM; import mm.OrientITM; public class OrientITM { private MasterITM masterItm; }
Naming Conflicts
Java`da paketlərin istifadə edilmə səbəblərindən biri də class adlarının unikal olmamasıdır. Əgər eyniadlı classlar varsa, biz onları yerləşdikləri paketə görə fərqləndiririk. Tutaq ki, aşağıdakı kimi bir kod nümunəmiz var:
File: Conflicts.java
public class Conflicts { Date date; // line D // some more code }
Bu kod nümunəsində biz Date
classını import etməliyik, amma Date
classı iki fərqli paketdə mövcuddur: java.util.Date
və java.sql.Date
. Fərqli import nümunələrinə baxaq:
// import 1
import java.util.*;
import java.sql.*;
// import 2
import java.util.Date; // Date bu paketdən seçilir
import java.sql.*; // Date`dən başqa bütün classlar import olunur
// import 3
import java.util.Date;
import java.sql.Date; // doesn’t compile
import 1 – D sətri compile olunmur, çünki bu sətirdə konflikt yaranır, java Date
classının hansı paketdən import olunduğunu təyin edə bilmir;
import 2 – kod normal compile olunur;
import 3 – import java.sql.Date;
sətri compile olunmur, “..the same simple name is already defined..” xətası verir. Əgər hər iki Date
classını eyni vaxtda istifadə etmək istəyiriksə, o zaman aşağıdakı formada yazırıq:
public class Conflicts { java.util.Date date; java.sql.Date sqlDate; }
Package
temp qovluğunda 2 package və hər birində də bir class yaradırıq:
C:\temp\packagea\ClassA.java
C:\temp\packageb\ClassB.java
File: packagea/ClassA.java
package packagea; public class ClassA {}
File: packageb/ClassB.java
package packageb; import packagea.*; class ClassB { public static void main(String[] args) { ClassA a; System.out.println("Class A uğurla import olundu"); } }
Cmd ilə bu kodu dərləyib icra etmək üçün aşağıdakı əmrlər ardıcıl icra olunmalıdır:
cd C:\temp
javac packagea\ClassA.java packageb\ClassB.java
java packageb.ClassB
Əgər source kodda paket (package) adı qeyd olunmayıbsa, həmin classın default paketdə yaradıldığı fərz edilir. Default paketdə yaradılmış classların digər paketdəki classlar tərəfindən import edilməsi qəti mümkün deyil!
lava.lang
paketi java`da xüsusi paket hesab olunur və avtomatik import olunur.
Code formatting on the Exam
Əgər imtahanda verilən sualdakı kodların ilk sətri 1-dən başlayırsa (the line number 1), o zaman zəruri olan bütün classların import edilib edilmədiyinə diqqət yetirmək lazımdır. Məsələn, aşağıdakı kodda problem yoxdur, çünki kod 6-cı sətirdən başlayır və belə olan halda importun edilib edilməməsi ilə bağlı qəti təxmin yürütmək mümkün deyil:
public void method(ArrayList list) { if (list.isEmpty()) { System.out.println("e"); } else { System.out.println("n"); } }
Bu kodda isə java.util.ArrayList
import edilmədiyindən compile error verir:
public class LineNumbers { public void method(ArrayList list) { if (list.isEmpty()) { System.out.println("e"); } else { System.out.println("n"); } } }