Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış açık kaynak kodlu, nesneye yönelik, platform bağımsız, yüksek verimli, çok işlevli, yüksek seviye, hem yorumlanan hem de derlenen bir dildir.
Java logosu | |
Paradigması | Nesne yönelimli (çok paradigmalı), yapısal, fonksiyonel, zorunlu |
---|---|
İlk çıkışı | 23 Mayıs 1995 | )
Tasarımcı | James Gosling & Sun Microsystems |
Geliştirici | Oracle Corporation |
, , güvenli, , | |
OpenJDK, ve daha fazlası | |
, | |
Etkilendikleri | Ada 83, , Delphi Object Pascal, , , , , Oberon, Objective-C, , Smalltalk |
Etkiledikleri | Ada 2005, BeanShell, C#, Clojure, D, ECMAScript, Groovy, , JavaScript, PHP, Python, Scala, Seed7, Vala |
Platformu | Çapraz platform |
Lisans | GNU Genel Kamu Lisansı / |
Olağan dosya uzantıları | .java, .class, .jar, .jmod |
Web sitesi | Java geliştiricileri için |
Java, Sun Microsystems'den James Gosling tarafından geliştirilen bir programlama dilidir ve 1995 yılında Sun Microsystems'in çekirdek bileşeni olarak piyasaya sürülmüştür. Bu dil C ve 'dan birçok sözdizim türetmesine rağmen bu türevler daha basit nesne modeli ve daha az düşük seviye olanaklar içerir. Java uygulamaları bilgisayar mimarisine bağlı olmadan herhangi bir Java Sanal Makinesi (Java Virtual Machine - JVM) üzerinde çalışabilen tipik bytecode'dur (sınıf dosyası).
Java'nın sık kullanılan sloganlarından biri olan, çevirisi "bir defa yaz, her yerde çalıştır" olan "write once, run anywhere - WORA", Java'nın; derlenmiş Java kodunun, Java'yı destekleyen bütün platformlarda tekrar derlenmeye ihtiyacı olmadan çalışabileceğini ima eder. 2016 yılında bildirilen 9 milyon geliştiricisi ile, özellikle istemci sunucu web uygulamaları için olmak üzere, kullanımda olan en popüler programlama dillerinden birisidir.
Java ilk çıktığında daha çok küçük cihazlarda kullanılmak için tasarlanmış ortak bir düzlem dili olarak düşünülmüştü. Ancak düzlem bağımsızlığı özelliği ve tekbiçim kütüphane desteği C ve 'tan çok daha üstün ve güvenli bir yazılım geliştirme ve işletme ortamı sunduğundan, hemen her yerde kullanılmaya başlanmıştır. Özellikle kurumsal alanda ve mobil cihazlarda son derece popüler olan Java özellikle J2SE 1.4 ve 5 sürümü ile masaüstü uygulamalarda da yaygınlaşmaya başlamıştır.
Java'nın ilk sürümü olan Java 1.0 (1995) Java Platform 1 olarak adlandırıldı ve tasarlama amacına uygun olarak küçük boyutlu ve kısıtlı özelliklere sahipti. Daha sonra düzlemin gücü gözlendi ve tasarımında büyük değişiklikler ve eklemeler yapıldı. Bu büyük değişikliklerden dolayı geliştirilen yeni düzleme Java Platform 2 adı verildi ama sürüm numarası 2 yapılmadı, 1.2 olarak devam etti. 2004 sonbaharında çıkan Java 5, geçmiş 1.2, 1.3 ve 1.4 sürümlerinin ardından en çok gelişme ve değişikliği barındıran sürüm oldu. Java SE 8 ise Java teknolojisinin günümüz sürümüdür. 13 Kasım 2006'da Java düzlemi GPL ruhsatıyla açık kodlu hale gelmiştir.
Tarihi
James Gosling ve Java projesini Haziran 1991'de başlattı. Java ilk olarak interaktif televizyonlar için tasarlandı ancak dijital kablo televizyon endüstrisi için o zamanlar çok gelişmişti. Java'nın ilk hali Oak ismini taşıyordu ve bu isimi Gosling'in ofisinin hemen yanında bulunan bir meşe ağacından almıştı. Daha sonra projenin ismi Green oldu ve en son Java adını aldı. Gosling, Java'yı C/C++'a benzer bir sözdizimi ile tasarladı ve böylece programcılar için kolaylıkla öğrenilebilen bir dil oldu.
Sürümler
Mayıs 2022 itibarıyla resmî olarak Java SE 8, Java SE 11 ve Java SE 17 sürümleri uzun vadeli (LTS) olarak, Java SE 18 ise süreli bir şekilde desteklenmektedir. Java'nın ana sürümleri aşağıdaki gibidir:
Versiyon | Yayın Tarihi |
---|---|
JDK Beta | 1995 |
JDK1.0 | 23 Ocak 1996 |
JDK 1.1 | 19 Şubat 1997 |
J2SE 1.2 | 8 Aralık 1998 |
J2SE 1.3 | 8 Mayıs 2000 |
J2SE 1.4 | 6 Şubat 2002 |
J2SE 5.0 | 30 Eylül 2004 |
Java SE 6 | 11 Aralık 2006 |
Java SE 7 | 28 Temmuz 2011 |
Java SE 8 (LTS) | 18 Mart 2014 |
Java SE 9 | 21 Eylül 2017 |
Java SE 10 | 20 Mart 2018 |
Java SE 11 (LTS) | 25 Eylül 2018 |
Java SE 12 | 19 Mart 2019 |
Java SE 13 | 17 Eylül 2019 |
Java SE 14 | 17 Mart 2020 |
Java SE 15 | 15 Eylül 2020 |
Java SE 16 | 16 Mart 2021 |
Java SE 17 (LTS) | 14 Eylül 2021 |
Java SE 18 | 22 Mart 2022 |
Java SE 19 | 13 Eylül 2022 |
Java SE 20 | 07 Haziran 2022 ** |
Java SE 21 (LTS) | 07 Aralık 2022 ** |
- Çalışmaları devam etmektedir.
LTS (Long-Term Support), "Uzun Vadeli Destek" anlamına gelir. Bir programın veya yazılımın dağıtıcısı tarafından uzun vade de desteklenecek olan sürümüdür.
Çalışma mantığı
Bir Java yazılımı şu şekilde geliştirilir:
- Yazılımcı Java kodunu yazar.
- Bu kod bir Java derleyicisi ile derlenir. Derleme sonucunda "bytecode" adı verilen bir tür sanal makine kodu ortaya çıkar. Platform bağımsızlığını sağlayan bytecode'dur. Çünkü bir kere bytecode oluştuktan sonra yazılım, sanal makine içeren tüm işletim sistemlerinde çalışabilmektedir.
- Bu bytecode Java Sanal Makinesi (Java Virtual Machine - JVM) tarafından işletilir. Bu aşama, her bir bytecode komutunun teker teker yorumlanması ile icra edilebileceği gibi, anında derleme ( - JIT) kullanılarak da gerçekleştirilebilir.
Bazı kavramlar
Nesneye yönelik yazılımlama mantığı:
Anında Derleme
Java ilk çıktığında bytecode işletme hızı çok iyi değildi. Yerine göre sistemin öz yazılımlarından 5-10 kat yavaş çalışıyordu. Bu nedenle bazı yazılım geliştirme şirketleri JIT yani "Just-in-time compilation", "anında derleme" araçları üretmeye başladılar. Yapılan şey bytecode'u sanal makinenin kurulu olduğu gerçek sistemin diline anında derleme yaparak dönüştürmesiydi. Bu sayede verimde ciddi artışlar sağlandı. Ama 2000 yılından sonra geliştirilen sanal makinelerde (HotSpot gibi) JIT'in işlevi VM içinde yer almaya başlamış, işlemci hızı ve bellek miktarının dramatik biçimde artması ile dış JIT yazılımları popülerliğini kaybetmiştir. Bugün hâlen birkaç ürün (Excelsior JET gibi) pazarda bulunsa da genellikle bu yöndeki ihtiyaç azalmıştır.
Java API
Java API, Java yazılımlarında kullanılan yazılım kütüphanelerine genel olarak verilen isimdir. Java API ile disk, grafik, ağ, veri tabanı, güvenlik gibi yüzlerce konuda kullanıcılara erişim imkânı sunulur. Java API J2SDK'nın bir parçasıdır.
Atık veri toplama teknolojisi (Garbage Collection) Java'dan önce de var olan ama Java ile adını duyurmuş ve yaygın olarak kullanılmaya başlanmış bir kavramdır. C++, C gibi dillerin en büyük engellerinden birisi dinamik bellek yönetimidir. Yazılımda gösterici (işaretçi - pointer) kullanarak dinamik olarak bellek ayırdıktan sonra o bellek ile işiniz bittiğinde mutlaka ayrılan belleği bellek yöneticiye özel alt yordamlar yardımıyla (delete, free...) iade etmeniz gerekir. Yoksa bellek sızıntısı (memory leak) oluşur ve bu bir süre sonra yazılımın ve işletim sisteminin beklenenden farklı davranmasına yol açabilir. Sızıntıların saptanması oldukça güçtür ve bulunması zor hatalara yol açar. Bu nedenle bugünün tüm büyük C ve C++ yazılımları az da olsa bellek sızıntısı içerir (işletim sistemleri dahil).
Atık veri toplayıcı sayesinde Java'da bir nesne oluşturulduktan sonra o nesne ile işiniz bittiğinde hiçbir şey yapmanız gerekmez: Sanal makine akıllı bir biçimde kullanılmayan bellek bölümlerini belirli aralıklarla ya da uyarlamalı yöntemlerle otomatik olarak temizler ve sisteme iade eder. Bu işleme çöp toplama (atık toplama - garbage collection) adı verilir. Çöp toplama sistemlerinin yapısı oldukça karmaşıktır ve geçen yıllar içinde büyük gelişmeler kaydedilmiştir. Çöp toplayıcının varlığı Java'da bellek sızıntısı olmayacağı anlamına gelmez, ama bellek sızıntıları daha ender olarak ve farklı şekillerde karşınıza çıkar ve genellikle tedavi edilmesi daha kolaydır.
Jar
Jar (Java Arşivi - Java Archive), aslında bir tür sıkıştırma formatıdır. Jar ile derlenen Java kodları ile oluşan yazılımın paketlenip taşınması kolay bir hale getirilir. Jar dosyaları temelde bytecode blokları içerir. Jar dosyaları genellikle kütüphane oluşturmada ya da uygun biçimde hazırlanırsa işletim sisteminden doğrudan çalıştırılabilecek bir şekilde kullanılabilir (çalıştırılabilir jar - executable jar). Jar dosyalarının içeriğini sıkıştırma yazılımları ya da Java yazılım geliştirme araçları ile inceleyebilirsiniz. Java 1.5 ile yeni bir tür jar oluşturma metodu da kullanıma girdi. Pack200 adı verilen hiper-sıkıştırma (hyper-compression) algoritması ile jar dosyaları daha küçük boyutlara indirgenebiliyor. Ancak bu teknoloji daha çok ağ üzerinden yapılan transferlerde kullanılıyor. Daha fazla ayrıntı için: buraya bakınız 24 Ocak 2012 tarihinde Wayback Machine sitesinde .
AWT ve Swing
AWT, ilk Java ile birlikte geliştirilen temel grafik arayüz oluşturma kütüphanesine verilen isimdir. AWT işletim sisteminin doğal grafik yapılarına erişimi sağlar. Ancak Java 2 platformu ile birlikte AWT yetersiz görülmüş ve çok daha geniş ve gelişmiş özelliklere sahip Swing kütüphanesi sisteme eklenmiştir. Özellikle çok platform destekleyen yazılımlarda kullanıcı arayüzü geliştirme aracı olarak swing hâlen önemini korumaktadır. Swing önceleri işletim sisteminin kullandığı donanım grafik hızlandırma araçlarını kullanmadığından yavaşlığı ile eleştirilere hedef olmuştu. Özellikle Java 1.4 ile Swing, hem genel olarak sanal makinenin hızlanması ve kısmen donanım hızlandırmayı kullanması ile bu kötü şöhretinden sıyrılmaya başladı. AWT hâlen Swing'in bir alt katmanında, temel iki boyutlu grafik işlemlerinde kullanılmaya devam ediyor.
SWT
SWT Swing'e bir alternatif olarak IBM tarafından geliştirilen bir gösterim sistemidir. Swing'den en büyük farkı çalıştığı işletim sisteminin grafik kütüphanesi ve komutlarını kullanmasıdır. Bu nedenle SWT uygulamaları Swing'e göre çoğu yerde daha hızlı ve işletim sistemindeki diğer uygulamaları andıran bir şekilde çalışmasını sağlar. Swing'in Java 1.5 ile performans açığını kapattığı iddia edilse de SWT'nin de artık Java camiasında kabul görmüş bir sistem olduğu açıktır. SWT'nin dezavantajı ise Java'nin bir parçası olmamasıdır. Yani SWT uygulamaları SWT kütüphanesi ile birlikte dağıtılmaktadır. Ayrıca SWT farklı işletim sistemlerinde farklı olgunluk ve performansta işlemektedir ve özellikle Windows dışı sistemlerde henüz yeterince olgunlaşamamıştır. En bilinen SWT uygulamaları, ünlü Java yazılım geliştirme aracı (IDE) Eclipse ve BitTorrent uygulaması Azureus'tur.
HotSpot Teknolojisi
Sun Microsystems tarafından geliştirilen Java sanal makinesi, HotSpot adı verilen özel bir teknolojiyi içinde barındırır. HotSpot, yani "sıcak nokta", bir yazılımda sürekli olarak tekrarlanan ve üzerinden geçilen kod bölümlerine verilen bir isimdir. HotSpot sanal makinesi şu anda iki ayrı modda sanal makinenin çalışmasını sağlamaktadır: İstemci (Client) ve Sunucu (Server) modları. İstemci modunda bytecode büyük ölçüde daha başlangıçta JIT ile sistemin öz makine koduna dönüştürülerek işletilir ama çalışma anında daha fazla iyileştirme işlemi gerçekleştirilmez. Bir uygulamanın hızı istemci modunda zaman içinde bu nedenle değişmez. Sunucu modunda ise sanal makine başlangıçta bytecode'unu sistemin öz koduna dönüştürmekte acele etmez. Bu nedenle sunucu modu başlangıçta istemci modundan oldukça yavaştır. Yazılım çalışmaya devam ettikçe sanal makine yazılımdaki sıcak noktaları tespit edip bytecode'u sadece JIT ile makine koduna dönüştürmekle kalmaz, ayrıca oldukça yoğun bir iyileştirmeye de tabi tutar. Sonuçta sunucu modunda uygulamalar zaman içinde hızlanır, uzun soluklu uygulamaların bu nedenle sunucu modunda işletilmesi önerilir. Mustang kod adlı Java SE 6'da istemci modunda da benzeri bir teknolojinin kullanılması bekleniyor. Dolphin kod adlı Java SE 7'de ise bu iki mod arasındaki fark azalacağından sistemin tek modda çalışması bekleniyor.
Uygulamacık
Uygulamacık (applet 12 Nisan 2011 tarihinde Wayback Machine sitesinde arşivlendi.), uzaktaki sistem üzerinden indirilip internet tarayıcı üzerinde çalıştırılabilen Java uygulamalarına verilen isimdir. Java'nın son kullanıcılar tarafından tanınması uygulamacık sayesinde olmuştur dersek yanlış olmaz. Uygulamacıklar sisteme zarar veremeyecek bir şekilde tasarlanmıştır. İçerisinde uygulamacık olan bir sayfayı açmaya çalıştığınızda tarayıcınız otomatik olarak Java sanal makinesini çalıştırıp ekranın uygulamacığa ayrılan bölümünde uygulamanın çalışmasını sağlar.
Fakat, son yıllarda birçok Java programcısı Uygulamacıklar üzerinden gözünü çekmiştir. Artık HTML, CSS ve JavaScript sayesinde çok daha hızlı, pratik, güvenli ve kusursuz uygulamalar/web hizmetleri yapılabiliyor olması bunun en önemli sebebidir.
WebStart
WebStart teknolojisi uygulama kurulum, güncelleme ve silme dertlerine deva olmak üzere tasarlanmış bir sistemdir. WebStart teknolojisi kısaca yazılımların uzaktan yerel sisteme güvenli olarak kurulmasını ve korumalı bir alanda çalıştırılmasını sağlar. Applet'lerin bir sonraki adımı olarak görülebilir. Bir WebStart uygulamasını kurmak için internet üzerindeki özel bir bağlantıya tıklamak yeterlidir. Sistem otomatik olarak WebStart sistemini çalıştırıp yazılımı Java cep belleğine indirir. İstenirse masaüstüne kısayol koymasını da sağlar. Daha sonra sistem çevrimiçi (online) ya da çevrimdışı (offline) olarak çalıştırılabilir ve uzaktaki yazılım güncellendiğinde otomatik olarak -istenirse- yerel makinedeki yazılımın da güncellenmesi sağlanabilir. Kullanıcının özel olarak izin vermesi halinde uygulama yerel sisteme erişim hakkı kazanabilir. Aksi takdirde WebStart uygulamaları sisteme yazma işlemi gerçekleştiremezler.
Bu Java teknolojisi de, günümüzdeki programcıların takibinde değildir.
Java yazımı (Sözdizimi)
Sınıf temelli nesneye yönelik bir dil olan Java, yazım olarak C++ ile benzerlikler arz eder. Java'nın yanında C#, Perl, JavaScript gibi diller de aynı dil ailesine aittir. "{}" şeklinde süslü parantezler içerisindeki bloklar, ++ arttırma ve—azaltma işleçleri bu dilin belirgin özelliklerindendir.
Merhaba Dünya!
// MerhabaDünya.java public class MerhabaDünya{ public static void main(String[] args) { System.out.println("Merhaba Dünya!"); } }
- "MerhabaDünya.java" ile "public class MerhabaDünya" bu kısımda iki isim aynı olmalıdır aksi takdirde uygulama çalıştırılamaz.
- class: Sınıf tanımlayabilmek için class ön eki şarttır.
- public: Sınıfın dışarıdan erişebilir olduğu,
- static: Sınıf tarafından paylaşıldığı,
- void: Bir değer döndürmediği anlamına gelir.
- Public ve Static'e erişim belirleyicisi (access specifier) de denir.
- Void'e dönüş tipi (return type) de denir.
- String args[]: Parantezin içinde yöntemin aldığı parametreleri belirleriz. "String" sınıf adı, "args" da parametre adıdır. "[]" ise args'ın bir dizi (array) olduğunu belirtiyor.
- "System.out.println();" ile yazımızı yazdırıyoruz ve yeni satıra geçmesini sağlıyoruz.
- Yazımızı "System.out.print("Merhaba Dunya!");" ile de yazdırabilirdik. Fakat imleç yeni satıra geçmezdi.
- Java Türkçe karakterleri (C# gibi) "değişken adlarında, sınıf adlarında" da kullanmamıza imkân tanır.
Java'da yazdığımız yazılımları derlememiz için öncelikle sınıf adı ile aynı adı taşıyan dosya ismine sahip olmamız gerekmektedir. Yukarıdaki örnek yazılımı sınıf ismi olan "MerhabaDünya" ifadesini kullanıp uzantısı ile beraber "MerhabaDünya.java" ismi ile kaydedebiliriz. J2SDK veya benzer bir Java geliştirme ortamı kurulu sistemimizde yazılan uygulama aşağıdaki şekilde derlenebilir.
javac -encoding UTF-8 MerhabaDünya.java
javac, yazılan programı derleyerek ".class" uzantılı bir dosya üretir. ".class" sınıf dosyaları JVM'de çalışabilecek bytecode'lar içeren sınıf dosyalarıdır. Örnek uygulamayı çalıştırmak için:
java MerhabaDünya
yazabiliriz. Java komutu öncelikle sınıf yolunda (Bkz. ) "MerhabaDünya" sınıfını arayacaktır. Bulduğu takdirde "MerhabaDünya" sınıfında "main" metodunu arayacaktır. Eğer metot bulunur ise bu metot icra edilecektir.
Kapsamlı örnek
package TekCift; import javax.swing.JOptionPane; public class TekCift { /** * Tam sayı (int ingilizce de integer’ın kısaltmasıdır) */ private int kullanicininGirdigi; /** * Bu yapıcı fonksiyondur. TekCift objesi yaratılırken çağrılır. */ public TekCift() { } /** * Aşağıdaki ana fonksiyondur. Java yorumlayıcısı programı çalıştırmak için * ilk bu fonksiyonu çağırır. * * @param argumanlar * Komut satırı argümanları (kullanılmıyor) */ public static void main(final String[] argumanlar) { TekCift obje = new TekCift(); obje.pencereGoster(); } /** * Aşağıdaki fonksiyon "Sayı giriniz" diyaloğunu gösterir */ public void pencereGoster() { try { kullanicininGirdigi = Integer.parseInt(JOptionPane.showInputDialog("Lütfen bir sayı giriniz.")); hesapla(); } catch (final NumberFormatException e) { System.err.println("HATA: Geçersiz bir değer girdiniz. Lütfen sayısal bir değer giriniz."); } } /** * Aşağıdaki fonksiyon kullanıcının girdiği değere göre çift ya da tek * penceresi gösterir. */ private void hesapla() { if ((kullanicininGirdigi % 2) == 0) { JOptionPane.showMessageDialog(null, "Çift"); } else { JOptionPane.showMessageDialog(null, "Tek"); } } }
- package anahtar kelimesi dosyanın başında paket belirtmek için kullanılır.
- kullanıcı arayüzü gösterebilmek içın javax.swing.JOptionPane kütüphanesine ihtiyacımız var. Dosyanın başındaki import cümlesi tam bu işe yarar.
- TekCift sınıfı kullanıcının girdiği bir tam sayıyı hafızasında tutmak için kullanıcının girdiği değişkenini tanımlıyor. Diğer sınıfların bu değişkeni görmemesi için private (özel) anahtar kelimesini kullanılıyoruz.
Dokümantasyon
Sun Microsystems tarafından geliştirilen Javadoc, Java kodlarının HTML formatında dokümantasyonun oluşturulması için kullanılan kapsamlı bir sistemdir.
İlgili Makaleler
Kaynakça
- ^ "About the Java Technology (The Java™ Tutorials > Getting Started > The Java Technology Phenomenon)". docs.oracle.com. 15 Aralık 2016 tarihinde kaynağından . Erişim tarihi: 1 Ocak 2023.
- ^ "Arşivlenmiş kopya". 29 Mart 2017 tarihinde kaynağından . Erişim tarihi: 14 Şubat 2017.
- ^ "Arşivlenmiş kopya". 23 Ocak 2013 tarihinde kaynağından . Erişim tarihi: 14 Şubat 2017.
- ^ "Arşivlenmiş kopya". 15 Şubat 2017 tarihinde kaynağından . Erişim tarihi: 14 Şubat 2017.
- ^ . 26 Mart 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 14 Şubat 2017.
- ^ . 16 Ocak 2009 tarihinde kaynağından arşivlendi. Erişim tarihi: 14 Şubat 2017.
- ^ . 26 Aralık 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 14 Şubat 2017.
- ^ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 395". www.jcp.org. 2 Ocak 2023 tarihinde kaynağından . Erişim tarihi: 2 Ocak 2023.
- ^ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 396". www.jcp.org. 8 Aralık 2022 tarihinde kaynağından . Erişim tarihi: 2 Ocak 2023.
- ^ "Arşivlenmiş kopya". 10 Aralık 2019 tarihinde kaynağından . Erişim tarihi: 3 Mayıs 2020.
- ^ "Arşivlenmiş kopya". 10 Haziran 2019 tarihinde kaynağından . Erişim tarihi: 3 Mayıs 2020.
Dış bağlantılar
- http://www.java.com 16 Aralık 2019 tarihinde Wayback Machine sitesinde . (Son Kullanıcılar için)
- http://www.oracle.com/technetwork/java (Geliştiriciler için)
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Java Sun Microsystems muhendislerinden James Gosling tarafindan gelistirilmeye baslanmis acik kaynak kodlu nesneye yonelik platform bagimsiz yuksek verimli cok islevli yuksek seviye hem yorumlanan hem de derlenen bir dildir JavaJava logosuParadigmasiNesne yonelimli cok paradigmali yapisal fonksiyonel zorunluIlk cikisi23 Mayis 1995 29 yil once 1995 05 23 TasarimciJames Gosling amp Sun MicrosystemsGelistiriciOracle Corporation guvenli OpenJDK ve daha fazlasi EtkilendikleriAda 83 C Delphi Object Pascal Oberon Objective C SmalltalkEtkiledikleriAda 2005 BeanShell C Clojure D ECMAScript Groovy JavaScript PHP Python Scala Seed7 ValaPlatformuCapraz platformLisansGNU Genel Kamu Lisansi Olagan dosya uzantilari java class jar jmodWeb sitesiJava gelistiricileri icin Java Sun Microsystems den James Gosling tarafindan gelistirilen bir programlama dilidir ve 1995 yilinda Sun Microsystems in cekirdek bileseni olarak piyasaya surulmustur Bu dil C ve C dan bircok sozdizim turetmesine ragmen bu turevler daha basit nesne modeli ve daha az dusuk seviye olanaklar icerir Java uygulamalari bilgisayar mimarisine bagli olmadan herhangi bir Java Sanal Makinesi Java Virtual Machine JVM uzerinde calisabilen tipik bytecode dur sinif dosyasi Java nin sik kullanilan sloganlarindan biri olan cevirisi bir defa yaz her yerde calistir olan write once run anywhere WORA Java nin derlenmis Java kodunun Java yi destekleyen butun platformlarda tekrar derlenmeye ihtiyaci olmadan calisabilecegini ima eder 2016 yilinda bildirilen 9 milyon gelistiricisi ile ozellikle istemci sunucu web uygulamalari icin olmak uzere kullanimda olan en populer programlama dillerinden birisidir Java ilk ciktiginda daha cok kucuk cihazlarda kullanilmak icin tasarlanmis ortak bir duzlem dili olarak dusunulmustu Ancak duzlem bagimsizligi ozelligi ve tekbicim kutuphane destegi C ve C tan cok daha ustun ve guvenli bir yazilim gelistirme ve isletme ortami sundugundan hemen her yerde kullanilmaya baslanmistir Ozellikle kurumsal alanda ve mobil cihazlarda son derece populer olan Java ozellikle J2SE 1 4 ve 5 surumu ile masaustu uygulamalarda da yayginlasmaya baslamistir Java nin ilk surumu olan Java 1 0 1995 Java Platform 1 olarak adlandirildi ve tasarlama amacina uygun olarak kucuk boyutlu ve kisitli ozelliklere sahipti Daha sonra duzlemin gucu gozlendi ve tasariminda buyuk degisiklikler ve eklemeler yapildi Bu buyuk degisikliklerden dolayi gelistirilen yeni duzleme Java Platform 2 adi verildi ama surum numarasi 2 yapilmadi 1 2 olarak devam etti 2004 sonbaharinda cikan Java 5 gecmis 1 2 1 3 ve 1 4 surumlerinin ardindan en cok gelisme ve degisikligi barindiran surum oldu Java SE 8 ise Java teknolojisinin gunumuz surumudur 13 Kasim 2006 da Java duzlemi GPL ruhsatiyla acik kodlu hale gelmistir TarihiJames Gosling ve Java projesini Haziran 1991 de baslatti Java ilk olarak interaktif televizyonlar icin tasarlandi ancak dijital kablo televizyon endustrisi icin o zamanlar cok gelismisti Java nin ilk hali Oak ismini tasiyordu ve bu isimi Gosling in ofisinin hemen yaninda bulunan bir mese agacindan almisti Daha sonra projenin ismi Green oldu ve en son Java adini aldi Gosling Java yi C C a benzer bir sozdizimi ile tasarladi ve boylece programcilar icin kolaylikla ogrenilebilen bir dil oldu Surumler Mayis 2022 itibariyla resmi olarak Java SE 8 Java SE 11 ve Java SE 17 surumleri uzun vadeli LTS olarak Java SE 18 ise sureli bir sekilde desteklenmektedir Java nin ana surumleri asagidaki gibidir Versiyon Yayin TarihiJDK Beta 1995JDK1 0 23 Ocak 1996JDK 1 1 19 Subat 1997J2SE 1 2 8 Aralik 1998J2SE 1 3 8 Mayis 2000J2SE 1 4 6 Subat 2002J2SE 5 0 30 Eylul 2004Java SE 6 11 Aralik 2006Java SE 7 28 Temmuz 2011Java SE 8 LTS 18 Mart 2014Java SE 9 21 Eylul 2017Java SE 10 20 Mart 2018Java SE 11 LTS 25 Eylul 2018Java SE 12 19 Mart 2019Java SE 13 17 Eylul 2019Java SE 14 17 Mart 2020Java SE 15 15 Eylul 2020Java SE 16 16 Mart 2021Java SE 17 LTS 14 Eylul 2021Java SE 18 22 Mart 2022Java SE 19 13 Eylul 2022Java SE 20 07 Haziran 2022 Java SE 21 LTS 07 Aralik 2022 Calismalari devam etmektedir LTS Long Term Support Uzun Vadeli Destek anlamina gelir Bir programin veya yazilimin dagiticisi tarafindan uzun vade de desteklenecek olan surumudur Calisma mantigiBir Java yazilimi su sekilde gelistirilir Yazilimci Java kodunu yazar Bu kod bir Java derleyicisi ile derlenir Derleme sonucunda bytecode adi verilen bir tur sanal makine kodu ortaya cikar Platform bagimsizligini saglayan bytecode dur Cunku bir kere bytecode olustuktan sonra yazilim sanal makine iceren tum isletim sistemlerinde calisabilmektedir Bu bytecode Java Sanal Makinesi Java Virtual Machine JVM tarafindan isletilir Bu asama her bir bytecode komutunun teker teker yorumlanmasi ile icra edilebilecegi gibi aninda derleme JIT kullanilarak da gerceklestirilebilir Bazi kavramlarNesneye yonelik yazilimlama mantigi Aninda Derleme Java ilk ciktiginda bytecode isletme hizi cok iyi degildi Yerine gore sistemin oz yazilimlarindan 5 10 kat yavas calisiyordu Bu nedenle bazi yazilim gelistirme sirketleri JIT yani Just in time compilation aninda derleme araclari uretmeye basladilar Yapilan sey bytecode u sanal makinenin kurulu oldugu gercek sistemin diline aninda derleme yaparak donusturmesiydi Bu sayede verimde ciddi artislar saglandi Ama 2000 yilindan sonra gelistirilen sanal makinelerde HotSpot gibi JIT in islevi VM icinde yer almaya baslamis islemci hizi ve bellek miktarinin dramatik bicimde artmasi ile dis JIT yazilimlari populerligini kaybetmistir Bugun halen birkac urun Excelsior JET gibi pazarda bulunsa da genellikle bu yondeki ihtiyac azalmistir Java API Java API Java yazilimlarinda kullanilan yazilim kutuphanelerine genel olarak verilen isimdir Java API ile disk grafik ag veri tabani guvenlik gibi yuzlerce konuda kullanicilara erisim imkani sunulur Java API J2SDK nin bir parcasidir Atik Veri Toplayici Atik veri toplama teknolojisi Garbage Collection Java dan once de var olan ama Java ile adini duyurmus ve yaygin olarak kullanilmaya baslanmis bir kavramdir C C gibi dillerin en buyuk engellerinden birisi dinamik bellek yonetimidir Yazilimda gosterici isaretci pointer kullanarak dinamik olarak bellek ayirdiktan sonra o bellek ile isiniz bittiginde mutlaka ayrilan bellegi bellek yoneticiye ozel alt yordamlar yardimiyla delete free iade etmeniz gerekir Yoksa bellek sizintisi memory leak olusur ve bu bir sure sonra yazilimin ve isletim sisteminin beklenenden farkli davranmasina yol acabilir Sizintilarin saptanmasi oldukca guctur ve bulunmasi zor hatalara yol acar Bu nedenle bugunun tum buyuk C ve C yazilimlari az da olsa bellek sizintisi icerir isletim sistemleri dahil Atik veri toplayici sayesinde Java da bir nesne olusturulduktan sonra o nesne ile isiniz bittiginde hicbir sey yapmaniz gerekmez Sanal makine akilli bir bicimde kullanilmayan bellek bolumlerini belirli araliklarla ya da uyarlamali yontemlerle otomatik olarak temizler ve sisteme iade eder Bu isleme cop toplama atik toplama garbage collection adi verilir Cop toplama sistemlerinin yapisi oldukca karmasiktir ve gecen yillar icinde buyuk gelismeler kaydedilmistir Cop toplayicinin varligi Java da bellek sizintisi olmayacagi anlamina gelmez ama bellek sizintilari daha ender olarak ve farkli sekillerde karsiniza cikar ve genellikle tedavi edilmesi daha kolaydir Jar Jar Java Arsivi Java Archive aslinda bir tur sikistirma formatidir Jar ile derlenen Java kodlari ile olusan yazilimin paketlenip tasinmasi kolay bir hale getirilir Jar dosyalari temelde bytecode bloklari icerir Jar dosyalari genellikle kutuphane olusturmada ya da uygun bicimde hazirlanirsa isletim sisteminden dogrudan calistirilabilecek bir sekilde kullanilabilir calistirilabilir jar executable jar Jar dosyalarinin icerigini sikistirma yazilimlari ya da Java yazilim gelistirme araclari ile inceleyebilirsiniz Java 1 5 ile yeni bir tur jar olusturma metodu da kullanima girdi Pack200 adi verilen hiper sikistirma hyper compression algoritmasi ile jar dosyalari daha kucuk boyutlara indirgenebiliyor Ancak bu teknoloji daha cok ag uzerinden yapilan transferlerde kullaniliyor Daha fazla ayrinti icin buraya bakiniz 24 Ocak 2012 tarihinde Wayback Machine sitesinde AWT ve Swing AWT ilk Java ile birlikte gelistirilen temel grafik arayuz olusturma kutuphanesine verilen isimdir AWT isletim sisteminin dogal grafik yapilarina erisimi saglar Ancak Java 2 platformu ile birlikte AWT yetersiz gorulmus ve cok daha genis ve gelismis ozelliklere sahip Swing kutuphanesi sisteme eklenmistir Ozellikle cok platform destekleyen yazilimlarda kullanici arayuzu gelistirme araci olarak swing halen onemini korumaktadir Swing onceleri isletim sisteminin kullandigi donanim grafik hizlandirma araclarini kullanmadigindan yavasligi ile elestirilere hedef olmustu Ozellikle Java 1 4 ile Swing hem genel olarak sanal makinenin hizlanmasi ve kismen donanim hizlandirmayi kullanmasi ile bu kotu sohretinden siyrilmaya basladi AWT halen Swing in bir alt katmaninda temel iki boyutlu grafik islemlerinde kullanilmaya devam ediyor SWT SWT Swing e bir alternatif olarak IBM tarafindan gelistirilen bir gosterim sistemidir Swing den en buyuk farki calistigi isletim sisteminin grafik kutuphanesi ve komutlarini kullanmasidir Bu nedenle SWT uygulamalari Swing e gore cogu yerde daha hizli ve isletim sistemindeki diger uygulamalari andiran bir sekilde calismasini saglar Swing in Java 1 5 ile performans acigini kapattigi iddia edilse de SWT nin de artik Java camiasinda kabul gormus bir sistem oldugu aciktir SWT nin dezavantaji ise Java nin bir parcasi olmamasidir Yani SWT uygulamalari SWT kutuphanesi ile birlikte dagitilmaktadir Ayrica SWT farkli isletim sistemlerinde farkli olgunluk ve performansta islemektedir ve ozellikle Windows disi sistemlerde henuz yeterince olgunlasamamistir En bilinen SWT uygulamalari unlu Java yazilim gelistirme araci IDE Eclipse ve BitTorrent uygulamasi Azureus tur HotSpot Teknolojisi Sun Microsystems tarafindan gelistirilen Java sanal makinesi HotSpot adi verilen ozel bir teknolojiyi icinde barindirir HotSpot yani sicak nokta bir yazilimda surekli olarak tekrarlanan ve uzerinden gecilen kod bolumlerine verilen bir isimdir HotSpot sanal makinesi su anda iki ayri modda sanal makinenin calismasini saglamaktadir Istemci Client ve Sunucu Server modlari Istemci modunda bytecode buyuk olcude daha baslangicta JIT ile sistemin oz makine koduna donusturulerek isletilir ama calisma aninda daha fazla iyilestirme islemi gerceklestirilmez Bir uygulamanin hizi istemci modunda zaman icinde bu nedenle degismez Sunucu modunda ise sanal makine baslangicta bytecode unu sistemin oz koduna donusturmekte acele etmez Bu nedenle sunucu modu baslangicta istemci modundan oldukca yavastir Yazilim calismaya devam ettikce sanal makine yazilimdaki sicak noktalari tespit edip bytecode u sadece JIT ile makine koduna donusturmekle kalmaz ayrica oldukca yogun bir iyilestirmeye de tabi tutar Sonucta sunucu modunda uygulamalar zaman icinde hizlanir uzun soluklu uygulamalarin bu nedenle sunucu modunda isletilmesi onerilir Mustang kod adli Java SE 6 da istemci modunda da benzeri bir teknolojinin kullanilmasi bekleniyor Dolphin kod adli Java SE 7 de ise bu iki mod arasindaki fark azalacagindan sistemin tek modda calismasi bekleniyor Uygulamacik Uygulamacik applet 12 Nisan 2011 tarihinde Wayback Machine sitesinde arsivlendi uzaktaki sistem uzerinden indirilip internet tarayici uzerinde calistirilabilen Java uygulamalarina verilen isimdir Java nin son kullanicilar tarafindan taninmasi uygulamacik sayesinde olmustur dersek yanlis olmaz Uygulamaciklar sisteme zarar veremeyecek bir sekilde tasarlanmistir Icerisinde uygulamacik olan bir sayfayi acmaya calistiginizda tarayiciniz otomatik olarak Java sanal makinesini calistirip ekranin uygulamaciga ayrilan bolumunde uygulamanin calismasini saglar Fakat son yillarda bircok Java programcisi Uygulamaciklar uzerinden gozunu cekmistir Artik HTML CSS ve JavaScript sayesinde cok daha hizli pratik guvenli ve kusursuz uygulamalar web hizmetleri yapilabiliyor olmasi bunun en onemli sebebidir WebStart WebStart teknolojisi uygulama kurulum guncelleme ve silme dertlerine deva olmak uzere tasarlanmis bir sistemdir WebStart teknolojisi kisaca yazilimlarin uzaktan yerel sisteme guvenli olarak kurulmasini ve korumali bir alanda calistirilmasini saglar Applet lerin bir sonraki adimi olarak gorulebilir Bir WebStart uygulamasini kurmak icin internet uzerindeki ozel bir baglantiya tiklamak yeterlidir Sistem otomatik olarak WebStart sistemini calistirip yazilimi Java cep bellegine indirir Istenirse masaustune kisayol koymasini da saglar Daha sonra sistem cevrimici online ya da cevrimdisi offline olarak calistirilabilir ve uzaktaki yazilim guncellendiginde otomatik olarak istenirse yerel makinedeki yazilimin da guncellenmesi saglanabilir Kullanicinin ozel olarak izin vermesi halinde uygulama yerel sisteme erisim hakki kazanabilir Aksi takdirde WebStart uygulamalari sisteme yazma islemi gerceklestiremezler Bu Java teknolojisi de gunumuzdeki programcilarin takibinde degildir Java yazimi Sozdizimi Sinif temelli nesneye yonelik bir dil olan Java yazim olarak C ile benzerlikler arz eder Java nin yaninda C Perl JavaScript gibi diller de ayni dil ailesine aittir seklinde suslu parantezler icerisindeki bloklar arttirma ve azaltma islecleri bu dilin belirgin ozelliklerindendir Merhaba Dunya MerhabaDunya java public class MerhabaDunya public static void main String args System out println Merhaba Dunya MerhabaDunya java ile public class MerhabaDunya bu kisimda iki isim ayni olmalidir aksi takdirde uygulama calistirilamaz class Sinif tanimlayabilmek icin class on eki sarttir public Sinifin disaridan erisebilir oldugu static Sinif tarafindan paylasildigi void Bir deger dondurmedigi anlamina gelir Public ve Static e erisim belirleyicisi access specifier de denir Void e donus tipi return type de denir String args Parantezin icinde yontemin aldigi parametreleri belirleriz String sinif adi args da parametre adidir ise args in bir dizi array oldugunu belirtiyor System out println ile yazimizi yazdiriyoruz ve yeni satira gecmesini sagliyoruz Yazimizi System out print Merhaba Dunya ile de yazdirabilirdik Fakat imlec yeni satira gecmezdi Java Turkce karakterleri C gibi degisken adlarinda sinif adlarinda da kullanmamiza imkan tanir Java da yazdigimiz yazilimlari derlememiz icin oncelikle sinif adi ile ayni adi tasiyan dosya ismine sahip olmamiz gerekmektedir Yukaridaki ornek yazilimi sinif ismi olan MerhabaDunya ifadesini kullanip uzantisi ile beraber MerhabaDunya java ismi ile kaydedebiliriz J2SDK veya benzer bir Java gelistirme ortami kurulu sistemimizde yazilan uygulama asagidaki sekilde derlenebilir javac encoding UTF 8 MerhabaDunya java javac yazilan programi derleyerek class uzantili bir dosya uretir class sinif dosyalari JVM de calisabilecek bytecode lar iceren sinif dosyalaridir Ornek uygulamayi calistirmak icin java MerhabaDunya yazabiliriz Java komutu oncelikle sinif yolunda Bkz MerhabaDunya sinifini arayacaktir Buldugu takdirde MerhabaDunya sinifinda main metodunu arayacaktir Eger metot bulunur ise bu metot icra edilecektir Kapsamli ornek package TekCift import javax swing JOptionPane public class TekCift Tam sayi int ingilizce de integer in kisaltmasidir private int kullanicininGirdigi Bu yapici fonksiyondur TekCift objesi yaratilirken cagrilir public TekCift Asagidaki ana fonksiyondur Java yorumlayicisi programi calistirmak icin ilk bu fonksiyonu cagirir param argumanlar Komut satiri argumanlari kullanilmiyor public static void main final String argumanlar TekCift obje new TekCift obje pencereGoster Asagidaki fonksiyon Sayi giriniz diyalogunu gosterir public void pencereGoster try kullanicininGirdigi Integer parseInt JOptionPane showInputDialog Lutfen bir sayi giriniz hesapla catch final NumberFormatException e System err println HATA Gecersiz bir deger girdiniz Lutfen sayisal bir deger giriniz Asagidaki fonksiyon kullanicinin girdigi degere gore cift ya da tek penceresi gosterir private void hesapla if kullanicininGirdigi 2 0 JOptionPane showMessageDialog null Cift else JOptionPane showMessageDialog null Tek package anahtar kelimesi dosyanin basinda paket belirtmek icin kullanilir kullanici arayuzu gosterebilmek icin javax swing JOptionPane kutuphanesine ihtiyacimiz var Dosyanin basindaki import cumlesi tam bu ise yarar TekCift sinifi kullanicinin girdigi bir tam sayiyi hafizasinda tutmak icin kullanicinin girdigi degiskenini tanimliyor Diger siniflarin bu degiskeni gormemesi icin private ozel anahtar kelimesini kullaniliyoruz DokumantasyonSun Microsystems tarafindan gelistirilen Javadoc Java kodlarinin HTML formatinda dokumantasyonun olusturulmasi icin kullanilan kapsamli bir sistemdir Ilgili MakalelerAspectJ JavaOSKaynakca About the Java Technology The Java Tutorials gt Getting Started gt The Java Technology Phenomenon docs oracle com 15 Aralik 2016 tarihinde kaynagindan Erisim tarihi 1 Ocak 2023 Arsivlenmis kopya 29 Mart 2017 tarihinde kaynagindan Erisim tarihi 14 Subat 2017 Arsivlenmis kopya 23 Ocak 2013 tarihinde kaynagindan Erisim tarihi 14 Subat 2017 Arsivlenmis kopya 15 Subat 2017 tarihinde kaynagindan Erisim tarihi 14 Subat 2017 26 Mart 2015 tarihinde kaynagindan arsivlendi Erisim tarihi 14 Subat 2017 16 Ocak 2009 tarihinde kaynagindan arsivlendi Erisim tarihi 14 Subat 2017 26 Aralik 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 14 Subat 2017 The Java Community Process SM Program JSRs Java Specification Requests detail JSR 395 www jcp org 2 Ocak 2023 tarihinde kaynagindan Erisim tarihi 2 Ocak 2023 The Java Community Process SM Program JSRs Java Specification Requests detail JSR 396 www jcp org 8 Aralik 2022 tarihinde kaynagindan Erisim tarihi 2 Ocak 2023 Arsivlenmis kopya 10 Aralik 2019 tarihinde kaynagindan Erisim tarihi 3 Mayis 2020 Arsivlenmis kopya 10 Haziran 2019 tarihinde kaynagindan Erisim tarihi 3 Mayis 2020 Dis baglantilarhttp www java com 16 Aralik 2019 tarihinde Wayback Machine sitesinde Son Kullanicilar icin http www oracle com technetwork java Gelistiriciler icin