Java - Nedir bu static ve this?

LifeMCServer

Nether Yerlisi
Mesajlar
2,410
En iyi cevaplar
98
Beğeniler
2,461
Puanları
10,250
Ruh hali
Herkese Merhabalar!
Sanırım bu forumda ki ilk java ile alakalı konum. Türkçe kaynaklar zor bulunduğundan dolayı bu konularda kendi bildiklerimden önemli buldukları mı ve benimde yolun başındayken en çok karşılaştığım ama aslında basit olan sorunların çözümlerini sadece sunmayıp nedenleriyle de açıklayacağım.

birçok kişinin karşılaştığı basit bir problem var, mantığını anlar ve Java'yı öğrenir iseniz sonradan bu karşılaştığınız soruna gülüp geçebilirsiniz, buradan da bir anınız olur.

"You are making progress if each mistake is a new one."
(Her hata yeni bir hatayı doğuruyor ise; ilerleme kaydediyorsun.)

Araya bu tür ingilizce türkçe farketmeksizin sözler sıkıştırabilirim, anlamlı olması bir şart olmasa da genelde anlamlı veya mesaj veren sözler olacaklardır. Programlama dillerini ve birçok şeyi araştırır, öğrenir iken gereken en önemli şey olan İngilizce bilginizi yüksek tutmanızı öneriyorum çünkü birçok döküman ingilizce olarak yazılıyor ve türkçeye çevrildiğinde bazen anlamsız / komplike kelimeler / anlamlar ortaya çıkabiliyor.

Lütfen bazı yerlerde ingilizce terimler kullandığım için beni suçlamayın, tamamen türkçe olarak öğrenip araştırmanız imkansız, elinde sonunda bu terimleri öğreneceksiniz, ben sadece bu işlemi hızlandırıyorum, çoğu zaman da zaten parantez içinde türkçesini veyahut onu yazmaz isem daha sonrasında açıklamasını yazıyorum. Yinede sorunuz var ise yorum atmakta veya bundan daha önemlisi araştırmakta özgürsünüz.

Nedir bu static?

Static, Java'da bir modifier'dır. Peki modifier ne diye sorar iseniz, modifier türkçesi değiştiriciler'dir. Değiştiriciler'i konfigüre etmek anlamında algılayabilirsiniz. Static, final, public gibi modifier (değiştiriciler) kullanarak variableleri, methodları (fonksiyon da denir, aslında denmez ama daha kolay anlayın diye .P) ve birçok şeyi konfigüre edebiliriz.

Static, bu değiştiricilerden / konfigüre edicilerden biridir. Bildiğiniz veya bilmediğiniz üzere Java, Objeye yönelik bir programlama dilidir. Yani tüm classlar varsayılan olarak java.lang.Object classından türer. Türemek ne derseniz javadaki extends ve implements kelimelerinin karşılığıdır. En basit şekilde böyle açıklanabilir yani.

Konumuz static olduğu için diğer şeylere olabildiğince az değinerek özetlemeye çalışıyorum. Eğer daha fazla bilgi edinmek istediğiniz bir şey var ise Google'a yazmanız yeterli. Bu konuların amacı da bu zaten. Size her şeyi ben öğretemem ve her konu da ben yardım edemem. Bir yerden sonra kendinizi eğitip sorunlarınıza kendiniz çözüm bulmanız gerekecek.

This nedir, ne değildir?

This, javada şu an yürütülen kodun ait olduğu objeye bir referanstır. Kod yürütülüyor ise; This asla null (boş / olmayan değer) olamaz. Peki bunun static ile bağlantısı nedir diye soracak olur iseniz; Static class'ın kendisine aittir, static olmayan her şey ise objeye spesifiktir. Yani bir şeyi static yapar isek objeye spesifik şeylere; dolayısı ile de this referansına erişemeyiz. This kelimesi çoğu zaman gereksizdir (static değil ise objeye aittir, ve dolayısı ile this kullanılır) ve başlangıçta kullanmanızı önermem çünkü compiler (IDE) bu işi sizin için yapacaktır.

Bukkit ile nasıl kullanılır?

Bukkit, olması gerektiği gibi her plugini bir birinden ayırmak için her plugine yani eklentiye özel objeler oluşturur. Bu objeleri oluşturmak için gereken bilgiyi aslında Bukkit'e biz sağlarız, bukkit sadece bizim pluginimizi bizim verdiğimiz bilgilerden obje olarak oluşturur ve bize sağlar.

