Java - Paketler

Paketler, adlandırma çakışmalarını önlemek, erişimi kontrol etmek, sınıfların, arayüzlerin, numaralandırmaların ve ek açıklamaların aranmasını / bulunmasını ve kullanımını kolaylaştırmak için vb.

Bir Package erişim koruması ve ad alanı yönetimi sağlayan ilgili türlerin (sınıflar, arayüzler, numaralandırmalar ve açıklamalar) bir gruplaması olarak tanımlanabilir.

Java'daki mevcut paketlerden bazıları -

  • java.lang - temel sınıfları bir araya getirir

  • java.io - girdi, çıktı fonksiyonları için sınıflar bu pakette paketlenmiştir

Programcılar, sınıflar / arabirimler vb. Gruplarını bir araya getirmek için kendi paketlerini tanımlayabilirler. Sizin tarafınızdan uygulanan ilişkili sınıfları gruplamak, bir programcının sınıfların, arabirimlerin, numaralandırmaların ve ek açıklamaların ilişkili olduğunu kolayca belirleyebilmesi için iyi bir uygulamadır.

Paket yeni bir ad alanı oluşturduğundan, diğer paketlerdeki adlarla herhangi bir ad çakışması olmayacaktır. Paketleri kullanarak erişim kontrolü sağlamak daha kolaydır ve ilgili sınıfları bulmak da daha kolaydır.

Bir Paket Oluşturmak

Bir paket oluştururken, paket için bir isim seçmeli ve bir package pakete dahil etmek istediğiniz sınıfları, arabirimleri, numaralandırmaları ve açıklama türlerini içeren her kaynak dosyasının en üstünde bu adla birlikte ifade.

Paket ifadesi, kaynak dosyadaki ilk satır olmalıdır. Her kaynak dosyada yalnızca bir paket ifadesi olabilir ve dosyadaki tüm türler için geçerlidir.

Bir paket ifadesi kullanılmazsa, sınıf, arabirimler, numaralandırmalar ve açıklama türleri mevcut varsayılan pakete yerleştirilecektir.

Java programlarını paket deyimleriyle derlemek için, aşağıda gösterildiği gibi -d seçeneğini kullanmalısınız.

javac -d Destination_folder file_name.java

Ardından, belirtilen hedefte verilen paket adına sahip bir klasör oluşturulur ve derlenen sınıf dosyaları bu klasöre yerleştirilir.

Misal

Adlı bir paket oluşturan bir örneğe bakalım. animals. Sınıfların ve arabirimlerin adlarıyla herhangi bir çakışmayı önlemek için küçük harfli paket adlarını kullanmak iyi bir uygulamadır.

Aşağıdaki paket örneği, animals adlı arayüzü içerir -

/* File name : Animal.java */
package animals;

interface Animal {
   public void eat();
   public void travel();
}

Şimdi, yukarıdaki arayüzü aynı hayvanlar paketine uygulayalım -

package animals;
/* File name : MammalInt.java */

public class MammalInt implements Animal {

   public void eat() {
      System.out.println("Mammal eats");
   }

   public void travel() {
      System.out.println("Mammal travels");
   } 

   public int noOfLegs() {
      return 0;
   }

   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

Şimdi java dosyalarını aşağıda gösterildiği gibi derleyin -

$ javac -d . Animal.java 
$ javac -d . MammalInt.java

Şimdi adı olan bir paket / klasör animals mevcut dizinde oluşturulacak ve bu sınıf dosyaları aşağıda gösterildiği gibi dizine yerleştirilecektir.

Paket içindeki sınıf dosyasını çalıştırabilir ve sonucu aşağıda gösterildiği gibi alabilirsiniz.

Mammal eats
Mammal travels

Anahtar Kelime ithal

Bir sınıf aynı pakette başka bir sınıf kullanmak isterse, paket adının kullanılmasına gerek yoktur. Aynı paketteki sınıflar, herhangi bir özel sözdizimi olmaksızın birbirlerini bulur.

Misal

Burada, Employee'yi içeren bordro paketine Boss adlı bir sınıf eklenir. Daha sonra Boss, aşağıdaki Boss sınıfında gösterildiği gibi, maaş bordrosu önekini kullanmadan Çalışan sınıfına başvurabilir.

package payroll;
public class Boss {
   public void payEmployee(Employee e) {
      e.mailCheck();
   }
}

Çalışan sınıfı maaş bordrosu paketinde değilse ne olur? Boss sınıfı daha sonra farklı bir paketteki bir sınıfa atıfta bulunmak için aşağıdaki tekniklerden birini kullanmalıdır.

  • Sınıfın tam olarak nitelenmiş adı kullanılabilir. Örneğin -
payroll.Employee
  • Paket, import anahtar sözcüğü ve joker karakter (*) kullanılarak içe aktarılabilir. Örneğin -

import payroll.*;
  • Sınıfın kendisi import anahtar sözcüğü kullanılarak içe aktarılabilir. Örneğin -
import payroll.Employee;

Note- Bir sınıf dosyası, herhangi bir sayıda içe aktarma ifadesi içerebilir. İmport ifadeleri paket ifadesinden sonra ve sınıf bildiriminden önce görünmelidir.

Paketlerin Dizin Yapısı

Bir sınıf bir pakete yerleştirildiğinde iki ana sonuç ortaya çıkar -

