Java, mümkün olduğunca az uygulama bağımlılığı olacak şekilde tasarlanmış, yüksek seviyeli, sınıf tabanlı, nesne yönelimli bir programlama dilidir. Dil, geliştiricilerin Java Sanal Makinesi (JVM) ile donatılmış herhangi bir cihazda çalışabilen kod yazmalarını sağlayan taşınabilirliği ile bilinir. Bu "bir kez yaz, her yerde çalıştır" yeteneği, Java'yı özellikle web uygulamaları, kurumsal yazılımlar ve Android uygulama geliştirme için uygun hale getirir. Java'nın sözdizimi, okunabilirlik ve kullanım kolaylığına güçlü bir vurgu ile C ve C++'dan türetilmiştir.
Java, 1990'ların başında James Gosling ve ekibi tarafından Sun Microsystems'ta geliştirilmiştir. Dil, çeşitli cihazlar arasında uygulama geliştirmek için platform bağımsız bir çözüm olarak tasarlanmıştır. Başlangıçta Oak olarak adlandırılmış, daha sonra Java kahvesinden esinlenerek Java olarak yeniden adlandırılmıştır. Java 1.0'ın resmi sürümü Mayıs 1995'te, Dünya Çapında Ağ'ın yükselişiyle birlikte gelmiş ve bu durum Java'nın benimsenmesini önemli ölçüde artırmıştır.
Yıllar içinde Java, her biri yeni özellikler ve geliştirmeler sunan bir dizi sürümle evrim geçirmiştir. 1998'de Java 2'nin tanıtılmasıyla birlikte Swing grafik API'si ve Koleksiyonlar Çerçevesi gibi bileşenleri içeren Java 2 Platformu da tanıtılmıştır. 2004'te Java 5 ile başlayan sürümleme modeline geçiş, jenerikler, anotasyonlar ve geliştirilmiş for-döngüsü gibi önemli dil özelliklerini tanıtmıştır.
Şu anda Java, 2010'da Sun Microsystems'i satın alan Oracle Corporation tarafından korunmaktadır. Java topluluğu canlıdır; Spring, Hibernate ve Maven gibi birçok çerçeve, kütüphane ve araç mevcuttur. Java'nın geliştirilmesi, en son Long-Term Support (LTS) sürümü olan Java 17 ile düzenli güncellemelerle devam etmektedir; bu, işletmeler için istikrar sağlamaktadır.
Java, C#, Kotlin ve Scala gibi diğer programlama dilleri üzerinde önemli bir etkiye sahip olmuştur. Platform bağımsız doğası, geleneksel yazılımın ötesinde, Apache Hadoop gibi büyük veri platformları ve bulut hizmetleri gibi çeşitli uygulamaların yolunu açmıştır.
Java, kodun sınıflar ve nesneler halinde düzenlenmesini teşvik eden doğası gereği nesne yönelimlidir. Bu, gerçek dünya varlıklarını modellemeyi kolaylaştırır.
class Animal {
void sound() {
System.out.println("Hayvan sesi");
}
}
class Dog extends Animal {
void sound() {
System.out.println("Havlama");
}
}
Java, değişken türlerinin beyan edilmesi gerektiği güçlü bir tip kontrol sistemi kullanır; bu, birçok çalışma zamanı hatasını önler.
int count = 10;
String name = "Java";
Java, artık referans edilmeyen nesnelerin kullandığı belleği otomatik olarak geri kazanarak bellek yönetimi için çöp toplama kullanır.
Animal animal = new Animal(); // Bellek tahsis edildi
animal = null; // Bellek çöp toplama için uygun hale geldi
Java, hataları zarif bir şekilde yönetmeye yardımcı olan try-catch blokları aracılığıyla sağlam bir istisna yönetim mekanizması sunar.
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Sıfıra bölme hatası!");
}
Java, görevlerin eşzamanlı yürütülmesini sağlayarak çoklu iş parçacığını basit hale getirir.
class MyThread extends Thread {
public void run() {
System.out.println("İş parçacığı çalışıyor.");
}
}
MyThread thread = new MyThread();
thread.start();
Java, arayüzlerin hızlı bir şekilde uygulanmasını veya sınıfların resmi bir beyan olmadan genişletilmesini sağlayan anonim iç sınıfların oluşturulmasına izin verir.
Runnable runnable = new Runnable() {
public void run() {
System.out.println("Anonim iç sınıf");
}
};
new Thread(runnable).start();
Java, geliştiricilerin tür parametreleri ile sınıflar, arayüzler ve yöntemler oluşturmasına olanak tanıyan jenerikleri destekler; bu, kod güvenilirliğini artırır.
class Box<T> {
private T item;
public void setItem(T item) { this.item = item; }
public T getItem() { return item; }
}
Java 8'de tanıtılan lambda ifadeleri, tek yöntemli arayüzlerin (fonksiyonel arayüzler) örneklerini temsil etmenin daha net bir yolunu sağlar.
List<String> names = Arrays.asList("John", "Jane", "Jack");
names.forEach(name -> System.out.println(name));
Java'nın Akış API'si, koleksiyonlar üzerinde işlevsel tarzda işlemler yapmayı sağlayarak veri işleme sürecini daha basit ve verimli hale getirir.
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("J"))
.collect(Collectors.toList());
Java, program hakkında meta veriler sağlayan ve programın derleyici veya çalışma zamanı tarafından nasıl ele alınacağını etkileyebilen anotasyonları destekler.
@Override
public void myMethod() {
// Metod kodu burada
}
JDK, Java uygulamaları geliştirmek, derlemek ve çalıştırmak için gereken araçları içeren birincil geliştirme kitidir. Java Çalışma Zamanı Ortamı (JRE), kütüphaneler ve geliştirme araçlarını içerir.
Java geliştirme için yaygın olarak kullanılan Entegre Geliştirme Ortamları (IDE'ler) şunlardır:
Projeler genellikle bağımlılık yönetimini otomatikleştiren ve derleme sürecini kolaylaştıran Maven veya Gradle gibi derleme araçları kullanılarak oluşturulur. Gradle'da basit bir derleme komutu şu şekilde görünebilir:
gradle build
Java, çeşitli alanlarda yaygın olarak kullanılmaktadır, bunlar arasında:
Java, genellikle C#, C++, Python ve JavaScript gibi dillerle karşılaştırılır.
Java kodu, hedef dilin paradigmalarına bağlı olarak diğer dillere çevrilebilir, ancak karmaşıklık değişebilir. Bu süreçte yardımcı olmak için Jaunt ve J2ObjC gibi araçlar mevcuttur, ancak her senaryoyu ele almayabilir. Başarılı çevirinin anahtarı, hem Java'nın hem de hedef dilin yapılarını anlamakta yatmaktadır; özellikle bellek yönetimi ve tip sistemleri gibi alanlarda.