tifyty

pure Java, what else ?

Java interjú kérdés, eszelős szívatás / 2

Ez egy olyan kérdés, amit soha nem tennék fel. Pedig a válasz sok mindent elárulna.

Miben különbözik Java-ban egy statikus és egy nem statikus konstruktor?

Ezzel a kérdéssel elég sok embert zavarba lehetne hozni, pláne egy stresszes interjú szituációban. És most csak magadnak tedd fel a kérdést, hogy elkezdenél-e gondolkodni, hogy hogy is van ez, vagy elmosolyodsz a kérdés hallatán.

8 responses to “Java interjú kérdés, eszelős szívatás / 2

  1. hron84 október 31, 2013 8:39 du.

    Ugy tudom a Javaban hivatalosan csak egyfele konstruktor van… Lehet statikus inicializalo blokkokat csinalni, de az nem konstruktor szvsz

  2. S.E. október 31, 2013 11:12 du.

    Az a különbség a statikus és a nem statikus konstruktor között, hogy míg az előbbi létező dolog, addig az utóbbi már nem az.

  3. Verhás István november 4, 2013 4:55 du.

    Jó kérdés. Valójában a java-ban konstruktor van. Nincs statikus konstruktor és nincs nem statikus konstruktor sem. Az alábbi osztály definíció is szintaktikailag rendben van:

    public class Wtf {
    
        public Wtf() {
            System.out.println("wtf constructed");
        }
    
        public void Wtf() {
            System.out.println("wtf called");
        }
    
        public static void main(String... args) {
            new Wtf().Wtf();
        }
    }
    

    Ha a konstruktorra mint metódusra gondolunk (pedig nem az!) akkor ugye annak nincs visszatérési értéke. Ha pedig java-ban egy metódusnak nincs visszatérési értéke akkor azt kell mondani, hogy void. De a konstruktornál nincs ott a void sem, pont innen tudja a fordító, hogy ez egy konstruktor. Meg a nevéből, de az lehet egy metódusnak is ugyanaz.
    Ha egy objektum életciklusából indulunk ki akkor könnyű megérteni a konstruktor különcségének lelki világát. A nem statikus metódusok a példány létrehozása után hívhatóak meg és a példányhoz kapcsolódnak. A konstruktor nem kapcsolódhat ilyen módon a példányhoz mivel akkor kell lefusson amikor még nincs készen a példány. A statikus metódusok az osztályhoz tartoznak és meghívhatóak létező példány nélkül is. Ilyen metódus lehetne a konstruktor de nem az lett főleg az öröklődés miatt, ilyen a getInstance()/factory pattern esetén fordul elő.

  4. Egy olvaso november 5, 2013 6:30 du.

    Lenne egy egyszerű (naív) olvasói kérdésem.

    Van egy osztály:

    	class Foo {
    		void storeStringList(List<String> o) {
    			storeList(o); // <--- miert nem?
    		}
    		
    		void storeList(List<Object> o) {
    			// DO something
    		}
    	}
    

    a storeStringList() metódusban a storeList(o) hivást miért nem fogadja el a fordító?

  5. hoat4 december 12, 2015 7:55 du.

    A Java 10-ben a Value Type-okat a jelenlegi tervezet alapján statikus konstruktorral lehet létrehozni.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

%d blogger ezt kedveli: