reklama
Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

Java - dotazy

P@pi (1519)|27.1.2008 16:58
Do tohoto threadu pište dotazy směřující na programovací jazyk Java.

Protože studuji IT na vejšce v ČB, patří do mého repertoáru povinných předmětů i programování v Javě. A jelikož se mi nechce lézt na jiné fórum a vím, že jsou tu lidé, kteří programování rozumí, tak mám jeden strašně tvrdý oříšek.

[CODE]private static final Random generator = new Random();[/CODE]

Nemůžu nikde najít co znamená static. Prosím link na nějaký inteligentně sepsaný kus textu nebo ideálně vysvětlení. Netuším totiž rozdíl mezi statickou final a pouze final proměnnou. Co tedy přesně dělá toto klíčové slovo?
pavel_p (993)|27.1.2008 17:18
Ve stručnosti to znamená, že tato konstanta bude existovat vždy bez ohledu na to, jestli byla vytvořena třída, která ji obsahuje přes new ... je to užitečné u konstant a pomocných metod, kterým jsou předány pouze parametry a neodkazují se na žádné nestatické objekty třídy (typicky různé pomocné funkce).
Vysvětlení se najít dá, přes google: java static, nebo přes torrent stáhnout nějaké obecné knížky o Javě.

Náhodně nalezené vysvětlení:
[quote]Static methods use no instance variables of any object of the class they are defined in. If you define a method to be static, you will be given a rude message by the compiler if you try to access any instance variables. You can access static variables, but except for constants, this is unusual. Static methods typically take all they data from parameters and compute something from those parameters, with no reference to variables. This is typical of methods which do some kind of generic calculation. A good example of this are the many utility methods in the predefined Math class. (See Math and java.util.Random).[/quote]
Intri (3490)|27.1.2008 17:24
Snad to nespletu, nejsem si tím úplně jistý, ale mám dojem, že to slouží k tomu, aby daná proměnná/metoda byla v dané třídě unikátní pro všechny instance. Když budeš mít třeba třídního člena a zadefinovaného bez staticu, každá instance si ho může nastavit podle sebe. Pokud z něj uděláš static, budou mít všechny instance v této proměnné stejnou hodnotu.

Takže příklad:

Třída člověk, nestatický třídní člen "barva_pleti". Dvě instance: P@pi a Intri. P@pimu nastavíš barvu pleti na bílou, Intrimu na černou. To jde v pohodě. Teď, když změníš člen "barva_pleti" na static, stane se to, že když P@pimu nastavíš barvu na bílou, Intriho vymaluješ taky na bílo, nehledíc na to, jak moc barevný byl předtím.

P.S.: Všechny postavy jsou smyšelné, jakákoliv podobnost s existujími postavami je čistě náhodná.

EDIT: Hmm, tak podle výkladu od Pavla si to pletu... Tak nic. Ale teď by mě zajímalo, jestli mám nějak pokroucenou paměť, nebo si tohle pletu s jinou vlastností.
P@pi (1519)|27.1.2008 17:33
Ten anglický originál mi dává celkem smysl. Díky, asi neumím hledat :-).
pavel_p (993)|27.1.2008 18:46
[QUOTE=Intri;84864]Snad to nespletu, nejsem si tím úplně jistý, ale mám dojem, že to slouží k tomu, aby daná proměnná/metoda byla v dané třídě unikátní pro všechny instance. Když budeš mít třeba třídního člena a zadefinovaného bez staticu, každá instance si ho může nastavit podle sebe. Pokud z něj uděláš static, budou mít všechny instance v této proměnné stejnou hodnotu.

EDIT: Hmm, tak podle výkladu od Pavla si to pletu... Tak nic. Ale teď by mě zajímalo, jestli mám nějak pokroucenou paměť, nebo si tohle pletu s jinou vlastností.[/QUOTE]

Myslím, že se toto nevylučuje, proměnou static jsem však asi nikdy nepoužil.
Tvoje vysvětlení je určitě správné pro C, kde se proměnné static chovají tak, že existují po celou dobu existence programu a jejich hodnota zůstává zachována i po opuštění a dalším volání funkce. V Javě static používám pro konstanty a metody, které pak lze použít i když třída nemá žádnou instanci.

EDIT: souhlasím se svým i Intriho výkladem, nejsou nekompatibilní :)
Milan Šurkala (160)|27.1.2008 20:13
V Javě jsem už nějaký ten pátek neprogramoval, ale souhlasil bych s výkladem Intriho. Vím, že jsem někdy něco podobného potřeboval a tím static vlastně nastavíš dané proměnné jediné pevné místo v paměti, v podstatě nějaká globální proměnná. Ale nechci tady mystifikovat, už si to vážně nepamatuju. To by ze mě měli ve škole radost :-)
Intri (3490)|27.1.2008 20:50
[quote=pavel_p;84902]Myslím, že se toto nevylučuje, proměnou static jsem však asi nikdy nepoužil.
Tvoje vysvětlení je určitě správné pro C, kde se proměnné static chovají tak, že existují po celou dobu existence programu a jejich hodnota zůstává zachována i po opuštění a dalším volání funkce. V Javě static používám pro konstanty a metody, které pak lze použít i když třída nemá žádnou instanci.

EDIT: souhlasím se svým i Intriho výkladem, nejsou nekompatibilní :)[/quote]

Jo, vidíš to, Cčko, to je ono... S ním si to pletu. Nám o tom říkali na střední, tak mi to utkvělo v paměti, a teď jsem nevěděl, jestli to nevím náhodou už z vysoké z prvního semestru.
eraser (0)|30.1.2008 18:45
Pozor, nemýlte si kľúčové slovo static a jeho významy v OOP a klasickom procedurálnom C jazyku (K&R C, ANSI C).