Insanların şüphe ile yaklaştıkları cross-platform bir dildir. Var olan programlama dilleri arasında Object-Oriented programming felsefesi ile çalışacak bir kimse için en başarılı alt yapıyı sunan dildir. Javada her class Object class'ını extend ederek var olur, yani her şey aslında bir objedir. Encapsulation mükemmel bir şekilde sağlanır. Ayrıca C++'daki gibi birden fazla class'ı extend ederek tangling problemine yol açmaz. Ayrıca Java da en az C++ kadar pointerları kullanır, yalnızca bu pointerlar ile kendi garbage collection mekanizması ilgilendiğinden ötürü programmer tercihlerinden bağımsızdır. Bu küçük ve orta ölçekli programlar için dezavantaj gibi görünür. Sonuçta C++'da çağırılan fonksiyonlarda Pass by Value ya da pass by reference seçeneği yazılımcıya aittir, javada ise belirli bir standart vardır. istemeniz durumunda dahi memory leak'a yol açmak zordur. Çok geniş bir library seçeneği mevcut olduğundan aklınıza gelebilecek , işlemcisi olan her makineyi programlayabilirsiniz. Hız meselesi jdk 1.5 'ten sonra artık bir problem olmaktan çıkmıştır. Şu an tümüyle java ee ile yazılan ecommerce sitemizdeki hız oranı dünyada amazon.com 'dan sonra ikinci sırada. ( Apache server, weblogic, JMS vs vs ile birlikte. ) Yani PHP ya da herhangi başka bir opsiyonu yalnızca hızlı olacağı düşüncesi ile seçmek bence pek de mantıklı değildir. Framework konusunda da bence alternatifsizdir. Struts , Spring ve Hibernate ile neler yapılabilineceği gerçekten insaları şaşırtır. Ayrıca programming paradigmaları da ( her ne kadar OO temelleri izlense de java üzerinde ), bu tarz frameworkler ile mümkündür. Aspect Oriented Programming için Spring'in pointcut mekanizmaları gayet başarılıdır. Programlama dilleri artıları ve eksileri ile gelir ve projeye göre biçimlenir. Ancak bana kalırsa herhangi bir ( çok low level olmadığı takdirde ) program parçası yoktur ki java ile yazılması tamamiyle yanlış bir tercih olsun. Ben birisine sıfırdan software engineering öğretecek olsaydım muhtemelen C'den ya da C++ 'dan başlardım ki, işin daha low level kısımlarına aşina olup arka planda Java'nın neleri başardığını görebilsin diye. Ancak yeni başlayan kimseler cout << "ıvır zıvır"; şeklinde yazabilecekleri kodu javada system.out.println("ıvır zıvır"); şeklinde yazdıklarında "ne oluyor mınaski" oluyorlar. Mesele arkadaki mantık. std io include edildikten sonra cout ile yazabilmek anlaşılabilir bir kod değildir halbuki ancak yeni başlayan hello world kullanıcısını javaya karşı biraz ürkütür bu tarz durumlar. Halbuki mentalite anlaşıldığında, önce system objesi, sonrasında onun out ( i/o 'daki o kısmı yani ) objesi, sonra da onun println metodu üzerinde ( ki bu pek çok obje üzerinden override edilebilir )çağırıldığında ve yazılımcı bütün bu senaryonun farkına vardığında bir şeyler parlamaya başlar zihinde. O zaman cout mantıksız gelmeye başlar.