Başka bir yönü:
Java, oldukça katı özelliklere sahip statik bir dildir. Bu, diğer dillerde (c / f Ruby, Lisp vb.) Oldukça açık veya dinamik olacak birçok şeyin kesin olarak belirlendiği anlamına gelir.
Bu genel bir tasarım kararıdır. “Neden” diye cevaplamak zor (çünkü dilin tasarımcıları bunun iyi olacağını düşündü!). "Ne için" oldukça açık: derleyicinin bir çok hatayı tespit etmesini sağlar , bu genellikle herhangi bir dil için oldukça iyi bir özelliktir. İkincisi, dil hakkında akıl yürütmeyi nispeten kolay hale getirir. Örneğin, biçimsel doğruluk oluşturmak Java dilinde (altkümelerinde) kanıtlamak nispeten kolaydır; Karşılaştırma olarak, Ruby ve diğerleri gibi dinamik bir dilde neredeyse imkansız olurdu.
Bu düşünce, dilin, örneğin, bir yöntemin ortaya koyabileceği olası istisnaların zorla ilan edilmesine, belirsiz çoklu mirastan kaçınmanın ayrı türüne interface
vs. class
izin verir. Ne olduğu için (derleme zamanı hata işlemeye kuvvetli odaklanan statik bir zorunlu OOP gerçek dünya dili) bu şeyler aslında oldukça zarif ve güçlü. Sadece bu konuların bazılarını araştırmak için daha önce herhangi bir gerçek dünya diline nazaran keşfedilmeyi amaçlayan teorik (bilime uygun) dillere daha da yaklaşıyorlar (o zaman, sizi düşünün).
Yani. Sıkı bir void
türe sahip olmak açık bir mesajdır: bu yöntem hiçbir şey döndürmez, dönem. Neyse ne. Bir şeyi her zaman geri döndürmek için onu zorlamak yerine, daha fazla dinamik davranışa yol açabilir (Ruby'de her def'in açık ya da örtülü bir geri dönüş değeri olduğu yerlerde olduğu gibi ), her zaman provability ve muhakeme için kötü olurdu; veya burada başka bir mekanizma kullanarak büyük şişkinlik.
(Ve NB, Yakut (örneğin) farklı bu işler ve bunun çözüm hala tam olarak kabul edilebilir , Java'nın olarak tamamen farklı bir felsefeye sahiptir çünkü koyarken. Mesela o pencereden dışarı tamamen sağlamasının ve mantıklılığını atar geniş odak üzerinde dilin son derece yüksek ifadesi.)