Bir kullanım örneği yok mu?
Java:
package me.takmaad.projeismi; // değiştirin

public final class Başlangıç {

    // static sabit değer, final = sabit, değişemez (literal, constant, readonly vb de denir)
    static final String FORUM_LİNK = "https://forum.gamer.com.tr/";

    public static void main(final String[] komutSatırıArgümanları) {

        // getURL static olmadığı için new Konu(...) kullandık.
        System.out.println(new Konu(417306).getURL()); // konu ID'yi değiştirebilirsiniz

    }

    public static final class Konu {

        private final int id;

        public Konu(final int id) {

            this.id = id;

        }

       public int getID() {

            return this.id;

       }

       public String getURL() { // FORUM_LINK static olduğu için new Başlangıç() yerine direk Başlangıç kullandık.

           return Başlangıç.FORUM_LİNK + "konu/" + this.getID() + "/";

       }

    }

}

Özet

Static - Bir değiştirici.
This - şu an yürütülen koda ait objeye bir referans.

Eğer bu konuya "this can not be used in a static context" tarzı bir hata ile karşılaştıktan sonra geldi iseniz, static değiştiricisini kaldırmanız sorunu çözecektir. Eğer "non static method can't be accessed without instance" tarzı bir hata ile geldiyseniz de static değiştiricisi eklemeniz sorunu çözecektir.

Sağlıcakla kalın, sonraki konular da görüşmek üzere..​
 


Son düzenleme:

javabey

git add Brain.java in/earth/people/brainless
Mesajlar
176
En iyi cevaplar
0
Beğeniler
180
Puanları
330
Ruh hali
class isimleri can yakıyor ama güzel anlatım olmuş
 

GodofMilker

Nether Yerlisi
Mesajlar
2,196
En iyi cevaplar
0
Beğeniler
2,562
Puanları
6,700
1- Compiler ile IDE aynı şey değil ve o dediğin şeyi yapan şey IDE

2- Static nedir'in altında staticin ne olduğunu açıklamıyorsun

3- "Eğer bu konuya "this can not be used in a static context" tarzı bir hata ile karşılaştıktan sonra geldi iseniz, static değiştiricisini kaldırmanız sorunu çözecektir. Eğer "non static method can't be accessed without instance" tarzı bir hata ile geldiyseniz de static değiştiricisi eklemeniz sorunu çözecektir." şu kısım çok saçma, static'i obje gerekmeyen vb durumlarda kullanırsınız yani objesine sahip olmadığınız veya gerekmeyen yerlerde kullanın gibi açıklaman gerekiyordu*

