javageci

pure Java, what else ?

Havi archívumok: október 2013

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.

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

Hány tömb indexet lehet egy változó után írni? Írhatok a[1][1][1][1]....[1] akárhány tömb indexet?

A türelmetlenek kedvéért elmondom: maximum 255 index lehet.

A még türelmetlenebbek kedvéért, akik mint a kismalac a gödörben nem hajlandók várni: kit érdekel?

Tulajdonképpen nekik van igazuk, hacsak nem akarjuk a Java nyelvet célnyelvként használni, azaz valamilyen bemenetről arra fordítani. Persze ez sem lehetetlen, és Java 6, 7 stb. óta a fordító is része a Java környezetnek, akár le is fordíthatjuk a generált kódot, és be is tölthetjük és meg is hívhatjuk azonnal. (Lásd még https://github.com/verhas/jscglib és https://github.com/verhas/jscc ha ilyesmire vágysz.)

Valójában azonban ebbe a 255-ös határba nem nagyon fogunk gyakran beleütközni. Magam sem kerültem szembe ezzel a limitációval éles helyzetben, és ha eszembe is jutott, hogy van-e rá limit, valószínűleg elhessegettem a gondolatot azzal, hogy a Java normális nyelv (az is) és a fordító számára rendelkezésre álló memórián kívül nincs más limit. És valóban, a Java nyelvben, mint absztrakt, a JLS által definiált programozási nyelvben valóban nincs ilyen limit. De a megvalósításban van. Ha nagyon szigorú akarok lenni, akkor azt is mondhatom, hogy a SUN/ORACLE Java megvalósítás nem felel meg a szabványnak. No de ez teljesen akadémikus, és értelmetlen lenne, még ha igaz is.

Történt azonban, hogy a JVM specifikációt olvastam, és ott elébem került az array létrehozás byte kódja és ott bizony a dimenziók száma 1 bájton van tárolva. Akkor pedig …

Java Horror 4

Motto: Olyan dolgok a Java nyelvről, amelyekről nem tudtál, és azt kívánod, bár most se tudnád.

    int $_() {
        $_: {
            try {
                return 1;
            }
            finally {
                break $_;
            }
        }
        return 0;
    }

Java Horror 3

Motto: Olyan dolgok a Java nyelvről, amelyekről nem tudtál, és azt kívánod, bár most se tudnád.

    Map z = new HashMap() {{ put("A",1); put("B",2);}};

Most csak nézel? Aztán előveszed az Eclipse-t. És csodálkozol, mert lefordul, és működik is. Aztán rájössz.

Java Horror 2

Motto: Olyan dolgok a Java nyelvről, amelyekről nem tudtál, és azt kívánod, bár most se tudnád.

    int div(final int a, final int b) {
        while (true) {
            try {
                return a / b;
            } finally {
                if (b == 0) {
                    return Integer.MAX_VALUE;
                }
            }
        }
    }

Néha kapok ilyen példákat, hogy erről is írhatnék cikket. Erről nincs mit írni. Ez teljesen Antal minta. (gy.k.: anti pattern)