  • Paketin adı, önceki bölümde tartıştığımız gibi sınıfın adının bir parçası haline gelir.

  • Paketin adı, karşılık gelen bayt kodunun bulunduğu dizin yapısıyla eşleşmelidir.

Java'da dosyalarınızı yönetmenin basit yolu:

Bir sınıf, arabirim, numaralandırma veya açıklama türü için kaynak kodunu, adı türün basit adı ve uzantısı olan bir metin dosyasına yerleştirin. .java.

Örneğin -

// File Name :  Car.java
package vehicle;

public class Car {
   // Class implementation.   
}

Şimdi, kaynak dosyayı, adı sınıfın ait olduğu paketin adını yansıtan bir dizine koyun -

....\vehicle\Car.java

Şimdi, nitelikli sınıf adı ve yol adı aşağıdaki gibi olacaktır -

  • Sınıf adı → araç. Araba
  • Yol adı → araç \ Car.java (pencerelerde)

Genel olarak, bir şirket, paket adları için tersine çevrilmiş İnternet alan adını kullanır.

Example- Bir şirketin İnternet alan adı apple.com'dur, ardından tüm paket adları com.apple ile başlar. Paket adının her bileşeni bir alt dizine karşılık gelir.

Example - Şirket, Dell.java kaynak dosyası içeren bir com.apple.computers paketine sahipti, bunun gibi bir dizi alt dizinde yer alacaktı -

....\com\apple\computers\Dell.java

Derleme sırasında derleyici, içinde tanımlanan her sınıf, arabirim ve numaralandırma için farklı bir çıktı dosyası oluşturur. Çıktı dosyasının temel adı, türün adıdır ve uzantısı.class.

Örneğin -

// File Name: Dell.java
package com.apple.computers;

public class Dell {
}

class Ups {
}

Şimdi bu dosyayı -d seçeneğini kullanarak aşağıdaki gibi derleyin -

$javac -d . Dell.java

Dosyalar şu şekilde derlenecektir -

.\com\apple\computers\Dell.class
.\com\apple\computers\Ups.class

\ Com \ apple \ computer \ içinde tanımlanan tüm sınıfları veya arayüzleri aşağıdaki gibi içe aktarabilirsiniz -

import com.apple.computers.*;

.Java kaynak dosyaları gibi, derlenen .class dosyaları, paket adını yansıtan bir dizi dizinde olmalıdır. Ancak, .class dosyalarının yolu, .java kaynak dosyalarının yolu ile aynı olmak zorunda değildir. Kaynak ve sınıf dizinlerinizi ayrı ayrı düzenleyebilirsiniz:

<path-one>\sources\com\apple\computers\Dell.java

<path-two>\classes\com\apple\computers\Dell.class

Bunu yaparak, kaynaklarınızı açıklamadan diğer programcılara sınıflar dizinine erişim vermek mümkündür. Derleyicinin ve Java Sanal Makinesi'nin (JVM) programınızın kullandığı tüm türleri bulabilmesi için kaynak ve sınıf dosyalarını da bu şekilde yönetmeniz gerekir.

Sınıflar dizininin tam yolu, <yol-iki> \ sınıfları, sınıf yolu olarak adlandırılır ve CLASSPATH sistem değişkeni ile ayarlanır. Hem derleyici hem de JVM, paket adını sınıf yoluna ekleyerek .class dosyalarınızın yolunu oluşturur.

<Yol-iki> \ sınıflarının sınıf yolu olduğunu ve paket adının com.apple.computers olduğunu söyleyin, ardından derleyici ve JVM <yol-iki> \ classes \ com \ apple \ bilgisayarlarda .class dosyalarını arayacaktır.

Bir sınıf yolu birkaç yol içerebilir. Birden çok yol, noktalı virgül (Windows) veya iki nokta (Unix) ile ayrılmalıdır. Varsayılan olarak, derleyici ve JVM geçerli dizini ve Java platformu sınıflarını içeren JAR dosyasını arar, böylece bu dizinler otomatik olarak sınıf yolunda olur.

CLASSPATH Sistem Değişkenini Ayarla

Geçerli CLASSPATH değişkenini görüntülemek için Windows ve UNIX'te (Bourne kabuğu) aşağıdaki komutları kullanın -

  • Windows → C: \> CLASSPATH'ı ayarlayın
  • UNIX'te →% echo $ CLASSPATH

CLASSPATH değişkeninin mevcut içeriğini silmek için şunu kullanın -

  • Windows → C: \> CLASSPATH =
  • UNIX'de →% ayarlanmamış CLASSPATH; CLASSPATH'ı dışa aktar

CLASSPATH değişkenini ayarlamak için -

  • Windows'da → CLASSPATH = C: \ users \ jack \ java \ classes ayarlayın
  • UNIX'de →% CLASSPATH = / home / jack / java / classes; CLASSPATH'ı dışa aktar