4- O sözün tam çevirisi "Yaptığınız her hata yeni bir hataysa, ilerleme kaydediyorsunuz." gibi bir şeyler olması gerekmiyor mu(altında yazdığın çeviri o anlamla alakasız bence yani de çılgın Türk çeviri fantezileri yaptıysa suç atmıyorum :(*)

Terimleri Türkçe kullanmak gereksiz bir de .s

(Gidip bakmadım yani emin değilim ama büyük ihtimalle*)
Bukkit plugin.yml'de verdiğin Main classından bir obje oluşturuyor ve her şeyi ondan hallediyor. Yani her plugin için bir obje oluşturuyor(plugin yml dışında tşk) ve sen objeyi oluştururken bilgi vermiyorsun. Değiştirdiğin tek özelliği de Listenerlar eklemek oluyor sanırım xd
 

Bernard

Бернард
Site Danışmanı
Geliştirici
Mesajlar
1,286
En iyi cevaplar
61
Beğeniler
2,129
Puanları
5,790
Static methodlar jre tarafından program başlamadan kullanılabilir ve normal methodlardan önce yüklenir. Modifier diyip bırakmamak gerek. Static bloğu denen şey bile var.
 

Pluginsel

★ #NerdeOEskiGünler ★
Emekli
Mesajlar
1,120
En iyi cevaplar
0
Beğeniler
1,460
Puanları
3,180
Ruh hali
Zamanında Java'yı öğrenmeye çalışırken bende senin açtığın konuya benzer Türkçe veya İngilizce konulardan Java'da bu ne demek şu neye yarar diye araştırırdım ama hiçbir şey anlamazdım. Hepsini tek tek test ederek öğrendim, beklenmedik bir şekilde yani.
Tabii bu benim sorunum, yinede okuyarak anlayabilenler var. Ama açıkcası sizin konunuzu okuyunca hiçbir şey anlayamadım ve neden okuduğumu bende bilmiyorum :/
 

Bernard

Бернард
Site Danışmanı
Geliştirici
Mesajlar
1,286
En iyi cevaplar
61
Beğeniler
2,129
Puanları
5,790
Zamanında Java'yı öğrenmeye çalışırken bende senin açtığın konuya benzer Türkçe veya İngilizce konulardan Java'da bu ne demek şu neye yarar diye araştırırdım ama hiçbir şey anlamazdım. Hepsini tek tek test ederek öğrendim, beklenmedik bir şekilde yani.
Tabii bu benim sorunum, yinede okuyarak anlayabilenler var. Ama açıkcası sizin konunuzu okuyunca hiçbir şey anlayamadım ve neden okuduğumu bende bilmiyorum :/
Reflection olaylarını nasıl deneyerek öğrendin, yada static olaylarının çalışma mantığını? Bir yöntem varsa söyle bizde öyle öğrenelim. Ben şu anda resmi Java Tutorial'dan gidiyorum.
 

Pluginsel

★ #NerdeOEskiGünler ★
Emekli
Mesajlar
1,120
En iyi cevaplar
0
Beğeniler
1,460
Puanları
3,180
Ruh hali
Reflection olaylarını nasıl deneyerek öğrendin, yada static olaylarının çalışma mantığını? Bir yöntem varsa söyle bizde öyle öğrenelim. Ben şu anda resmi Java Tutorial'dan gidiyorum.
Nasıl öğrendiğimi bende bilmiyorum, 12 yaşımdan beri Java üzerinde çalışıyorum. Başlarda senin gibi Java Tutorial bakardım ama çok az şey anlardım, daha sonra kitap satın aldım ama onda da az bir şey anladım. Bende kendim az bilgim olmasına rağmen bir program yazmaya karar verdim ve takıldığım noktaları yavaş yavaş çözebildim.
Seneye ise C++'a başlayacağım.
 

javabey

git add Brain.java in/earth/people/brainless
Mesajlar
176
En iyi cevaplar
0
Beğeniler
180
Puanları
330
Ruh hali
Reflection olaylarını nasıl deneyerek öğrendin, yada static olaylarının çalışma mantığını? Bir yöntem varsa söyle bizde öyle öğrenelim. Ben şu anda resmi Java Tutorial'dan gidiyorum.
reflectionlar kolaydır ya bu kadar zorlandığın yer neresi ? her şeyi test ederek öğrendim bende, zaman alıyor ama sıkıcı tut sayfalarından iyidir :D
 

LifeMCServer

Nether Yerlisi
Mesajlar
2,410
En iyi cevaplar
98
Beğeniler
2,461
Puanları
10,250
Ruh hali
Devamını bekliyorum, böyle konular görmek güzel.

Yorumun için teşekkürler.

class isimleri can yakıyor ama güzel anlatım olmuş

Örnek vermek için hepsini türkçe yaptım, Java türkçe karakterleri kabul ettiği için türkçe de karakter de kullandım, normalde standartlara göre kullanılmaması gerek tabii.

1- Compiler ile IDE aynı şey değil ve o dediğin şeyi yapan şey IDE

2- Static nedir'in altında staticin ne olduğunu açıklamıyorsun

3- "Eğer bu konuya "this can not be used in a static context" tarzı bir hata ile karşılaştıktan sonra geldi iseniz, static değiştiricisini kaldırmanız sorunu çözecektir. Eğer "non static method can't be accessed without instance" tarzı bir hata ile geldiyseniz de static değiştiricisi eklemeniz sorunu çözecektir." şu kısım çok saçma, static'i obje gerekmeyen vb durumlarda kullanırsınız yani objesine sahip olmadığınız veya gerekmeyen yerlerde kullanın gibi açıklaman gerekiyordu*

4- O sözün tam çevirisi "Yaptığınız her hata yeni bir hataysa, ilerleme kaydediyorsunuz." gibi bir şeyler olması gerekmiyor mu(altında yazdığın çeviri o anlamla alakasız bence yani de çılgın Türk çeviri fantezileri yaptıysa suç atmıyorum :(*)

Terimleri Türkçe kullanmak gereksiz bir de .s

(Gidip bakmadım yani emin değilim ama büyük ihtimalle*)
Bukkit plugin.yml'de verdiğin Main classından bir obje oluşturuyor ve her şeyi ondan hallediyor. Yani her plugin için bir obje oluşturuyor(plugin yml dışında tşk) ve sen objeyi oluştururken bilgi vermiyorsun. Değiştirdiğin tek özelliği de Listenerlar eklemek oluyor sanırım xd

IDE'ler içlerine gömülü compiler'lar ile birlikte gelir. Kafa karışıklığı yapmaması için parantez içinde öyle yazdım. Bu arada o dediğim şeyi yapan compiler, IDE değil. Kod compile edildikten sonra sen this koysanda koymasanda objeye referans içeren tüm kodların başına otomatik this eklenir. (Veya byte code şeklinde objeye referans yapan başka bir şey kullanılır)

Konu daha çok yeni başlayanlara yönelik. Static'i açıkladım okur isen, tabii özet kısmında değiştirici diyip geçtim çünkü zaten yukarda açıklamıştım.

O kısmı zaten pratik şeklinde, eğer konuya bu hatadan dolayı girdiyseniz şunu yaparak çözebilirsiniz olarak yazdım.

Yaptığım çeviri doğru, senin dediğin daha anlaşılır olabilir tabii, fakat ben böyle çevirdim. Konuda da belirttiğim gibi ingilizce öğrenirken kelimelerin türkçe karşılıklarını değil de anlamlarını öğrenmek gerek.

Bilgi veriyoruz derken zaten ondan (plugin.yml) bahsediyorum, Bukkit zaten reflection yani bad magic kullanıyor ve onu bu tür basit bir konuya koymak istemedim. Her şeyi basit ve hızlıca açıkladım konuyu okuduktan sonra araştırma isteği geliyor ise hedefime ulaşmışımdır.

Static methodlar jre tarafından program başlamadan kullanılabilir ve normal methodlardan önce yüklenir. Modifier diyip bırakmamak gerek. Static bloğu denen şey bile var.

Onlar detaylar, konunun amacı zaten insanları araştırmaya teşvik etmek. Tabii araştırarak buraya geldilerse orasını bilemiyorum, ingilizce ve resmi dökümanlardan araştırmak gerek.

Zamanında Java'yı öğrenmeye çalışırken bende senin açtığın konuya benzer Türkçe veya İngilizce konulardan Java'da bu ne demek şu neye yarar diye araştırırdım ama hiçbir şey anlamazdım. Hepsini tek tek test ederek öğrendim, beklenmedik bir şekilde yani.
Tabii bu benim sorunum, yinede okuyarak anlayabilenler var. Ama açıkcası sizin konunuzu okuyunca hiçbir şey anlayamadım ve neden okuduğumu bende bilmiyorum :/

Tabii ki konuda da belirttim bunu zaten pratik yapıp kendiniz araştırarak öğrenmeniz daha sağlıklı. Ben sadece size neyin ne yaptığı hakkında fikir veriyorum ve daha fazlasını araştırmak istiyorsunuz.

Bu arada bir dili öğrenmek için kurs satın almak, kitap satın almak çok gereksiz ve yanlış bir yol. Bu yazılar size sadece fikir, heves ve teşvik veriyor. Yoksa ben de biliyorum her şeyi resmi dökümanlardan kopyalayıp çevirmeyi; ben burada işinize yarayabilecek ve yolun başındayken benim de "nedir bu" dediğim şeyleri kendimce açıkladım. Kitabı bilmem fakat bu Udemy'de satılan kurslar ile falan başlıyor çoğu kişi ve senin de dediğin gibi bir şey anlamıyorlar çünkü kurslar onlara araştırmayı değil sürekli kurs almayı para israfını öğretiyor..

reflectionlar kolaydır ya bu kadar zorlandığın yer neresi ? her şeyi test ederek öğrendim bende, zaman alıyor ama sıkıcı tut sayfalarından iyidir :D

Bende zamanında sadece işime yarayacak şeyleri araştırarak öğrendim, her şeyi öğreneceğim havasıyla girmedim. Basit den başlayıp gerektikçe araştırdım öyle öğrendim. Kendi kendine öğrenmek olarak tanımladığım şey zaten sihir ile zihninizi doldurup yükseliyorsunuz falan değil, kimse sizi yönlendirmeden kendi isteğiniz ile kendinizi geliştirmek, öğrenmek, keşfetmek için araştırıyor veya bir şeyleri okuyor iseniz bu kendi kendine öğrenmektir. Kullanma kılavuzu olmadan sadece deneme yanılma yaparak öğrenirsiniz ve bu çoğu zaman tehlikeli ve yavaş bir yoldur.
 

Bernard

Бернард
Site Danışmanı
Geliştirici
Mesajlar
1,286
En iyi cevaplar
61
Beğeniler
2,129
Puanları
5,790
Onlar detaylar, konunun amacı zaten insanları araştırmaya teşvik etmek. Tabii araştırarak buraya geldilerse orasını bilemiyorum, ingilizce ve resmi dökümanlardan araştırmak gerek.
Hayır detay değil. Kodlama yapmayı puzzle yapmayla karıştırmamalısın. Bir şeyi yapıyorsan olabildiğince iyi olmasına bakacaksın. Detay olması saçmalık. Yazılımda önce bir olayın mantığına bakarsın. Ondan sonra nasıl kullanacağını bulursun. Static yazdığında arkada olanları bilmezsen ne işe yarar ki? Static ile final aynı anda kullanıldığında neler oluyor gibi? Yahut final kullanımında neler oluyor? Kişi bunları bilmeden kod yazarsa yazacağı şey çöpten başka bir şey olamaz.
 

LifeMCServer

Nether Yerlisi
Mesajlar
2,410
En iyi cevaplar
98
Beğeniler
2,461
Puanları
10,250
Ruh hali
Hayır detay değil. Kodlama yapmayı puzzle yapmayla karıştırmamalısın. Bir şeyi yapıyorsan olabildiğince iyi olmasına bakacaksın. Detay olması saçmalık. Yazılımda önce bir olayın mantığına bakarsın. Ondan sonra nasıl kullanacağını bulursun. Static yazdığında arkada olanları bilmezsen ne işe yarar ki? Static ile final aynı anda kullanıldığında neler oluyor gibi? Yahut final kullanımında neler oluyor? Kişi bunları bilmeden kod yazarsa yazacağı şey çöpten başka bir şey olamaz.

Final ayrı bir konu. Onu açıklamak için önce override, inheritance olayını vesaire de açıklamak lazım çünkü Java'da C# ve diğer dillerin aksine final'in birçok anlamı var; sealed, const gibi birçok dilden birçok kelime ile aynı işi tek bir kelime ile görüyoruz. Öyle her şeyi açıklayacaksam insanlar ne zaman araştıracak? Kurs vermiyorum ben, kusura bakma.

Konuda sadece static'i ve this'i açıkladım. Static bloğu konusunda haklısın o bir ekstra bilgi fakat "Static methodlar jre tarafından program başlamadan kullanılabilir ve normal methodlardan önce yüklenir." kısmı bana gereksiz bir detay olarak geliyor. Yeni başlayan birisinin kafasını bu tür şeylerle karıştırmaya gerek yok. Kendisi öğrenmek istiyor ise JRE'nin nasıl çalıştığını ne gibi durumlar da ne yaptığını araştırabilir.

Ve evet kod yazabilmek çalıştırabilmek ve anlamak için static yazdığında arkada JRE'nin ne yaptığını nasıl çalıştığını bilmene gerek yok. Static'in classa ait olduğunu, static olmayan her şeyin ise objeye ait olduğunu bilmen yeterli. Gerisi bana kalırsa detay veyahut ekstra bilgi. Kötü mü değil, merakı olan araştırır öğrenir; ekstra bilgi hiçbir zaman kötü değildir fakat bu tür bir konuda kafa karıştırıcı olacaktır.
 

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Konuya karşı biraz gerekli biraz gereksiz eleştiriler gördüm. Konunun içeriğinde "Konumuz static olduğu için diğer şeylere olabildiğince az değinerek özetlemeye çalışıyorum. " yazılmış. Bu yüzden diğer şeylerin anlatılmamasını hesaba katarak eleştirmek bence doğru değil. Ama tabii ki öbür yandan diğer şeylere değinmeden anlatmak da insanlara pek bir şey katmayacaktır. O yüzden biraz eksik kaldığı söylenebilir. Tabii ki @LifeMCServer 'ın da söylediği gibi merakı olan araştırıp öğrenebilir.

Java Bilgileri | Bölüm 1
Zamanında böyle bir konuyla static'i yeterince iyi anlatmaya çalışmıştım.
 

Bernard

Бернард
Site Danışmanı
Geliştirici
Mesajlar
1,286
En iyi cevaplar
61
Beğeniler
2,129
Puanları
5,790
Konuda sadece static'i ve this'i açıkladım. Static bloğu konusunda haklısın o bir ekstra bilgi fakat "Static methodlar jre tarafından program başlamadan kullanılabilir ve normal methodlardan önce yüklenir." kısmı bana gereksiz bir detay olarak geliyor. Yeni başlayan birisinin kafasını bu tür şeylerle karıştırmaya gerek yok. Kendisi öğrenmek istiyor ise JRE'nin nasıl çalıştığını ne gibi durumlar da ne yaptığını araştırabilir.

Ve evet kod yazabilmek çalıştırabilmek ve anlamak için static yazdığında arkada JRE'nin ne yaptığını nasıl çalıştığını bilmene gerek yok. Static'in classa ait olduğunu, static olmayan her şeyin ise objeye ait olduğunu bilmen yeterli. Gerisi bana kalırsa detay veyahut ekstra bilgi. Kötü mü değil, merakı olan araştırır öğrenir; ekstra bilgi hiçbir zaman kötü değildir fakat bu tür bir konuda kafa karıştırıcı olacaktır.
Ben yeni başlayan biriyken arkadaşım sayesinde tüm günümü Java'ya ayırdım ve hala yeni başlamış (2-3 aylık) biri iken bunların hepsini öğrendim. 2-3 aylık birisinin yeni başlamış olması gayet normal. Çünkü kod yazmak 2-3 sınıf açabilmeyi öğrenmeyle bitmiyor. Gerçekten Java bilmeyide düşünürsek şu anda benim bilgim dahi orta seviyeye erişemiyor dahi. Öğrenirken detayları öğrenmezsen öğrendiğin şeyi gerçekten kullanamazsın. Static bir modifier demek hiçbir şey anlatmıyor.

Kod yazabilmek derken kör kodlama dememiştim. Gerçekten ne yazdığını ve her kelimesinin ne işe yaradığını bilerek, performansa ve çalışma düzenine dikkat ederek yazma demiştim. Tamam, bulunduğumuz süreçte "System.out.println()" yazan kendisine kod yazıyorum diyebilir fakat onlar olduğu için kod yazmanın aslın anlamını dahada basit düzeylere indirgemeye gerek yok.
 

LifeMCServer

Nether Yerlisi
Mesajlar
2,410
En iyi cevaplar
98
Beğeniler
2,461
Puanları
10,250
Ruh hali
Ben yeni başlayan biriyken arkadaşım sayesinde tüm günümü Java'ya ayırdım ve hala yeni başlamış (2-3 aylık) biri iken bunların hepsini öğrendim. 2-3 aylık birisinin yeni başlamış olması gayet normal. Çünkü kod yazmak 2-3 sınıf açabilmeyi öğrenmeyle bitmiyor. Gerçekten Java bilmeyide düşünürsek şu anda benim bilgim dahi orta seviyeye erişemiyor dahi. Öğrenirken detayları öğrenmezsen öğrendiğin şeyi gerçekten kullanamazsın. Static bir modifier demek hiçbir şey anlatmıyor.

Kod yazabilmek derken kör kodlama dememiştim. Gerçekten ne yazdığını ve her kelimesinin ne işe yaradığını bilerek, performansa ve çalışma düzenine dikkat ederek yazma demiştim. Tamam, bulunduğumuz süreçte "System.out.println()" yazan kendisine kod yazıyorum diyebilir fakat onlar olduğu için kod yazmanın aslın anlamını dahada basit düzeylere indirgemeye gerek yok.

  • Konuda static sadece bir modifier'dır fazla kurcalamayın arkadaşlar deseydim haklı olabilirdin; konu da zaten yeterince detay ile anlattım.
  • Öğrendiğin şey hakkında detayları öğrenemezsen öğrendiğin şeyi gerçekten kullanamazsın diyorsun da adamın static'i kullanabilmesi için illa "JRE'nin static methodları daha önce yüklediğini" veya "Static bloğunun ne iş yaptığını" bilmesi mi lazım? İlk dediğin zaten sadece bir detay, ikinci dediğin ise ayrı bir konu.
  • Bir şey basitleştirilince sen ne kaybediyorsun? System.out#println ile Hello World! yazan birisi kod yazıyordur. İlk kodu olsa da yazmıştır. Şimdi sen bu adama çıkıpta "performansına, çalışma düzenine dikkat ederek yaz!" dersen adamın hevesi kırılır. Java zaten oldukça high level bir dildir ve performans gibi şeylere kafa takmamanız gerekir. Kafa takacaksanız da bu çoğu zaman "premature optimization is the root of all evil" sözünün karşılığı olacaktır. System.out#println gibi basit bir kodu nasıl optimize ederiz, veya static kelimesini nasıl ultra süper über optimizeli kullanabiliriz, açıklayabilir misin?
Konuda modifier'ı ve static'i senin gördüğünden daha detaylı anlattım. Senin dediğin gibi modifier diyip geçseydim haklısın derdim. Java tek bir konudan tek seferde öğrenilebilecek bir dil değil. Senin de dediğin gibi her şeyin bir sürü detayı var. Bunları teker teker araştırıp öğrenmek size kalmış. Sen stackoverflow'a bir hatadan dolayı girdiğinde adam sana hatanın çözümü yerine 2 sayfalık bir paragraf yazsa veya sadece bir link atsa hoşuna gider mi? Kısaca hatanının nedenini ne yaptığını açıklar çözümü sunar. Buda onun gibi bir şey. Sen adama hazır olarak tüm detayları sunar isen bu adam ne zaman kendisi keşfedecek? Sen sana static ne diye soran birine "static şudur budur, jre şöyle yapar böyle yapar, static bloğu vardır" diye mi anlatıyorsun? Bırakta static bloğunu da kendi keşfetsin. Bir kodda gördüğünde "neymiş bu, araştırayım bir" desin.

Kör kodlama dediğin olay youtube veya udemy'den kurs alıp ezbere kod yazmaktır, kelimelerin anlamlarını bilmeden yazmaktır. Bu konuda da en azından 2 kelimenin anlamını öğreniyoruz; static ve this. Senin verdiğin "staticler daha önce yüklenir" tarzı bir bilgi tamamen gereksiz bir bilgi, bu tür bir bilgiyi "kör kodlama yapıyorsunuz bunu bilmez iseniz javayı hiçbir zaman tamamen öğrenemezsiniz" tarzı bir savunma ile savunman yanlış.

İnsanların bir kod yazıp ben kod yazabiliyorum demesi seni ne gibi bir durumda nasıl rahatsız ediyor? System.out#println ile Hello World! yazan kişi ilk uygulamasını yapmıştır ve kod yazıyordur, senin dediğin olay bir şey bilmeden ezbere yazanlar ve üstüne bir de "ben javacıyım, uzmanım" diye geçinenler için geçerli. Bu tür kişiler için çıkıpta yeni başlayan bir arkadaşın hevesini "sen kod yazmıyorsun, kod yazmak için sürekli araştırman tüm detayları öğrenip kafayı sıyırman gerek!" diye kırmamamız gerek.

Her kelimenin ne yaptığını bilmeden kod yazıyorsan ezberden kör olarak yazıyorsundur demişsin, doğrudur. Fakat ben burada static ve this'i açıkladım zaten. Arkada JRE'nin static methodları daha önce yüklemesi veya static bloğu yeni başlayan birine ne katabilir? Static methodlar daha önce yükleniyor; artık uzaya çıkabilirim! Static bloğu gayet yararlıdır; fakat bu ayrı bir konudur.

Lütfen konunun özet kısmını okuyup bir kere daha "static modifier deyip geçmemek lazım !1" şeklinde yorum yapmayın, rica ediyorum. Konuda zaten modifier nedir static ve this nedir onlar da yazıyor basit şekilde.
 

Üst