TL; DR
Java'da, neden arasında public static void main(String[] args)
olmasıdır
- Gosling istedi
- C de deneyimli bir kişi tarafından yazılmış kod (Java’da değil)
- çalışan çeken biri tarafından yürütülecek PostScript üzerinde News
C # için akıl yürütme, konuşmaya benzer şekilde geçişsel olarak benzer . Dil tasarımcıları, program giriş noktası sözdizimini Java'dan gelen programcılar için tanıdık tuttu . C # mimarı olarak Anders Hejlsberg koyar ,
... C # ile olan yaklaşımımız Java programcılarına alternatif ... sunmaktır ...
Uzun versiyon
Yukarıda genişleyen ve sıkıcı referanslarla destekledi.
java Terminator Hasta la vista Bebeğim!
VM Spec, 2.17.1 Sanal Makine Başlatması
... Başlangıç sınıfının Java sanal makinesinde belirtilme şekli, bu belirtimin kapsamı dışındadır, ancak sınıfın tam adı için belirtilecek sınıfın tam adı için komut satırı kullanan ana bilgisayar ortamlarında tipiktir. bir komut satırı argümanı ve sonraki komut satırı argümanları için ana yöntemin argümanı olarak sağlanacak dizeler olarak kullanılacaktır. Örneğin, Solaris için Sun'ın Java 2 SDK'sını kullanarak komut satırı
java Terminator Hasta la vista Baby!
sınıfın ana yöntemini Terminator
(adlandırılmamış bir pakette bulunan bir sınıf) çağırarak ve "Hasta", "la", "manzara" ve "Bebek!"
... ayrıca bakınız: Ek: Kıyafetlerinize, botlarınıza ve motosikletinize ihtiyacım var
- Yorumum:
komut satırı arayüzündeki tipik komut dosyaları gibi kullanımı hedeflenen yürütme.
önemli yan
... araştırmalarımızda birkaç yanlış izden kaçınmaya yardımcı oluyor.
VM Spec, 1.2 Java Sanal Makinesi
Java sanal makinesi Java programlama dilinden hiçbir şey bilmiyor ...
Önceki bölüm okurken yukarıda dikkatimi çekmiştim - 1.1 Yararlı olabileceğini düşündüğüm tarih (ancak işe yaramaz hale geldi).
- Yorumum:
yürütme tek başına VM spec tarafından yönetilir,
açıkça JLS ile ilgisi olmadığını ve JLS'yi ve ilgili herhangi bir Java dilini
yoksaymak için => TAMAM olduğunu beyan eder.
Gosling: C ve betik dili arasında bir uzlaşma ...
Yukarıdakilere dayanarak, JVM tarihi için web’i aramaya başladım . Yardım etmedim, sonuçta çok fazla çöp.
Sonra Gosling hakkındaki efsaneleri hatırladım ve Gosling JVM tarihine olan araştırmamı daralttım .
Eureka! JVM Spec Nasıl Oluştu?
JVM Languages Summit 2008’deki bu açılış konuşmasında James Gosling ... Java’nın yaratılışını ... C ile betik dili arasında bir uzlaşmaya varıyor ...
- Benim yorumum:
Yaratılış anında
C ve kod yazmanın en önemli etkiler olarak kabul edildiğine dair açık beyan .
Zaten VM Spec 2.17.1 yılında komut dosyası için selam görülen,
komut satırı argümanları yeterince açıklamak String[] args
ancak static
ve main
daha da kazmak gerekir henüz bulunmamaktadır ...
Bunu yazarken not edin - C'yi, komut dosyasını ve VM Spec 1.2'yi Java'sız bir şeyle bağlarken - tanıdık bir şey gibi hissediyorum, bir şey ... nesne yönelimli yavaş yavaş geçiyor. Elimi tut ve hareket etmeye devam et 'Yavaşlama
Keynote slaytları çevrimiçi olarak mevcuttur: 20_Gosling_keynote.pdf , kilit noktaları kopyalamak için oldukça uygundur.
sayfa 3
Java Prehistoryası
* Düşüncemi ne şekillendirdi
sayfa 9
Haberler
* Ağa Bağlı Genişletilebilir Pencere Sistemi
* Kodlamaya dayalı bir pencere sistemi ....
PostScript (!!)
sayfa 16
Büyük (ama Sessiz) Amaç:
Ne kadar yakın
"senaryo" hissi ...
sayfa 19
Orijinal kavram
* Her şey bina ile ilgiliydi
şeylerin ağları,
bir komut dosyası tarafından düzenlendi
dil
* (Unix kabukları, AppleScript, ...)
sayfa 20
Koyun kılığındaki bir kurt
* C sözdizimi geliştiriciler yapmak
rahat
Aha! C sözdizimine daha yakından bakalım .
"Merhaba dünya" örneği ...
main()
{
printf("hello, world\n");
}
... main adında bir fonksiyon tanımlanıyor. Ana işlevi C programlarında özel bir amaca hizmet; çalışma zamanı ortamı, programın yürütülmesine başlamak için ana işlevi çağırır.
... Asıl işlevin aslında iki argümanı vardır int argc
ve char *argv[]
sırasıyla komut satırı argümanlarını işlemek için kullanılabilir ...
Yaklaşıyor muyuz? emin ol. Ayrıca yukarıdaki alıntıdan "ana" bağlantıyı izlemeye değer:
Ana işlev, bir programın yürütmeye başladığı yerdir. Programın işlevselliğinin üst düzey organizasyonundan sorumludur ve genellikle yürütüldüğü zaman programa verilen komut argümanlarına erişime sahiptir.
- Yorumum:
C geliştiricisi için rahat olması için program giriş noktasının olması gerekir main
.
Ayrıca, Java sınıfta herhangi bir yöntem gerektirdiğinden Class.main
,
olabildiğince yakındır: statik çağrı, sadece sınıf adı ve nokta,
lütfen yapıcı yok - C böyle bir şey bilmiyor.
Bu aynı zamanda geçişli dikkate alarak, C # için geçerlidir
Java dan kendisine kolay geçiş fikrini.
Tanıdık programın giriş noktasının önemli olmadığını düşünen okuyucular, Java SE'den gelen kişilerin Java ME MIDP için Hello World yazmaya çalıştığı Yığın Taşması sorularını araştırmaya ve kontrol etmeye davetlidir . Not MIDP giriş noktasının hiçbiri main
yoktur static
.
Sonuç
Söyleyebilirm yukarıda dayanarak static
, main
ve String[] args
tanımlamak için Java ve C # oluşturma en makul seçenek anlarda idi programı giriş noktası .
Ek: Kıyafetlerine, botlarına ve motosikletine ihtiyacım var
Kabul etmeliyim ki, VM Spec 2.17.1'i okumak çok eğlenceliydi.
... komut satırı
java Terminator Hasta la vista Baby!
sınıfın ana yöntemini Terminator
(adlandırılmamış bir pakette bulunan bir sınıf) çağırarak ve "Hasta", "la", "vista" ve "Baby!" dizelerini içeren bir diziyi geçerek bir Java sanal makinesini başlatır .
Şimdi, sanal makinenin Terminator
ileriki bölümlerde daha ayrıntılı olarak açıklanan yükleme, bağlama ve başlatma işlemlerinin bir örneği olarak yürütmek için atması gereken adımları açıklıyoruz.
İlk deneme ... sınıfın Terminator
yüklenmediğini keşfetti ...
Terminator
Yüklendikten sonra , ana çağrılmadan önce başlatılmalıdır ve başlatılmadan önce bir tür (sınıf veya arabirim) her zaman bağlanmalıdır. Bağlama (§2.17.3) doğrulama, hazırlık ve (isteğe bağlı) çözülmeyi içerir ...
Doğrulama (§2.17.3), yüklü temsilinin Terminator
iyi bir şekilde oluşturulduğunu kontrol eder ...
Karar (§2.17.3) sınıftan sembolik referansları kontrol etme işlemidir Terminator
...
Terminator
Evet
sembolik referanslar .