1. Paketler

Sıradan Java programları çok sayıda sınıf içerir. Kaç tane? Binlerce, on binlerce. Ayrıca programın diğer programcılar tarafından yazılan sınıfları içeren çeşitli kitaplıkları kullandığı gerçeğini de hesaba katarsanız, o zaman sınıfların sayısı kolayca milyonlarla ölçülebilir!

Tüm bu milyonlarca, hatta binlerce sınıf için benzersiz isimler bulmak neredeyse imkansız olurdu.

Elbette, A123ve gibi adlar hayal edebiliriz B345, ancak sınıfın anlaşılmasını kolaylaştıran iyi bir sınıf adı seçmekten bahsediyorsak (örneğin String, dizeler için), o zaman bin benzersiz ad oluşturmak bile çok fazla işin.

Bu nedenle Java'da, package anahtar sözcüğünü kullanarak sınıfları paketler halinde gruplandırmak adettendir.

Java sınıfları ve paketleri, bir bilgisayardaki dosya ve klasörlere çok benzer.

Örneğin, bilgisayarınızda 10 belge saklamanız gerekiyorsa, muhtemelen bunları tek bir klasörde tutarsınız. Peki ya binlerce belgeniz varsa (örneğin, bir şirketin tüm belgelerinin bulunduğu bir havuz)?

Depolanacak binlerce belgeyle, iyi tanımlayıcı adlara sahip çok düzeyli klasörler oluşturmak bir çözümdür. Ve sonra en son seviyedeki bir klasörde, o klasörle ilgili belgeleri saklayın. Belgeler için iyi tanımlayıcı isimler de zarar vermez.

Aslında, bunların hepsini Java'daki sınıflar için yapıyoruz.

Sınıfları içeren dosyalar farklı dizinlerde (klasörlerde) depolanır ve tüm alt klasörleriyle birlikte sınıfın klasörünün tam adı paketin adıdır. Örnek:

dosyanın yolu Paket ismi Sınıf adı
\com\codegym\tasks\Solution.java
com.codegym.tasks
Solution
\com\io\FileInputStream.java
com.io
FileInputStream
\java\util\ArrayList.java
java.util
ArrayList

Klasör adlarından farklı olarak, paket adları sınırlayıcı olarak bir nokta kullanır. Başka bir deyişle, klasör \com\codegym\tasks\pakete karşılık gelir com.codegym.tasks.


2. srcklasör

Java'da, bir programın tüm sınıflarını tek bir klasörde (ve alt klasörlerde) depolamak alışılmış bir durumdur. Bu klasör genellikle ( kaynaksrc kısaltması ) olarak adlandırılır .

Bu klasöre proje kökü (veya kaynak kökü ) adı verilir ve tüm paket yolları buna bağlıdır. Örnekler:

Klasörler Paket ismi
c:\projects\data\my\src\com\codegym\tasks\
com.codegym.tasks
d:\files\git\data\project\src\com\codegym\tasks\
com.codegym.tasks

myBu durumda, programcılar " klasörde bulunan adında bir projemiz var " veya " klasörde bulunan c:\projects\dataadında bir projemiz var " gibi bir şey söylerler.projectd:\files\git\data

Sınıfları doğrudan kök klasöre ( ) değil, her zaman paketlere koymak en iyisidir src. Yalnızca birkaç sınıfınız varsa, bu bir sorun teşkil etmez. Ancak birçok sınıf olduğunda, kafanın karışması çok kolaydır. , sınıflarınızı her zaman yalnızca paketler halinde oluşturun.

Java'da sınıflara ve paketlere anlamlı adlar vermek adettendir. Birçok şirket kendi kitaplıklarını (bir dizi sınıf) yayınlar ve karışıklığı önlemek için şirketin/web sitesinin/projenin adını paketin adına dahil eder:

Paket ismi Şirket/proje adı
org.apache.common
org.apache.tomcat
org.apache.util
apaçi projesi
com.oracle.jdbc
Oracle şirketi
java.io
javax.servlet
Oracle şirketi, Java projesi
com.ibm.websphere
IBM şirketi, WebSphere projesi
com.jboss
JBoss projesi

