Java | ||
İlk sürüm tarihi | 1995 | |
---|---|---|
paradigma | Nesne yönelimli , yapılandırılmış , zorunlu , işlevsel | |
Yazar | Güneş Mikrosistemleri | |
geliştiriciler | Oracle Şirketi | |
Son sürüm | Java SE 16.0.1 (20 Nisan 2021) | |
Yazıyor | Statik , güçlü , güvenli , yalın | |
Tarafından etkilenmiş | Objective-C , C++ , Smalltalk , Eiffel , Ada 83 , Mesa , Modula-3 , Oberon , UCSD Pascal | |
Etkilenen | C# , J# , Ada 2005 , Gambas , BeanShell , Clojure , ECMAScript , Groovy , JavaScript , PHP , Kotlin , Python , Scala , Seed7 , Vala , İşleme | |
Uygulamalar | JVM Listesi | |
İşletim sistemi | Çoklu platform | |
Lisans | GNU GPLV2 + CPE | |
İnternet sitesi | www.oracle.com/java/technologies | |
Dosya uzantısı | java, sınıf, kavanoz, jad ve jmod | |
Java bir olan nesne yönelimli programlama dili tarafından oluşturulan James Gosling ve Patrick Naughton , çalışanları Sun Microsystems desteğiyle, Bill Joy (kurucularından Sun Microsystems in 1982 ), resmi olarak sunulan23 Mayıs 1995En Sunworld .
Sun şirketi daha sonra 2009'da şu anda Java'nın sahibi ve yöneticisi olan Oracle şirketi tarafından satın alındı .
Java'nın bir özelliği, bu dilde yazılmış yazılımın , işletim sistemine bakılmaksızın bir Java Sanal Makinesinde (JVM) yürütülebilen bir ara ikili gösterime derlenmesidir .
Java dili büyük ölçüde C++ dilinin sözdizimini devralır . Bununla birlikte, Java en ince kavramların soyulmuş C ++ ve hem en gibi kafa karıştırıcı işaretçiler ve referansları veya çoklu kalıtım yoluyla baypas uygulaması arasında arayüzleri . Benzer şekilde, sürüm 8'den beri, işlevsel arayüzlerin gelişi, elmas kalıtım gibi avantajları ve dezavantajları ile çoklu kalıtımı (özniteliklerin yönetimi olmadan) sunar . Tasarımcılar nesne yönelimli yaklaşımı tercih ettiler, böylece Java'da ilkel türler ( tamsayılar , kayan nokta sayıları, vb.) dışında her şey nesnedir , ancak bunların varyantları Object nesnesinden devralan (Integer, Float, ...).
Java, istemci-sunucu uygulamaları geliştirmenize olanak tanır . İstemci tarafında, uygulamalar dilin kötü şöhretinin kaynağındadır. Bu Java sayesinde iş dünyasında kendini empoze ettiğini özellikle sunucu tarafında servlet küçük uygulamalarla sunucu tarafında ve daha yakın JSP ( Java Server Pages ) değiştirin hangi PHP , ASP ve ASP.NET .
Java, bir işletim sistemi ( JavaOS ), geliştirme ortamları ( eclipse / JDK ), sanal makineler ( MSJVM (en) , JRE ), çapraz platform uygulaması ( JVM ), mobil cihazlar için bir varyasyon/gömülü ( J2ME ), grafiksel bir sistem doğurdu. arayüz tasarım kitaplığı ( AWT / Swing ), ağır uygulamalar (Jude, Oracle SQL Worksheet, vb.), web teknolojileri (servletler, appletler) ve şirket için bir varyasyon ( J2EE ). Taşınabilirlik Java baytkod tarafından sağlanmaktadır Java sanal bir JRE dahil standart kütüphaneler tarafından muhtemelen makinesi ve. Bu sanal makine , bayt kodunu yorumlayabilir veya anında makine diline derleyebilir . Taşınabilirlik, her işletim sistemindeki JVM'lerin taşınabilirliğine bağlıdır.
Java dili 1990'dan kalma bir Sun Microsystems projesinden geliyor: mühendis Patrick Naughton, Sun'da kullanılan C++ dilinden , C dilindeki programlama arayüzlerinden ve ilgili araçlardan memnun değildi . NeXT'ye geçiş düşünülürken kendisine yeni bir teknoloji üzerinde çalışma fırsatı sunuldu ve böylece Stealth Project ( stealth ) doğdu.
Gizli Projesi hızla değiştirildi Yeşil Projesi James Gosling ve Mike Sheridan gelmesiyle birlikte. Birlikte, diğer mühendislerin yardımıyla, Menlo Park , California'daki Sand Hill Caddesi'ndeki bir ofiste çalışmaya başladılar . Sun'a benzersiz fırsatlar sunan yeni nesil uygulamaların geliştirilmesi için teknoloji geliştirmeye çalıştılar.
Ekip başlangıçta C++ dilini kullanmayı planladı, ancak farklı nedenlerle onu terk etti. Her şeyden önce, sınırlı kaynaklara sahip gömülü bir sistem üzerinde geliştiriyorlardı ve C++ kullanmanın çok fazla yatırım gerektirdiğini ve bu karmaşıklığın geliştiriciler için bir hata kaynağı olduğunu hissettiler. Eksikliği çöp toplama o bellek yönetimi, elle bir meydan okuma değil, aynı zamanda hataların kaynağı programlanabilir anlamına geliyordu.
Ekip ayrıca güvenlik, dağıtılmış programlama ve çoklu iş parçacığı açısından C++ dilinin eksikliklerinden de memnun değildi . Ek olarak, her tür cihaza veya platforma taşınabilecek bir platform istediler.
Bill Joy, en iyi programlama dili Mesa (in) ve C dilini birleştiren yeni bir dil öngörmüştü . İleri ( Daha Fazla ) adlı bir makalede , Sun'a mühendislerinin C++ tabanlı nesne yönelimli bir ortam geliştirmelerini önerdi. Ama fikir yakında adında yeni bir programlama dilinin gelişmesi lehine terk edildi - Başlangıçta, Gosling değiştirmek ve o C ++ ++ denilen C ++ dilini geliştirmek için planlanan Meşe. (Meşe) , referans efsaneye göre, ofis penceresinin önüne dikilmiş bir ağaca .
Ekip çok çalıştı ve 1992 yazında Yeşil işletim sistemini içeren bir platformu gösterebildiler , Oak dili (1992), kütüphaneler ve donanım. İlk başarıları,3 Eylül 1992Bir inşaat olarak PDA adlandırılan STAR7 bir grafik arayüz ve adı verilen bir akıllı maddeye sahip olan Duke yardımcı olmak.
Aynı yılın Kasım ayında, Yeşil Proje tamamen Sun Microsystems'e ait olan FirstPerson, Inc olmak üzere durduruldu ve ekip Palo Alto'ya taşındı. FirstPerson ekibi , yüksek düzeyde etkileşimli araçlar oluşturmakla ilgilendi ve Time Warner çok işlevli bir kod çözücü için bir ihale çağrısı yaptığında, FirstPerson odak noktasını böyle bir platform sunmaya değiştirdi.
Ancak kablolu televizyon endüstrisi, kullanıcı için çok fazla seçenek sunduğunu gördü ve FirstPerson, pazarını Silicon Graphics'e kaptırdı . Görsel-işitsel endüstrinin ilgisini çekemeyen şirket, Sun bünyesinde eski durumuna getirildi.
Haziran Temmuz 1994, John Gage, James Gosling, Joy, Naughton, Wayne Rosing ve Eric Schmidt ile üç gün süren beyin fırtınasının ardından ekip, web üzerindeki platforma yeniden odaklandı . Mozaik tarayıcının ortaya çıkmasıyla birlikte, İnternet'in kablo endüstrisi için öngördükleri aynı tür etkileşimli aracı geliştirme yeri olduğuna inanıyorlardı . Naughton bir prototip olarak sonradan oldu küçük bir web tarayıcısı, webrunner geliştirdi HotJava .
Aynı yıl, Oak adının bir video kartı üreticisi tarafından zaten kullanıldığının keşfedilmesiyle dilin adı Java olarak değiştirildi .
Java adının kökeni"Java" adı bir kısaltma değildir , beyin fırtınası sırasında orijinal adı "Oak" yerine, mevcut bir markayla çakışması nedeniyle seçilmiştir, çünkü kahve ( Amerikan argosunda "java" ) birçok programcının favori içeceğidir. . Sun'ın seçtiği logo da dumanı tüten bir kahve.
Java'nın halka açık lansmanıİçinde Ekim 1994, HotJava ve Java platformu Sun Yöneticilerine sunuldu . Java 1.0a 1994'te indirilebilirdi, ancak HotJava tarayıcısının ilk genel sürümü piyasaya çıktı.23 Mayıs 1995SunWorld konferansında .
Duyuru, Sun Microsystems Bilimsel Direktörü John Gage tarafından yapıldı. Duyurusuna, Netscape yöneticisinin başkan yardımcısı Marc Andressen'in, Netscape'in tarayıcılarına Java desteği ekleyeceğine dair sürpriz duyurusu eşlik etti. 9 Ocak 1996Javasoft grubu, bu teknolojiyi geliştirmek için Sun Microsystems tarafından kuruldu. İki hafta sonra Java'nın ilk sürümü mevcuttu.
Dilin 1.2 sürümünün ortaya çıkması önemli bir dönüm noktasına işaret ediyor: 2000 yılında sürüm aynı anda iki Java platformunda ortaya çıktı:
Sun daha sonra onları ilk nesil 1.0 ve 1.1'in aksine bir Java 2 platformu olarak nitelendiriyor. J2EE 1.2'den Java SE veya Java EE 7'ye kadar sonraki tüm sürümler, '2' resmi olarak durdurulmasına rağmen, Java 2 platformları olarak anılmaya devam ediyor.
uygulamalar
Tarihsel olarak, Web tarayıcılarının Java uygulamalarını başlatma yeteneği, zengin istemci uygulamalarını ( zengin İnternet uygulaması için RIA) görüntülemek için tek çözümdü . Ardından , XAML veya Xul tabanlı Macromedia Flash , DHTML JavaScript , Silverlight gibi rakip teknolojiler ortaya çıktı .
İstemci iş istasyonundaki applet'ler iletişim kurabilir servlet JavaScript vasıtasıyla Server ile iletişim kurabilir, tıpkı Server AJAX . Flex , Adobe Flash Player aracılığıyla Flash teknolojisini kullanır .
JavaScript'in tarayıcılar arası uyumluluk sorunlarından muzdarip olduğu bir çağda , Java uygulamaları taşınabilirlik avantajına sahipti çünkü karmaşık arayüzleri taşımak piyasadaki tüm tarayıcılar için zordu.
Java "modası"nın olumsuz etkilerine ek olarak, Java ile rekabet eden teknolojilerde kaydedilen ilerleme, çoğu geliştiricinin Java uygulamalarından ve bu teknolojinin doğasında bulunan sorunlardan (JVM'ler arasındaki uyumsuzluklar, düşük performans, zayıf kitaplıklar. grafikler, karmaşıklık) uzaklaşmasına neden oldu. ). Son olarak, modern tarayıcılar büyük boyutu nedeniyle artık sistematik olarak Java ortamını içermiyor ve uygulamaları görüntüleyebilen makinelerin oranı 2010'da yalnızca %70 idi, örneğin Flash'tan çok daha düşük. 2010 yılında neredeyse tüm zengin istemci uygulamaları alternatif teknolojiler kullandı; Çoğunlukla Flash, aynı zamanda GWT .
Son olarak, birçok RIA ve multimedya özelliğini yerleştirmeyi amaçlayan HTML5'in gelişi, uygulamaları da gereksiz kılıyor.
JavaFX
Java 8'in ortaya çıkmasıyla Mart 2014, JavaFX , her türlü uygulama (mobil uygulamalar, masaüstü uygulamaları, Web uygulamaları, vb.) için resmi Java GUI araç seti oluşturma aracı haline gelir, selefi Swing'in geliştirilmesi durdurulur (hata düzeltmeleri hariç). JavaFX saf bir Java API'sidir (bir süre onunla ilişkilendirilen belirli komut dosyası dili artık terk edilmiştir). JavaFX, ses ve video medyası, 2B ve 3B grafikler, web programlama, paralel programlama ve daha fazlasını içeren çok çeşitli araçlar içerir .
sunucu tarafıİle uygulama sunucusu , EJB'ler kullanılmakta ve daha önce tanımlandığı sınıfları kapsüllemek için. Bu elemanlar, çok katmanlı uygulamalar için J2EE mimarilerinde kullanılır . Bu çalışmadan elde ettiğimiz avantaj, kodun sunucu tarafında uygulanmasını istemciden gizleyebilmektir.
iş istasyonu kullanımıJava dilinin bir iş istasyonundaki uygulamalar için yerel kullanımı, hız eksikliği nedeniyle şimdiye kadar nispeten nadirdi. Ancak bilgisayarların gücünün hızla artması, 2000'li yıllarda Java sanal makinesinde ve derleyicilerin kalitesinde yaşanan gelişmelerle birlikte NetBeans ve Eclipse ortamı , paylaşımlı dosya teknolojileri LimeWire , Vuze (eski Azureus) ve I2P . Java ayrıca MATLAB matematik programında , insan makine arayüzü düzeyinde ve bilgisayar cebiri için kullanılır. Swing uygulamaları da .NET teknolojisine alternatif olarak ortaya çıkıyor.
Cep telefonları ile kullanınOracle başladığını duyurduekim 2012JavaOne konferansında, genellikle PC'lerde bulunanlardan daha az güçlü işlemciler için gömülü yazılım alanı için Java çözümleri sunma arzusunu dile getirdi. Oracle, MicroEJ yayıncısı ve hatta çekirdeği CortexM3 / M4 olan STM32'lerinde Java sunan STMicroelectronics gibi bu pazar segmentlerinde uzmanlaşmış tüm bir şirketler ekosistemini bir araya getiriyor .
Java, özellikle Eclipse ve NetBeans aracılığıyla , mobil cihazlar için zaten entegre geliştirme ortamları sunuyor. Java, Google'ın Mobil için ücretsiz işletim sistemi : Android için uygulamalar geliştirmek için kullanılan ana dildir .
JavaFX , birincil amacı bu olmasa da, Java'nın cep telefonlarında kullanımını da etkinleştirebilir.
Windows işletim sistemi, Mac OS X ve GNU/LinuxMicrosoft , Windows XP'nin piyasaya sürülmesinden önce 2001'de işletim sistemleriyle birlikte J ++ adlı Java tipi bir çalışma ortamı sağladı . Mahkeme kararının ardından ve bu dilin özelliklerine uyulmaması nedeniyle, Microsoft bunu terk etmek ve C# adlı yeni bir dil oluşturmak zorunda kaldı (bkz. " Platform karşısında bağımsızlık " bölümü daha düşük)
Birçok bilgisayar üreticisi, Windows sistemlerine bir JRE ortamı eklemeye devam ediyor.
Java ayrıca Apple'ın Mac OS X'inde ve Linux dağıtımlarında bir standart olarak görünür . Bu nedenle, günümüzde çoğu kullanıcı Java uygulamalarını sorunsuz bir şekilde başlatabilir. Ancak Apple bilgisayarlarında Java 5'in Java 6'ya dağıtımı Oracle tarafından değil, doğrudan Apple tarafından gerçekleştiriliyordu. Bu politika gecikmelere ve sürüm kısıtlamalarına neden oldu:
Bu nedenle, J2SE 1.4, Mac OS X v10.2'den (kod adı Jaguar ), Mac OS X v10.4'ten ( Tiger ) J2SE 5.0'dan önce mevcut değildi , Java SE 6 yalnızca bir Mac OS X v10.5 ( Leopard ) ile donatılmış olarak çalışır. Intel işlemci ve Java 7, Mac OS X v10.7 .3 ( Aslan ) çalıştıran bir Mac Intel bilgisayar gerektirir .Açık kaynak lisanslama11 Kasım 2006, javac derleyicisinin kaynak kodu ve HotSpot sanal makinesi , GNU Genel Kamu Lisansı altında Açık Kaynak olarak yayınlandı .
13 Kasım 2006, Sun Microsystems Java'nın geçişini, yani JDK (JRE ve geliştirme araçları) ve Java EE (zaten CDDL lisansı altında) ve Java ME ortamlarını GPL lisansı altında buradan duyurur .Mart 2007, OpenJDK proje adı altında .
İçinde Mayıs 2007, Sun, OpenJDK'yı ücretsiz bir lisans altında yayınlar. Ancak OpenJDK, Sun'ın sahip olmadığı özgür olmayan kod parçalarına bağlıdır. Redhat şirketi bu yüzden piyasaya çıkıyor.haziran 2007özgür olmayan kod parçalarını değiştirmeyi ve böylece OpenJDK'yı herhangi bir özel yazılım olmadan kullanılabilir hale getirmeyi amaçlayan IcedTea (in) projesi . İçindehaziran 2008, IcedTea projesi zorlu Java uyumluluk testlerinden (TCK) geçmiştir. Bu nedenle IcedTea, Java özelliklerinin açık kaynaklı bir uygulamasıdır. Sun, ardından Oracle, Java'ya uygulanan bir patent kataloğu ve TCK'yı tescilli bir lisans altında tutarak teknolojinin kontrolünü elinde tutar.
Oracle tarafından satın almaOracle şirketi 2009 yılında Sun Microsystems şirketini satın aldı . Artık Java API belgelerinde Oracle logosunun göründüğünü görebiliriz.
12 Nisan 2010, Java programlama dilinin yaratıcısı James Gosling , açıklamak istemediği nedenlerle Oracle'dan istifa ediyor. Oracle için istemci yazılım bölümünün CTO'su olmuştu.
2018'de Oracle, profesyonel kullanım için Java SE 8 sürümünde yapılan güncellemelerin şu adresten ücretli bir lisansa tabi olacağını duyurdu .ocak 2019.
Java dili, standart kitaplığa birçok sınıf ve paketin eklenmesiyle JDK 1.0'dan ( Java Geliştirme Kiti ) beri çeşitli gelişmelerden geçmiştir . J2SE1.4'ten beri, Java'nın evrimi , Java platformunda eklemeler ve değişiklikler önermek için JSR'yi ( Java Spesifikasyon İstekleri ) kullanan JCP ( Java Community Process ) tarafından yönetilmektedir . Dilin kendisi Java Dil Belirtimi (JLS ) tarafından belirlenir ve JLS'deki değişiklikler JSR kodu 901 altında işlenir.
Dilin ardışık evrimlerinin sözdizimi ile pek ilgili olmadığı - başlangıçtan beri nispeten istikrarlı - ancak esas olarak, birçok alanda yazılım kitaplıklarının ( API ) başlatılması ve optimizasyonu ile işlevlerinin zenginleştirilmesine bağlı olduğuna dikkat edilmelidir . : veri tabanları, XML yönetimi, dağıtılmış ve web bilişim, multimedya, güvenlik vb.
Sürüm numaralandırmaJava dilinin sürümünü, platformların ve JRE'nin sürümlerinden ayırt etmeliyiz:
Bazen 8u65 ve 8u66 gibi iki sürüm aynı anda sunulabilir: fark genellikle küçük hata düzeltmelerinden oluşur (özellikle güvenlik etkisi olmadan), bunlar için en son sürüme güncelleme kritik değildir ve bu nedenle yöneticilerin seçimine bırakılır (JRE) veya geliştiriciler (JDK).
Java'nın genel sürümlerini, ticari kullanım için ayrılmış, Gelişmiş adlı genel olmayan sürümler takip edebilir; bu nedenle Java 1.6u45, Java6'nın son genel sürümüdür, ancak 6u113 mevcut son sürümdürMart 2016.
Sürüm | Son sürüm | İsim JSE / JRE | Kod adı | Özellikler | JDK | Durum ekim 2018 | Bakım periyodu | Genişletilmiş destek |
---|---|---|---|---|---|---|---|---|
1.0 | 1.0.2 | Java 1.0 | Meşe | 52 | JDK 1.0.2 | Artık aktif olarak desteklenmiyor | 1996-2000 | |
1.1 | 8_16 | Java 1.1 | 52 | 1.1.8_16 | Artık aktif olarak desteklenmiyor | 1997-2000 | ||
1.2 | 2_017 | J2SE 1.2 | Oyun alanı | 52 | 1.2.2_11 | Artık aktif olarak desteklenmiyor | 2000-2006 | |
1.3 | 1_29 | J2SE 1.3 | Kerkenez | 58 | 1.3.1_29 | Eski | 2000-2001 | |
1.4 | 2_30 | J2SE 1.4 | merlin | JSR 59 | 1.4.2_30 | Eski | 2000-2008 | |
1.5 | 0_22 ila 0_85 | J2SE 5.0 | Kaplan | JSR 176 | 1.5.0_22 | Kullanımdan kaldırıldı, 5u51 - 5u85 arası yalnızca belirli Oracle desteğiyle kullanılabilir | 2002-2009 | Mayıs 2015 |
1.6 | 0_45 ila 0_111 | Java SE6 | Mustang | JSR 270 | 6u113 | Kullanımdan kaldırıldı, 6u51 - 6u111 arası yalnızca belirli Oracle desteğiyle kullanılabilir | 2005-2013 | Aralık 2018 |
1.7 | 0_79 - 0_80 | Java SE7 | Yunus | JSR 336 | 1.7.0_79 | Kararlı, sürüm 1.7.0_79 | 2011- 2015 | Temmuz 2022 |
1.8 | 0_171 | Java SE 8 | Kenai sonra Örümcek | JSR 337 | 1.8.0_171 | Kararlı, 1.8.0_171 sürümü kullanıcılara sunuldu | 2014-Eylül2018 | Temmuz 2019 |
9 | 9.0.4 | Java SE 9 | Şemsiye | 379 | 9.0.4 | Kararlı | 2018-? | |
10 | 10.0.1 | Java SE 10 | 383 | 10.0.1 | JDK Java11-LTS'nin bir sonraki sürümünden 6 ay önce desteklenir | 2018, LTS sürümü değil (uzun vadeli destek) | ||
11 | 11.0.1 | Java SE 11 | 384 | 11.0.1 | LTS sürümü | 2023 | 2026 | |
12 | 12.0.2 | Java SE 12 | 386 | 12.0.2 | ||||
13 | Java SE 13 | 388 | 13.0 | |||||
14 | Java SE 14 | 389 | 14.0.1 |
Her sürüm için yalnızca en son sürüm numaraları burada listelenir. Sürüme ve güncellemeye göre ardışık değişikliklerin ayrıntıları wikipedia.en/java_history adresinde bulunabilir .
İçerik ve gelişmeler JDK 1.0'dan J2SE 1.4'eÇıkış tarihi 30 Eylül 2004(3,270 sınıf ve arabirim), kod adı Tiger'dır . Başlangıçta, her zaman dahili sürüm numarası olarak kullanılan 1.5 olarak numaralandırılır. Tarafından geliştirilen (in) JSR 176 , Tiger diline yeni özellikler önemli sayıda ekledi:
Bu örnek, Iterable sınıfının widgets nesnesinin içeriği boyunca yinelenir ve yalnızca Widget sınıfının nesnelerine referanslar içerir, bu öğelerin her birini w değişkenine atar ve ardından w öğesinde ( JSR'de belirtilen) display () yöntemini çağırır 201). Benzer bir sözdizimi 2011'de C++ 11'de tanıtılacaktır .
Dil değişikliklerine ek olarak, yıllar içinde JDK 1.0'daki birkaç yüz sınıftan J2SE 5.0'da 3.000'in üzerine çıkan daha önemli değişiklikler meydana geldi. Swing veya Java2D gibi tüm API'ler eklendi ve orijinal JDK 1.0'daki birçok yöntemin kullanımdan kaldırıldığı bildirildi (yani kullanımdan kaldırıldı, Java'nın sonraki bir sürümünde kaldırılabilirler).
Java SE6Çıkış tarihi 11 Aralık 2006(20'den fazla pakette 3.777 sınıf ve arabirim), kod adı Mustang'dir . Bir beta sürümü yayınlandı15 Şubat 2006, başka bir beta haziran 2006, bir " yayın adayı " versiyonuKasım 2006, ve son sürüm 12 Aralık 2006. Bu sürümle Sun, J2SE adını kalıcı olarak Java SE olarak değiştirir ve sürüm numarasından .0'ı kaldırır.
Bu sürüm, Oracle tarafından 1.6.0_45 sürümüne ve hatta Mac OS sürümü için 1.6.0_51 sürümüne yol açan çok sayıda güvenlik açığına ve bunların düzeltici güncellemelerine konu olmuştur. Bu aynı zamanda Mac OS X 10.6 ve önceki sürümler için çalışan son Java sürümüdür.
Java SE7Çıkış tarihi 7 Temmuz 2011(8000 sınıf ve arayüz), kod adı Dolphin'dir . Bu, GNU GPL lisansı altındaki ilk sürümdür .
Güncelleme 6'dan (7u6) itibaren, Java'nın Oracle standart sürümü yine Mac OS X'i tamamen destekler, bu işletim sistemi güncellemeleri artık Apple tarafından değil Oracle tarafından desteklenmektedir. Ancak, Java'nın bu sürümü Mac OS X v10.6 tarafından desteklenmiyor : Gerçekten de Java 7'nin gerektirdiği bazı API'ler Apple tarafından Mac OS X 10.7.3'e dahil edilmiştir, ancak bunların önceki sürümlerde uygulanması beklenmemektedir. Mac os işletim sistemi. 7u90 versiyonunisan 2015 Java 7'nin halka açık son güncellemesidir.
Java 7, diğerlerinin yanı sıra aşağıdaki yeni özellikleri sunar:
Kod adı Kenai. JDK'nın geliştirilmekte olan çeşitli sürümleri, 2013 sonbaharından itibaren indirilmeye hazırdır ve Java 8, yılın ortalarındaMart 2014Oracle tarafından sunulan bir yol haritasına göreMayıs 2013.
Bu sürümün en önemli yeni özelliklerinden biri , API'nin bir kısmının, özellikle koleksiyonların ve akış kavramının yeniden tasarlanmasına yol açan lambdaların eklenmesidir . Diğer dikkate değer eklemeler arasında seçenekler, bir arayüz içindeki varsayılan uygulamalar, tarih API'sinin yeniden tasarımı ve daha fazlası bulunur. Öte yandan Enterprise Edition sürümünün (Java 8 EE) 2017'den önce çıkması beklenmiyor.
JVM'nin başlangıçta bu sürüm için planlanan Jigsaw projesi ile modülerleştirilmesi, özellikle Oracle'ın 2013'te Java'daki gelişmelere göre düzeltilmesini tercih ettiği Java 6'nın karşılaştığı güvenlik açıkları nedeniyle sürüm 9'a ertelendi. .
Java SE 9Başlangıçta 2015 için planlanan ancak kısmen Jigsaw projesi nedeniyle ertelenen bu sürüm, sonunda yayınlandı. 21 Eylül 2017.
Java 9 şunları entegre eder:
Bu sürüm yayınlandı 20 Mart 2018.
Bu yeni sürüm özellikle şunları içerir:
Bu sürüm yayınlandı 25 Eylül 2018.
Uzun vadeli sürüm destek modelindeki değişikliğin ötesinde, bu sürüm özellikle şunları içerir:
Bu sürüm yayınlandı 19 Mart 2019.
Bu sürüm 8 evrimi birleştirir:
Bu sürüm yayınlandı 17 Eylül 2019.
Bu sürüm 17 Mart 2020'de yayınlandı
Bu sürüm 15 Eylül 2020'de yayınlandı.
Java SE 16Bu sürüm 16 Mart 2021'de yayınlandı.
Java dili oluşturulduğunda, bu dilin beş amacı karşılaması gerektiğine karar verildi:
Birinci özellik, nesne yönelimli ("OO") ve konuşma dili karakteri, dili programlama ve tasarlama yöntemine ve Java ile yazılmış bir programın C++ ile yazılmış bir programa oldukça benzer olduğu gerçeğine atıfta bulunur .
Nesne yönelimli ifadesinin birkaç yorumu olmasına rağmen , bu tür geliştirmedeki ana fikir, farklı veri türlerinin, bu veriler üzerinde gerçekleştirilebilecek farklı işlemlerle doğrudan ilişkilendirilmesi gerektiğidir. Sonuç olarak, veriler ( Özellikler olarak adlandırılır ) ve onu işleyen kod ( Yöntemler olarak adlandırılır ), Object Class adlı tek bir varlıkta birleştirilir . Kod, mantıksal olarak küçük tutarlı varlıklara bölünür ve bu nedenle, doğası gereği modüler olduğu için bakımı daha basit ve daha kolay yeniden kullanılabilir hale gelir.
Kalıtım gibi diğer mekanizmalar , daha önce kendi programlarında yazılmış bir Sınıfın tüm özelliklerinden, onun iç işleyişini bilmek zorunda kalmadan yararlanmayı mümkün kılar - kişi yalnızca arabirimi (burada açıklanan arabirimi) görür, ilgili özellikleri sağlamadan özellikler ve yöntemler. kodu). Java, arayüz olmadıkça birkaç üst sınıftan kalıtım kavramını yasaklar.
Versiyonda dilin 1.5 ilave edildi jenerik bir polimorfizm mekanizması benzer (ancak farklı) şablonlar arasında C ++ dil ya da functors için OCaml . Jenerikler, konteynerler (listeler, ağaçlar, vb.) gibi nesnelerin özelliklerini (yazma açısından) daha basit ve daha güvenli bir şekilde ifade etmeyi mümkün kılar: daha sonra liste tipi, d tipine kıyasla genel olarak kabul edilir. 'listede bulunan nesne.
Bu unsur, programların sağlamlığına ve performansına katkıda bulunur, programın yürütülmesi sırasında Çöp Toplayıcı düzenli ve otomatik olarak çağrılır. Açık çoklu işlemci ve / veya çok çekirdekli sistemler , bu da istihdam çok düşük öncelikli konuları mümkün olduğu kadar az program yürütme engellemek amacıyla. Ek olarak, programcı gerekirse çöp toplayıcıyı System.gc() yöntemini kullanarak çalıştırmayı önerebilir .
C ++ gibi dillere karşı yinelenen bir şikayet, bellek yönetimini manuel olarak programlamak zorunda kalmanın zahmetli bir görevidir. C++'da, program tarafından bir nesne oluşturmak için ayrılan bellek, yok edildiğinde (örneğin, silme operatörüne yapılan açık bir çağrıyla) yeniden tahsis edilir . Programcı ayırmayı kodlamayı unutursa, bu bir " bellek sızıntısı " ile sonuçlanır ve program giderek daha fazla tüketir. Daha da kötüsü, bir program yanlışlıkla birkaç kez serbest bırakma talebinde bulunursa veya serbest bırakılmasını talep ettikten sonra bir bellek alanı kullanırsa, büyük olasılıkla kararsız hale gelir ve ölümcül bir hataya neden olur.
Java'da bu sorunların birçoğu çöp toplayıcı kullanılarak önlenir . Oluşturulan her nesne için gereken bellek alanı , bu amaç için ayrılmış bir bellek yığınında ( İngilizce : memory heap ) yönetilir . Program, her nesneye yığındaki bir başvuru aracılığıyla erişir. Artık bir nesneye ulaşmak için herhangi bir referans olmadığında, çöp toplayıcı onu otomatik olarak yok eder - erişilemez hale geldiğinden - belleği boşaltır ve böylece herhangi bir bellek sızıntısını önler.
Çöp toplayıcı, birbirine referans veren veya döngülere referans veren karmaşık nesne durumlarını yönetmek için bir etiketleme ve serbest bırakma algoritması ( İngilizce : işaretle ve süpür ) kullanır ( Çift zincirleme listesi örneği için). Pratikte, program artık ona işlevsel olarak erişmezken (ancak nesneye bir referans tutarken), çöp toplayıcının bir nesnenin hala yararlı olduğunu düşündüğü, özel bir " bellek sızıntısı " durumu oluşturan programlama hatası vakaları vardır .
Çöp toplama, bellek yönetimini gözle görülür şekilde daha kolay ve daha güvenli hale getirir. Programların veya Kitaplıkların tasarımcıları ve kullanıcılarının, muhtemelen performans nedenlerinin dışında , nesnelerin serbest bırakılması ( C++'da silme operatörü ) konusunda endişelenmeleri gerekmez .
Platform bağımsızlığı, Java ile yazılmış programların farklı donanım mimarilerinde çok benzer şekilde çalışması anlamına gelir. Sun'ın Java lisansı bu nedenle tüm uygulamaların uyumlu olması gerektiği konusunda ısrar ediyor. Teoride, böylece belirli bir mimaride geliştirme gerçekleştirebilir ve son uygulamayı diğerlerinde çalıştırabiliriz.
Bu sonuç şu şekilde elde edilir:
Açıkça bir ilk derleme aşaması olsa bile, Java bayt kodunun anında bir derleyici tarafından anında yerel koda yorumlandığını veya dönüştürüldüğünü unutmayın ( tam zamanında , JIT).
Derleme türleriDilin ilk uygulamaları, taşınabilirliği sağlamak için yorumlanmış bir sanal makine kullandı. Bu uygulamalar, derlenmiş bir dilde (C, C ++, vb.) yazılanlardan daha yavaş çalışan programlar üretti, bu nedenle dil, düşük performans nedeniyle itibar kazandı.
Java Sanal Makinesi'nin (JVM) daha yeni uygulamaları, farklı teknikler kullanarak programları eskisinden çok daha hızlı üretir:
Sun, Microsoft'un uygulamasının RMI ve JNI arayüzlerini desteklemediğini ve orijinal platformuna kıyasla platforma özgü unsurlara sahip olduğunu tespit ettikten sonra , Sun Microsoft'a dava açarak (20 milyon dolar) tazminat aldı. Bu adalet eylemi, Sun'ın lisans şartlarını daha da sıkılaştırdı. Yanıt olarak Microsoft, platformlarında Java desteğini durdurdu ve Windows Internet Explorer'ın son sürümlerinde, eklentiler eklemeden Java uygulamalarını desteklemez. Ancak Sun, Java çalışma zamanı ortamlarını çeşitli Microsoft platformları için ücretsiz olarak kullanıma sunar.
Taşınabilirlik teknik olarak zor bir hedeftir ve Java'nın bu alandaki başarısı karışıktır. Java platformu için birçok hedef makinede iyi çalışan programlar yazmak gerçekten mümkün olsa da, küçük hatalar ve tutarsızlıklar içeren çok sayıda platform, Sun'ın " Bir kez yaz, her yerde çalıştır " sloganının yanlış kullanılmasına neden oldu ( "Bir kez yaz, her yerde çalıştır " ) için " bir kez yaz, her yerde hata ayıkla " ( " Bir kez yaz, her yerde hata ayıkla " )!
Java'nın platform bağımsızlığı, web servisleri, sunucu uygulamaları ve Java Beans gibi sunucu tarafı uygulamalarının yanı sıra Gömülü Java ortamını kullanan OSGi üzerindeki gömülü sistemlerde başarılıdır .
Java platformu, uzak kaynaklardan kod yürütmek için destek sunan ilk sistemlerden biriydi. Bir uygulama , bir HTTP sunucusundan indirilen kodu yürüterek kullanıcının web tarayıcısında çalışabilir . Bir uygulamanın kodu, kullanıcıyı yanlış veya kötü niyetli kodlardan koruyan çok kısıtlayıcı bir alanda çalışır. Bu alan, güvenlik yöneticisi adı verilen bir nesneyle sınırlandırılmıştır . Böyle bir nesne yerel kod için de mevcuttur, ancak varsayılan olarak etkin değildir.
Güvenlik yöneticisi ( SecurityManager sınıfı ), yerel sistem kaynaklarını (dosya sistemi, ağ, sistem özellikleri vb.) kullanmak için belirli sayıda yetki tanımlamanıza olanak tanır. Bir yetkilendirme şunları tanımlar:
Uygulama düzenleyicileri, bir uygulamayı güvenli olarak dijital olarak imzalamalarına izin vermek için bir sertifika talep edebilir ve potansiyel olarak onlara (uygun yetkilendirmeyle) kısıtlayıcı alandan çıkma ve yerel sistem kaynaklarına erişme izni verir.
Java ile yazılmış tipik bir Merhaba dünya programı örneği :
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }Kaynak dosya hemen hemen her zaman ".java" uzantılı sınıfın adını taşır (burada "HelloWorld.java", sınıfın bildiriminde public özniteliğine sahip olduğu için bu zorunlu bile olurdu - diğer herkesin programı tarafından erişilebilir olmasını sağlar) . Bu örneği derleyip terminalde aşağıdaki komutlarla çalıştırabiliriz ( Linux altında ):
javac HelloWorld.java export CLASSPATH=. java HelloWorld“ CLASSPATH'i dışa aktar =. Java'ya , geçerli dizindeki sınıf programlarını da araması gerektiğini söylemek için kullanılır . Bu yol, -classpath seçeneği (veya kısaca -cp ) kullanılarak program başlatılırken de belirtilebilir :
java -cp. HelloWorldNotlar:
( kaynak )
Bir sınıf nitelikleri denilen verilerin açıklamasıdır ve işlemlerin yöntemlerini denir. Bu, aynı nitelikler kümesine ve aynı işlemler kümesine sahip nesneler için bir şablon tanımıdır. Bir sınıftan örnekleme yoluyla bir veya daha fazla nesne oluşturabiliriz; her nesne tek bir sınıfın örneğidir .
Görünürlük:
Bir öznitelik , türü, ardından adı ve muhtemelen bir başlatma bölümü verilerek tanımlanır.
Görünürlük:
Bir yöntem şu şekilde tanımlanır:
Görünürlük:
Soyadı | Hesaplamalar sırasında bayt cinsinden boyut | Varsayılan değer | Olası değerler |
---|---|---|---|
boole | Tek bir bit yeterlidir, ancak genellikle bunları depolamak için bir bayt ayırırız. | false | true, false |
bayt | 1 | 0 | -128 ile +127 arasındaki tam sayılar (-2 7 ve 2 7 -1) |
şort | 2 | 0 | −32 768 ve 32 767 (-2 15 ve 2 15 -1) arasındaki tam sayılar |
int | 4 | 0 | -2 147 483 648 ve +2 147 483 647 (-2 31 ve 2 31 -1) arasındaki tam sayılar |
uzun | 8 | 0 | -9 223 372 036 854 775 808 ile 9 223 372 036 854 775 807 (-2 63 ve 2 63 -1) arasındaki tam sayılar |
tank | 2 | '\u0000' | Tüm değerler Unicode (U değerleri + U + 0000 - FFFF, 'den sonra 4 basamak gerekir '\u') İlk 128 karakter ASCII kodları ve not kesme işaretleridir: 'a', '1', '\'', '\n'. |
yüzer | 4 | 0.0 | Sayı kümesi [−3.402 823 47 × 10 38 .. −1.402 398 46 × 10 −45 ], 0, [1.402 398 46 × 10 −45 .. 3.402 823 47 × 10 38 ] |
çift | 8 | 0.0 | Sayı kümesi [−1.797 693 134 862 315 70 × 10 308 .. −4.940 656 458 412 465 44 × 10 −324 ], 0, [4.940 656 458 412 465 44 × 10 −324 .. 1.797 693 134 862 315 70 × 10.308 ] |
Nesne | Sanal makineye bağlı | null |
Yukarıdaki tablo temel türleri listeler, ancak Java'da nesne olan ve bu şekilde kullanılacak başka türler de vardır. Örneğin bir tamsayı tanımlamak için, başlangıç değeri varsayılan olarak şu olacak olan 'Tamsayı' türünü kullanabiliriz.null
Bir değişkeni başlatmak için sözdizimi (burada C ile aynıdır) aşağıdaki gibidir:
NomDuType maVariable;myVariable daha sonra yığında tahsis edilir.
Koleksiyonlarda genellikle çok fazla veri depolamak gerekir: alışveriş listesi, öğrenci notları vb. Koleksiyonlara bakılabilir, değiştirilebilir, sıralanabilir, yeniden kopyalanabilir, silinebilir, vb. Sabit veya değişken bir boyuta sahip olabilirler.
Sabit boyutlu koleksiyonlar, değişken boyutlu koleksiyonlardan daha hafiftir.
Sabit boyutlu koleksiyonlarSoyut sınıf AbstractList, değişken boyutlu koleksiyonları uygulamak için sağlanmıştır.
Bir ArrayList başlatmak için Sınıfa ithal etmek zorunda java.util.ArrayListve yazmak liste = new ArrayList<T>();veya liste = new ArrayList<>(); JDK 7.0 den.
JDK 1.5'ten beri, bir ArrayList'te bulunan öğelerin türünü belirtme olanağına sahibiz: Tamsayılar, karakter dizileri veya diğer nesneler.
Bir eleman eklemek için yazıyoruz liste.add(Objet);
ArrayList'in bir öğesine erişmek için: liste.get(index);
Bir listenin içerdiği eleman sayısını bulmak için: liste.size();
Bir elemanı silmek için: liste.remove(index);silinen elemanı takip eden elemanlar sola kaydırılacaktır.
Hepsinin benzer bir rolü olmasına rağmen, her döngü yine de bir duruma uyarlanmıştır:
Not : ek operatörler kullanarak koşulları (Boolean ifadeleri) birleştirmek mümkündür: mantıksal "AND" && (tüm koşullar doğruysa yürütülen ifade):
Ayrıca mantıksal “VEYA” || (koşullardan en az biri doğruysa talimat yürütülür):
if (<condition 1> || <condition 2>) { instruction(s) si au moins une des deux est vraie }Son olarak, mantıklı bir “HAYIR” var ! bu, bir koşulun sonucunu tersine çevirmenizi sağlar.
Karmaşık koşullu yapılar elde etmek için bu işlemleri birleştirmek mümkündür. Koşulların önceliklerini tanımlamak için parantezler ekleyebilirsiniz (bir hesaplamada olduğu gibi). Diğer durumlarda, JVM çeşitli kontrolleri soldan sağa doğru gerçekleştirir.
Talimatların yürütülmesi seçimi , türü tamsayı ( int , char , bayt veya kısa veya karşılık gelen zarf sınıfları), numaralandırılmış ( enum ) veya String (yalnızca Java 7'den beri karakter dizesi ) olabilen anahtarı izleyen ifadeyle belirlenir .
Not: ' şartlı operatörü veya üçlü operatör ? : koşullu bir ifadenin kullanılmasından kaçınabilir. Boole koşulunu test ettikten sonra bir koşullu ifade şu iki değerden birine sahip olacaktır:
<expression booléenne> ? <valeur si vrai> : <valeur si faux> Koşulsuz bağlantılarSon kod bloğu , program try-catch bloğundan çıktığında, sonuçtan bağımsız olarak yürütülecektir .
İşte bir istisna yakalama örneği:
FileOutputStream fos = null; try { //Chacune de ces deux instructions peut générer une exception // création d'un flux pour écrire dans un fichier fos = new FileOutputStream(...); // écriture de données dans ce flux fos.write(...); } catch (IOException e) { //Gestion de l'erreur de création ou d'écriture dans le flux e.printStackTrace(); } finally{ //Cette section de code est toujours exécutée, qu’il y ait une exception ou pas // fermeture du flux s'il a été ouvert if(fos != null) fos.close(); }Bu örnek, Java'daki istisnaların mekanizmasını göstermektedir. try bloğunda bir giriş/çıkış hatası olması durumunda , bu duruma karşılık gelen catch bloğunda yürütme devam eder ( IOException tipi istisnası ).
Bu catch bloğunda , e değişkeni meydana gelen istisnaya başvurur. Burada, oluşan istisna hakkında konsolda bilgi görüntüleyen printStackTrace() yöntemini çağırıyoruz : isim, sebep, istisna atıldığında çağrı yığınının durumu ve isteğe bağlı olarak hatanın oluştuğu satır numarası.
Son blok daha sonra yürütülür (burada kullanılan kaynakları kapatmak için). Bu sadece bir örnektir, bir istisna oluştuğunda yapılacak işlem, uygulamanın genel işleyişine ve istisnanın doğasına bağlıdır.
Genel türlerGenel bir tür, aksi takdirde Şablon olarak adlandırılır, argüman olarak bir veya daha fazla başka tür alır. Parametre olarak iletilen tür, örnekleme sırasında belirlenir.
Bu, özellikle ArrayLists bağlamında, yayınlardan kaçınmayı mümkün kılar.
public class ArrayList<E> { ArrayList<String> al = new ArrayList<String>(); }Bu genel türler, doğrudan bayt kodunda değil, yalnızca derleme zamanında kullanılır.
C ++ ile Fark: C ++'daki şablonlar, her tür için bir sınıfı çoğaltır. Öte yandan Java, derleme zamanında bu içsel türlerin sınıflarını çoğaltmışız gibi davranır, ancak aslında yalnızca bir sınıfla ilgilenir.
Kaynak kodu kodlamasıJava dili özellikleri , dünyada var olan tüm karakterlerin kaynak kodunda kullanılmasına izin veren UTF-16 formatındaki karakterlerden oluştuğunu belirtir :
public class HelloWorld { private String text = "hello world"; }Ancak platformlar arasında taşınabilirliği sağlamak için sınıf adları yalnızca ASCII karakterlerinden oluşmalıdır .
Şebeke | anlam |
---|---|
== | Eşit ( atama operatörü olan = ile karıştırılmamalıdır ) |
! = | Farklı |
< | Kalitesiz |
> | üstün |
<= | Daha az veya eşit |
> = | Büyük veya eşit |
JavaStyle, Sun tarafından tanımlanan Java dili programlama kurallarıdır. Katı kurallara saygı, tüm ekip tarafından geliştirilen bir uygulamanın kaynak kodunda homojenliği sağlar ve kaynak kodun aynı kodlama kurallarını paylaşan bir topluluğa dağıtımını teşvik eder.
Alt deve durumda yöntem ve değişken isimleri için kullanılır.
Sun, Java'nın çok çeşitli kullanımlar için kullanılmasını sağlamak için çok sayıda çerçeve ve API sağlar.
Temel olarak dört ana çerçeve vardır :
Kalıcılık şu standartlara dayanmaktadır:
Ancak, Java için başka birçok teknoloji, API ve isteğe bağlı uzantı vardır:
Programlama, bir Java derleyicisi (genellikle javac olarak adlandırılır ) başlatılarak bir komut isteminden yapılabilir , ancak daha fazla kolaylık için, entegre bir geliştirme ortamı veya IDE (otomatik olarak derlemeye izin verir) kullanılması tercih edilir, bazıları ücretsizdir. Örneğin :
Bir Java programı, oluşturma sürecini otomatikleştiren araçlarla üretilebilir (yani, kütüphane kullanımı, derleme, üretim arşivleri, dokümantasyon, dağıtım vb. gibi potansiyel olarak çok sayıda bağımlılığı içeren bazı görevlerin otomasyonu). En çok kullanılanlar:
Sonuçlar:
% scons -Q javac -d classes -sourcepath src src/Exemple1.java src/Exemple2.java src/Exemple3.java jar cf test.jar classes