Java'daki paketler, bir grup sınıfın alt paketlerini ve arayüzlerini kapsülleyen bir mekanizmadır. Paketler aşağıdakiler için kullanılır:
- College.staff.cse.Employee ve College.staff.ee.Employee gibi farklı paketlerde aynı ada sahip sınıfların bulunmasına izin vererek adlandırma çakışmalarını önleyin.
 - Sınıf arayüzlerini ve diğer bileşenleri bulmayı ve kullanmayı organize etmeyi kolaylaştırın.
 - Aynı paket içinde ve alt sınıflar tarafından erişilebilen Korumalı üyelere kontrollü erişim sağlayın. Varsayılan üyelere (erişim belirteci yok) yalnızca aynı paket içinden erişilebilir.
 
İlgili sınıfları paketler halinde gruplandırarak Java, veri kapsüllemeyi teşvik ederek kodun yeniden kullanılabilir olmasını ve yönetilmesini kolaylaştırır. Programınızda kullanmak için istediğiniz sınıfı bir paketten içe aktarmanız yeterlidir.
Özel Paketler Oluşturma
1. Adım: Paketlerimizi ve Java dosyalarımızı oluşturacağımız bir dizin oluşturun.
mkdir PROGRAMLAMA
engellenen numaralar
Adım 2: Şimdi dizini değiştirin ve ana klasörün içinde başka bir klasör oluşturun
CD PROGRAMLAMA
mkdir JavaProgramlama
cd JavaProgramlama
mkdir dizileri
3. Adım: Şimdi boş bir metin dosyası oluşturun ve aşağıdaki Java kodunu yazın ve .java uzantılı sınıfla aynı adla kaydetmeyi unutmayın (TwoPointers.java)
TwoPointers Sınıfı.
Java
package JavaProgramming.arrays; // Main class present inside the package  public class TwoPointers {  public static void main(String[] args) {  System.out.println('Inside the package');  } } 
   
    Not:   Program dosyasının içine paket adını eklemeyi unutmayın.
Adım 4: Şimdi programı tanımlı klasör yolu ile çalıştırın
javac srcJavaProgrammingarraysTwoPointers.java
java srcJavaProgrammingarraysTwoPointers.java
Çıkış:
Programın Klasör yolu ile çalıştırılmasıKlasör Yapısı:
Bu, aşağıdaki resimde Java'daki özel bir paketin görsel temsilidir. Öncelikle Progamming adında bir klasör oluşturuyoruz ve bunun içinde Javaprogramming paketini oluşturuyoruz ve ardından adı verilen başka bir alt paket oluşturuyoruz. diziler . Daha sonra bunun içinde aşağıdaki resimde gösterilen bir Java sınıfı dosyası oluşturuyoruz:
Klasör YapısıJava Paketlerinin Çalışması
Dizin Yapısı: Paket adları ve dizin yapıları yakından ilişkilidir. Örneğin, bir paket adı kolej.staff.cse ise, üç dizin üniversite personelidir ve cse burada cse personelin içinde ve personel kolej içindedir.
Adlandırma Kuralları : Paket adları alan adlarının tersi sırayla yazılır örn. org.geeksforgeeks.practice. Bir kolejde kongre şöyle olabilir:
- kolej.tech.cse
 - kolej.tech.ee
 - kolej.sanat.tarih
 
Örnek:
java.util.*'i içe aktarın;
Burada util, Java paketinin içinde oluşturulan bir alt pakettir.
Paket İçindeki Sınıflara Erişim
Java'da aşağıdaki yöntemlerden birini kullanarak sınıfları bir paketten içe aktarabiliriz:
1. Belirli bir sınıfı içe aktarın :
Java.util.Vector'ı içe aktarın;
Bu, Java.util paketinden yalnızca Vector sınıfını içe aktarır.
java matematik
2. Tüm sınıfları bir paketten içe aktarın :
java.util.*'i içe aktarın;
Bu, Java.util paketindeki tüm sınıfları ve arayüzleri içe aktarır ancak alt paketleri içermez.
Örnek: Vector sınıfını içe aktarın
Javaimport java.util.Vector; public class Geeks {    public Geeks() {    // java.util.Vector is imported We are able to access it directly in our code.  Vector v = new Vector();    java.util.ArrayList l = new java.util.ArrayList();  l.add(3);  l.add(5);  l.add(7);    System.out.println(l);  }  public static void main(String[] args) {      new Geeks();  } } 
   Çıkış
[3 5 7]
Not:
- İçe aktarma paketini kullanma.*; Bir paketteki tüm sınıfları içe aktarır ancak alt paketlerindeki sınıfları içe aktarmaz.
 - İki paket aynı ada sahip sınıflara sahip olduğunda (örneğin, Java.util.Date ve my.package.Date), çakışmaları önlemek için tam adı kullanın:
 
Java.util.Date'i içe aktarın;
my.package.Date'i içe aktar;
Java Paketi Türleri
- Yerleşik Paketler
 - Kullanıcı Tanımlı Paketler
 
1. Yerleşik Paketler
Bu paketler Java'nın bir parçası olan çok sayıda sınıftan oluşur. API'si .Yaygın olarak kullanılan yerleşik paketlerden bazıları şunlardır:
- java.lang : Dil desteği sınıflarını içerir (örneğin, ilkel veri türleri matematik işlemlerini tanımlayan sınıflar). Bu paket otomatik olarak içe aktarılır.
 - java.io: Giriş/çıkış işlemlerini desteklemek için sınıflar içerir.
 - java.util : Bağlantılı Liste Sözlüğü gibi veri yapılarını uygulayan ve destekleyen yardımcı program sınıflarını içerir; Tarih/Saat işlemleri için.
 - java.applet: Applet oluşturmaya yönelik sınıfları içerir.
 - java.aut: Grafiksel kullanıcı arayüzlerine yönelik bileşenleri (düğme, menüler vb.) uygulamaya yönelik sınıflar içerir. 6)
 - java.net: Ağ işlemlerini desteklemek için sınıflar içerir.
 
2. Kullanıcı Tanımlı Paketler
Bunlar kullanıcı tarafından tanımlanan paketlerdir.
1. Paketi Oluşturun:
Öncelikle myPackage dizini oluşturuyoruz (isim paketin ismiyle aynı olmalı). Daha sonra, ilk ifade paket adları olacak şekilde dizinde MyClass'ı oluşturun.
Örnek:
Javapackage myPackage; public class MyClass {  public void getNames(String s)  {   System.out.println(s);   } } 
   
    2. Programda Sınıfı Kullanın:   
Şimdi şunu kullanacağız: Sınıfım programımızdaki sınıf.
Java'da kuyruk ve öncelik kuyruğuJava
 import myPackage.MyClass; public class Geeks {  public static void main(String args[]) {     // Initializing the String variable with a value   String s = 'GeeksforGeeks';    // Creating an instance of class MyClass in the package.  MyClass o = new MyClass();    o.getNames(s);  } } 
   
    Not:   MyClass.java, paketin bir parçası olduğu için myPackage dizinine kaydedilmelidir.  
Java'da Statik İçe Aktarma
Java'da Statik İçe Aktarma, statik üyelere erişimi basitleştirmekle ilgilidir ve bunu kullanıcı tanımlı paketlerin daha geniş tartışmasından ayırır.
Statik içe aktarma Java programlama dilinde (sürüm 5 ve üzeri) tanıtılan ve bir sınıfta genel olarak tanımlanan üyelere (alanlar ve yöntemler) izin veren bir özelliktir. statik Alanın tanımlandığı sınıfı belirtmeden Java kodunda kullanılacak.
Örnek:
Javaimport static java.lang.System.*; class Geeks {  public static void main(String args[]) {    // We don't need to use 'System.out' as imported using static.  out.println('GeeksforGeeks');  } } 
   Çıkış
GeeksforGeeks
Ad Çatışmalarını Ele Alma
İki paket aynı ada sahip bir sınıf içerdiğinde (örneğin, Java.util.Date ve Java.sql.Date), çakışmaları önlemek için tam paket adını belirtin.
java.util.*'i içe aktarın;
java.sql.*'ı içe aktarın;
//Sonra Date sınıfını kullanırsak derleme zamanı hatası alırız:
Bugünün tarihi; //HATA-- java.util.Date mi yoksa java.sql.Date mi?
Derleyici hangi Date sınıfını istediğimizi çözemeyecektir. Bu sorun belirli bir import ifadesi kullanılarak çözülebilir:
Java.util.Date'i içe aktarın;
java.sql.*'ı içe aktarın;
Her iki Date sınıfına da ihtiyacımız varsa, o sınıfın yeni bir nesnesini her bildirdiğimizde tam paket adını kullanmamız gerekir. Örneğin:
java.util.Date deadLine = yeni java.util.Date();
java.sql.Date bugün = yeni java.sql.Date();Java kontrolü boş
Dizin Yapısı ve CLASSPATH
Paket adları bir dizin yapısına karşılık gelir. Örneğin com.zzz.project1.subproject2 paketindeki Circle sınıfı şu şekilde depolanır:
$BASE_DIR/com/zzz/project1/subproject2/Circle.class
- Burada $BASE_DIR paketin temel dizinini temsil eder.
 - Paket adındaki 'nokta', dosya sisteminin bir alt dizinine karşılık gelir.
 - Temel dizin ( $BASE_DIR ) dosya sisteminin herhangi bir yerinde bulunabilir.
 - Bu nedenle Java derleyicisi ve çalışma zamanı, sınıfları bulabilmek için $BASE_DIR'in konumu hakkında bilgilendirilmelidir.
 - Adı verilen bir ortam değişkeni tarafından gerçekleştirilir. SINIFPATH .
 - CLASSPATH, komut kabuğu tarafından çalıştırılabilir programları aramak için kullanılan başka bir ortam değişkeni PATH'e benzer.
 
CLASSPATH'in ayarlanması
CLASSPATH aşağıdaki yollardan herhangi biriyle ayarlanabilir:
- CLASSPATH, Windows'taki adımların bulunduğu ortamda kalıcı olarak ayarlanabilir.
 
Denetim Masası -> Sistem -> Gelişmiş -> Ortam Değişkenleri'ne gidin.
- CLASSPATH'i sistemdeki tüm kullanıcılara uygulamak için 'Sistem Değişkenleri'ni seçin.
 - Yalnızca şu anda oturum açmış olan kullanıcıya uygulamak için 'Kullanıcı Değişkenleri'ni seçin.
 - CLASSPATH'i Düzenleyin veya Oluşturun: CLASSPATH zaten mevcutsa onu seçin ve 'Düzenle'yi tıklayın veya mevcut değilse 'Yeni'yi tıklayın
 - CLASSPATH Ayrıntılarını girin: 'Değişken adı' alanına şunu girin: 'CLASSPATH' 'Değişken değeri' alanına dizinleri ve JAR dosyalarını noktalı virgülle ayırarak girin.
 - 'Değişken değer' alanına dizinleri ve JAR dosyalarını noktalı virgülle ayırarak girin. Örnek:
 
.c:javaprojectclasses;d:tomcatlibservlet-api.jar
- nokta (
.) geçerli çalışma dizinini temsil eder. - CLASSPATH'in geçerli ayarını kontrol etmek için aşağıdaki komutu verin:
 
> SINIF YOLUNU AYARLA
CLASSPATH, aşağıdaki komutu vererek söz konusu CMD kabuk oturumu için geçici olarak ayarlanabilir:
> SET CLASSPATH=.;c:javaprojectclasses;d:tomcatlibservlet-api.jar
CLASSPATH ortam değişkenini kullanmak yerine, örneğin javac ve Java komutlarının -classpath veya -cp komut satırı seçeneğini de kullanabilirsiniz.
> java –sınıf yolu c:javaprojectclasses com.abc.project1.subproject2.MyClass3
Kullanıcı tanımlı paketlerin çizimi: İlk paketimizi oluşturuyoruz: Dosya adı – ClassOne.java
Javapackage package_name; public class ClassOne {  public void methodClassOne()  {  System.out.println('Hello there its ClassOne');  } } 
 İkinci paketimizi oluşturuyoruz: Dosya adı – ClassTwo.java
Javapackage package_one; public class ClassTwo {  public void methodClassTwo()  {  System.out.println('Hello there i am ClassTwo');  } } 
 Oluşturulan her iki paketin de kullanılması: Dosya adı – Testing.java
Javaimport package_name.ClassOne; import package_one.ClassTwo; public class Testing {  public static void main(String[] args)  {  ClassTwo a = new ClassTwo();  ClassOne b = new ClassOne();  a.methodClassTwo();  b.methodClassOne();  } } 
 Şimdi hem paketlerin hem de test sınıfı dosyasının dizin yapısına bakalım:
  
Paket Bağlamında Erişim Değiştiricileri
-     Halk:   Üyeler
publicdeğiştiriciye erişen sınıfın aynı pakette olup olmadığına bakılmaksızın her yerden erişilebilir . - Korumalı: Korumalı değiştiriciye sahip üyelere aynı paket içerisinden erişilebilir. Alt sınıflarda
 - Varsayılan: Değiştirici olmayan üyelere yalnızca aynı paket içinden erişilebilir
 -     Özel:   Üyeler
privatedeğiştiriciye yalnızca aynı sınıf içinde erişilebilir. Aynı paket alt sınıflarındaki veya farklı paketlerdeki sınıflar tarafından bunlara erişilemez.