3. Dosya içeriği

Java dil standardına göre, bir sınıf adı ve paketinin adı hakkında bilgi, kodla birlikte dosyaya dahil edilmelidir. Genel form aşağıda gösterilmiştir:

package package-name;

public class ClassName
{

}

Paket adı, klasör adıyla eşleşmelidir ve dosya adı, genel sınıf adıyla eşleşmelidir.

Bir dosyanız varsa , şunu içermelidir:...\src\com\project\Service.java

package com.project;

public class Service
{

}

4. Sınıfları içe aktarma

Sınıf adı ve paket adı, sınıfın tam nitelikli adını oluşturur .

Örnekler:

Tam nitelikli ad Paket ismi Sınıf adı
java.io.FileInputStream
java.io
FileInputStream
java.lang.String
java.lang
String
java.util.ArrayList
java.util
ArrayList
org.apache.tomcat.Servlet
org.apache.tomcat
Servlet
Cat
hiçbiri
Cat

Güzel haberler:

Tam nitelikli sınıf adı, bir proje içinde her zaman benzersizdir. Sonuçta, tek bir klasörde aynı ada sahip iki dosya oluşturamazsınız.

Kötü haber:

Tam nitelikli sınıf adları genellikle ya uzun ya da çok uzundur. Ve kodda her seferinde uzun bir ad yazmak (örneğin java.util.ArrayList) son derece elverişsizdir.

Bu nedenle Java, sınıfları içe aktarma özelliğini ekledi .

Kodunuzda bir sınıfın kısa adını kullanabilirsiniz , ancak önce derleyiciye hangi tam nitelikli sınıf adının kısa isme karşılık geldiğini bildirmeniz gerekir . Ya şimdi projenizde aynı ada sahip birden fazla sınıf varsa? Ya da başlangıçta bir tane var, ama sonra 15 tane daha eklendi...

Kodunuzda kısa bir sınıf adı kullanmak için aşağıdaki yapıyı eklemeniz gerekir:

import fully-qualified-class-name;

Bu bildirim, sınıfın en başına, bildirimden hemen sonra eklenmelidir package.

Örnek:

package com.codegym.tasks.task01;

import java.util.Scanner;
import com.test.helper.special.ArrayList;

public class Solution
{
   public static void main(String[] args)
   {
     Scanner console = new Scanner(System.in);
     ArrayList list = new ArrayList();
   }
}

İki sınıfı ( ve ) içe aktardık , böylece kısa adlarını kodumuzda kullanabiliriz. Ve derleyici hangi sınıfların kullanılacağını bilecektir.java.util.Scannercom.test.helper.special.ArrayList

Ve eğer kullanmamış olsaydık aynı kod şu şekilde görünürdü import:

package com.codegym.tasks.task01;

public class Solution
{
   public static void main(String[] args)
   {
     java.util.Scanner console = new java.util.Scanner(System.in);
     com.test.helper.special.ArrayList list = new com.test.helper.special.ArrayList();
   }
}

Bu arada, projenizde adında iki sınıf varsa Scanner, ikisini aynı dosyaya içe aktaramazsınız: bunlardan biri için uzun adı kullanmanız gerekir .

Diyelim ki ekibinizde bir Jen var. Herkes onun kim olduğunu bildiği için iletişim sorunu yok. Ancak üç Jen varsa, onları ayırt etmek için tam nitelikli adların kullanılması gerekirdi.

Not 1

Bu arada, sınıfınıza çok sayıda import deyimi ekleyemeyecek kadar tembelseniz, onun tembel sürümünü kullanabilirsiniz: belirli bir sınıf adı yerine bir yıldız işareti koyun:

import package-name.*;

Bu, paketteki tüm sınıfların kısa adlarını kullanmanıza izin verecektir .

Not 2

Paketteki tüm sınıflar otomatik olarak içe aktarılır, bu nedenle onlar için java.langbir açıklama yazmanıza gerek yoktur . importBu sınıflardan birini zaten bildiğinizden emin olabilirsiniz: java.lang.String. Evet bu doğru. Bu, Stringdizelerle çalışmak için kullandığımız sınıftır.