Forum » Programiranje » Java program
Java program
nokaut240 ::
Delam nek program v Javi, pa ne deluje tako, kot sem pričakoval. Tako da če kdo lahko pomaga, naj mi piše na ZS, pa mu bom poslal svojo kodo pa navodila kako in kaj.
Spura ::
nokaut240 ::
kunigunda ::
Sam ce oblubs, da si prej vsaj en link od googlovih 153mio zadetkov pogledu kaj je to...
killa bee ::
mene tut zanima kaj pomen static. Zanima me tudi če pomen isto za class, f-jo in spremenljivko.
Spura ::
static pomeni, da je stvar vidna na nivoju razreda in nima zveze s posameznimi primerki razreda
kaj static pomeni pri razredih, se raje ne ukvarjite, preden boste mal bolj obvladal.
kaj static pomeni pri razredih, se raje ne ukvarjite, preden boste mal bolj obvladal.
killa bee ::
A ni razred samo na "papirju" vse kar obstaja(v pomnilniku) so primerki razreda imenovani objekti.
Zgodovina sprememb…
- spremenilo: killa bee ()
Spura ::
Ne, razred tudi obstaja v pomnilniku. In sicer kot objekt razreda Class. Nekje morajo bit spravljene static spremenljivke. Poleg tega nekje mora bit spravljena koda (bytecode) od funkcij razreda.
killa bee ::
aha, seprav če je funkcija static pol je samo enkrat v pomnilniku če pa ni static pol je pa za vsak primer objekta
kunigunda ::
Na slovenske izraze se ne spoznam, vendar mislim da je razred isto kot objekt (se pravi Class).
Static pomeni, da se bo v memorijo nalozil le enkrat in bo potem skoz prisoten (brez referenc za garbage collector) ne glede kolikokrat
se objekt s Static metodo kreira. Isto za spremenljivke.
Prav tako lahko static metodo klicemo znotraj objekta, ne da bi ga kreirali.
Static pomeni, da se bo v memorijo nalozil le enkrat in bo potem skoz prisoten (brez referenc za garbage collector) ne glede kolikokrat
se objekt s Static metodo kreira. Isto za spremenljivke.
Prav tako lahko static metodo klicemo znotraj objekta, ne da bi ga kreirali.
Zgodovina sprememb…
- spremenilo: kunigunda ()
Spura ::
aha, seprav če je funkcija static pol je samo enkrat v pomnilniku če pa ni static pol je pa za vsak primer objekta
Ne, funkcija je vedno v memoriju samo enkrat. Pravim da je class v memoriju samo enkrat, in class so metode ter staticne spremenljivke. Staticne metode so pa sintaksno drugacne od navadnih metod v tem, da lahko dostopajo samo do staticnih spremenljivk in za klic ne potrebujejo primerka razreda in potem seveda nimajo "this" primerka razreda. Lej implementacija, kje in kolikokrat je kaj v memoryu je ena stvar, sintaksa jezika in scope je pa druga.
Prav tako lahko static metodo klicemo znotraj objekta, ne da bi ga kreirali.
Static metodo lahko klicemo od kjerkoli (ce je vidna iz tiste tocke v programu - npr. public metoda na public classu).
kunigunda ::
Spura ::
Class je definicija razreda objektov. Razred je skupina stvari z dolocenimi skupnimi lastnostmi npr. cenovni razred.
kunigunda ::
Objekt bi nekako lahko interpretirali kot memorijska implementacija instance ki jo definira razred.
Spura ::
Ne vem kva je tle jebeni problem. Razred je razred, objekt pa objekt. Objekt je instanca nekega razreda, instanca je relacijski opis in ni samostojen koncept. Nehite ze enkrat mutit.
kunigunda ::
Pisemo da se bo kdo naucil. Mutis pa ti ker v zadnjih dveh postih pises netocne definicije kar sam se bolj zmedejo.
- Instanca ni relacijski opis in je samostojna
- Instanca ni relacijski opis in je samostojna
Mavrik ::
- Instanca ni relacijski opis in je samostojna
Kaj to sploh pomeni? A znaš to razložit?
The truth is rarely pure and never simple.
kunigunda ::
Tud jest ne vem tocno kaj je spura mislu, definitivno pa instanca ni nikakrsen opis, temvec navaden kreiran objekt dolocenega razreda
Marat ::
Objekt je instanca razreda (razred je po angleško class).
Po domače povedano: razred je tiskarska matrica, objekt je pa vsak odtis na papirju ki je bil narejen s to matrico. Dovolj jasno?
Po domače povedano: razred je tiskarska matrica, objekt je pa vsak odtis na papirju ki je bil narejen s to matrico. Dovolj jasno?
killa bee ::
če govoriš po domače ne uporabljat izraz tiskarska matrica IMHO
Zgodovina sprememb…
- spremenilo: killa bee ()
Spura ::
Tud jest ne vem tocno kaj je spura mislu, definitivno pa instanca ni nikakrsen opis, temvec navaden kreiran objekt dolocenega razredaPrvo kot prvo, je Mavrik mislu tebe, da obrazlozi.
Objekt je objekt. Objekt je primerek razreda, in kot sm napisal beseda primerek opisuje relacijo med pojmoma objekt in razred. Marko je lastnik avtomobila. Lastnik je opis relacije. Relacijski opisi imajo samostojno pomen samo izjemoma.
Pisemo da se bo kdo naucil. Mutis pa ti ker v zadnjih dveh postih pises netocne definicije kar sam se bolj zmedejo.
- Instanca ni relacijski opis in je samostojna
Da jst mutim pri definicijah mi rece model ki je rekel:
vendar mislim da je razred isto kot objekt (se pravi Class).
in pa:
Prav tako lahko static metodo klicemo znotraj objekta, ne da bi ga kreirali.
in pa:
Objekt bi nekako lahko interpretirali kot memorijska implementacija instance ki jo definira razred.
Kar je vse zelo zelo zelo narobe in kaze da nimas niti najmanjse kognicije kaj ti koncepti so in nima smisla da se trudis z definicijami. Vazno da ti koda dela.
kunigunda ::
Da ti se razlozim:
- Objekt je primerek razreda, in kot sm napisal beseda primerek opisuje relacijo med pojmoma objekt in razred.
Primerek(instance) nic ne opisuje.
- vendar mislim da je razred isto kot objekt (se pravi Class)
Ko sem jaz zacel se ni bilo nobenega slovenskega izraza niti se jih ne nameravam ucit ker so mi smesni.
- Prav tako lahko static metodo klicemo znotraj objekta, ne da bi ga kreirali.
True
- Objekt bi nekako lahko interpretirali kot memorijska implementacija instance ki jo definira razred.
True
- Objekt je primerek razreda, in kot sm napisal beseda primerek opisuje relacijo med pojmoma objekt in razred.
Primerek(instance) nic ne opisuje.
- vendar mislim da je razred isto kot objekt (se pravi Class)
Ko sem jaz zacel se ni bilo nobenega slovenskega izraza niti se jih ne nameravam ucit ker so mi smesni.
- Prav tako lahko static metodo klicemo znotraj objekta, ne da bi ga kreirali.
True
- Objekt bi nekako lahko interpretirali kot memorijska implementacija instance ki jo definira razred.
True
darkkk ::
sandmat ::
hm, kunigunda, tvoj prvi post je pač totalno narobe. Brez zamere, ampak ne izgleda, da popolnoma razumeš.
Razred = class
object = objekt
objekt je instanca razreda (in nikakor ni to kar vse isto, kar si napisal v prvem postu).
Lp
Razred = class
object = objekt
objekt je instanca razreda (in nikakor ni to kar vse isto, kar si napisal v prvem postu).
Lp
morbo ::
btw, instanci ("primerku") se v slovenski literaturi reče izvod. (da še jaz dodam košček puzzla tej fenomenalni temi :))
@kunigunda, rofl, just stop it please.. :)
@kunigunda, rofl, just stop it please.. :)
smoke ::
- Prav tako lahko static metodo klicemo znotraj objekta, ne da bi ga kreirali.
True
- Objekt bi nekako lahko interpretirali kot memorijska implementacija instance ki jo definira razred.
True
Tole sicer ni Java (in v Javi, to ne dela iz drugih razlogov..), ampak C++. Praviš da se torej komaj z kreacijo objekta ustvari primerek razreda v spominu. Razloži zakaj tale koda deluje, čeprav nisem kreiral nobenega objekta, in metoda ni static :
#include <iostream> using std::cout; class T { public: T() = default; void print() { cout << "hello, world\n"; } }; int main() { T* t = nullptr; t->print(); return 0; }
kunigunda ::
hm, kunigunda, tvoj prvi post je pač totalno narobe. Brez zamere, ampak ne izgleda, da popolnoma razumeš.
Razred = class
object = objekt
objekt je instanca razreda (in nikakor ni to kar vse isto, kar si napisal v prvem postu).
Lp
Jao, k da bi govorl razlicne jezike. Sej jest to cel cajt govorim.
morbo ::
kunigunda ::
Res je, prav bi bilo da static metodo lahko klicemo znotraj razreda, ne da bi kreirali objekt
smoke ::
Kak to mislis "znotraj" razreda? No, sicer je pa Spura povedal pravilno definicijo ze na zacetku teme.. tak da ne razumem kaj je toliko za debatirat..
mallard ::
@smoke
Sej tudi to ne "deluje", ampak je UB. Malo za lase privlečen primer, se ti ne zdi? Malo spremeniš primer in dobiš lep crash:
Je res, da se metode razredov naložijo v spomin ob zagonu, kar pa še ne pomeni, da jih lahko (razen statičnih) kličeš brez instance objekta.
Sej tudi to ne "deluje", ampak je UB. Malo za lase privlečen primer, se ti ne zdi? Malo spremeniš primer in dobiš lep crash:
struct T { int i; T() : i(0) {} void foo() { i = 42; } }; int main() { T* t = nullptr; t->foo(); }
Je res, da se metode razredov naložijo v spomin ob zagonu, kar pa še ne pomeni, da jih lahko (razen statičnih) kličeš brez instance objekta.
kunigunda ::
Kako pa C++ alocira staticne metode ? Ga ne poznam tolk. Pri Javi se staticne metode nalozijo v poseben Permanent Heap (locen od VM heapa).
Zgodovina sprememb…
- spremenilo: kunigunda ()
smoke ::
@smoke
Sej tudi to ne "deluje", ampak je UB. Malo za lase privlečen primer, se ti ne zdi? Malo spremeniš primer in dobiš lep crash:
struct T {
int i;
T() : i(0) {}
void foo() { i = 42; }
};
int main()
{
T* t = nullptr;
t->foo();
}
Je res, da se metode razredov naložijo v spomin ob zagonu, kar pa še ne pomeni, da jih lahko (razen statičnih) kličeš brez instance objekta.
Okej, mogoče je res, ampak point je bil, da je vsak razred že primerek samega sebe. (torej ni samo "šablona" po kateri se objekti kreirajo) Vsebuje stvari ki so skupne za vse objekte, torej metode (tiste ki niso virtualne) in pa statične spremenljivke. This pointer je pa samo kazalec do spomina, ki vsebuje stvari, ki so objektne. V končni fazi se pa kličejo iste metode ne glede na to na kateri objekt se sklicuješ, ampak seveda z različnim (skritim) this pointer argumentom.
Lep pozdrav
kunigunda ::
Mogoce pa C++ ze sam naredi instanco z definicijo razreda. C++ itak ni cisti objektni jezik, kot je Java.
kunigunda ::
Aha sem pogledal. Ce v C++ ne uporabis new za instanco, sam kreira objekt ko klices razred. Razlika je, da v tem primeru
kreira zacasni objekt na stack-u, medtem ko pri instanci z "new" kreira objekt na Heap-u.
kreira zacasni objekt na stack-u, medtem ko pri instanci z "new" kreira objekt na Heap-u.
smoke ::
V primeru da napišeš tako:
Se prostor za ta objekt rezervira na stacku že ob prevajanju. Ampak konstruktor se pa zažene komaj ob runtime-u. Čeprav tut to ni pravilo. Če imaš konstruktor ki je "constexpr", lahko že prevajalnik incializira objekt ob prevajanju, če so vrednosti znane.
Če pa stvar narediš tako:
Se pa na stacku rezervira prostor samo za kazalec do objekta to pa je lahko 4 bajte (na 32bit arhitekturi) ali 8 bajtov (na 64bit arhitekturi).
Kaj se pa tiče "objektnosti" C++ jezika. To da ni "pravi" objektni jezik je malo butasto. Res da ne rabiš objektno pisat ampak tut v Javi ne rabiš. V Javi to zgleda tako da imaš pač kr vse v main classu, v C++ pa tako da classov sploh ne uporabiš. Ampak stvar je ista, v obeh primerih efektivno koda ni objektna.
Test t;
Se prostor za ta objekt rezervira na stacku že ob prevajanju. Ampak konstruktor se pa zažene komaj ob runtime-u. Čeprav tut to ni pravilo. Če imaš konstruktor ki je "constexpr", lahko že prevajalnik incializira objekt ob prevajanju, če so vrednosti znane.
Če pa stvar narediš tako:
Test* t = new Test();
Se pa na stacku rezervira prostor samo za kazalec do objekta to pa je lahko 4 bajte (na 32bit arhitekturi) ali 8 bajtov (na 64bit arhitekturi).
Kaj se pa tiče "objektnosti" C++ jezika. To da ni "pravi" objektni jezik je malo butasto. Res da ne rabiš objektno pisat ampak tut v Javi ne rabiš. V Javi to zgleda tako da imaš pač kr vse v main classu, v C++ pa tako da classov sploh ne uporabiš. Ampak stvar je ista, v obeh primerih efektivno koda ni objektna.
kunigunda ::
Razlika je da je pri javi ze osnovni modul razred ki naredi ob runtimu objekt docim je pri c++ osnovni modul navadni. To sem mel v mislih se pravi je java od zacetka objektna
Senitel ::
Ni čist res. Še zmer moraš na roke instancirat ta razred. Sam entry point je še zmer statična metoda.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java] CastanjeOddelek: Programiranje | 1531 (1386) | fiction |
» | Rekurzija v javi z ArrayListOddelek: Programiranje | 1575 (1418) | marjan_h |
» | c# classOddelek: Programiranje | 2262 (1856) | japol |
» | [JAVA] zaustavitev niti (threadov)Oddelek: Programiranje | 3171 (3171) | morbo |
» | [c++] globalne spremenljivke (extern)Oddelek: Programiranje | 1576 (1449) | Vesoljc |