Aloin harjottelemaan javalla koodaamista, ja tuli tarve saada siirettyä kaksi taulukkoa toisesta luokasta pää luokkaan,eli
Ohjelman alku
Ikkunan luonti
Ohjaus palkki
ohjelma mitä kutsutaan ikkuna ohjelmasta.
Ohjelman rakenne on tuommoinen,
tuo ohjelma(vai onko se olio? nimeltään) käsitteleen ohjaus palkin teksti kenttiä, ja niiten data pitäisi saada siirettyä takaisin ikkuna ohjelmaan.
Miten tämä siis tapahtuu?
ps. Vielä vähän sekaisin tämän luokka/olio ohjelmoinnin suhteen.
Katso jos aikaa sitten kirjoittamani koodivinkki sattuisi olemaan hyödyksi.
Olioon, jota ikkuna kutsuu tulisi laittaa seuraavaa vastaava metodi:
//ikkunaluokkaan ... public void setArray(String [] arr){ ikkunaArray=arr; //ikkunaluokassa oma taulukko, johon tieto tallennetaan ja josta sitä voidaan käyttää } ... public String[] getArray(){ return ikkunaArray; //välissä on muokattu taulukkoa halutulla tavalla ja tämä metodi palauttaa muokatun taulun } ...
Pääluokassa sitten kutsut kyseisiä metodeja:
... Ikkuna ikku = new Ikkuna(); //tässä luodaan uusi instanssi ikkunaluokasta ... ikku.setArray(taulu); //annetaan taulu toiselle oliolle paaluokanTaulu=ikku.getArray(); //pääluokassa olevaan taulukkoon tallennetaan ikkunaluokan palauttama taulu ...
Koodi ei ole mitenkään valmis, vaan ajan säästämiseksi jätin kaikki epäoleelliset metodit ja muut kirjoittamatta. Varmasti tästä on jotain hyötyä.
Kiitti vastuksesta.
Eli return komento voi paulauttaa myös täyden taulukon?
En vaan mistään löytänyt koodia missä olis ollut niin, ja yrittämällä en saanut oikeaa syntakiaa, niin luulin sen olevan mahdotonta.
Mutta pitääpä testata, ilmoittelen miten kävi.
Edit, Juu tuntuu toimivan kuten pitääkin. Kiitokset vielä.
Kannattaa muistaa, että kyseessä on viittaus siihen samaiseen taulukkoon, joten taulukon muuttaminen yhdessä paikassa vaikuttaa jälkikäteen myös taulukkoon toisessa paikassa. (Javassa viittauksia ovat kaikki paitsi perustietotyypit.)
Olio tarkoittaa sitä, että jostakin luokasta luodaan ilmentymä(olio) jota sitten voidaan käyttää...
Esim:
public class luokka { public static void metodi() { int luku = 2; int luku2 = 3; int luku3 = 2+3; } public static void main(String[] args) { luokka olio = new luokka(); // luodaan ilmentymä luokasta "luokka" olio.metodi(); // suoritetaan "metodi" olion kautta } }
en muistanut, miten se tehdään toiseen luokkaan eri tiedostosta, joten tein sen nyt näin...
mutta siis: Olio on luokasta tehty ilmentymä, oliota ei ole, ennen kuin se erikseen luodaan jostakin luokasta... hankala selittää luokka. :D
Tommittaja: eihän tuo sun sepustus nyt liity mitenkään käsiteltävään aiheeseen?
ei periaatteessa, mutta tuo pielinen sanoo: Vielä vähän sekaisin tämän luokka/olio ohjelmoinnin suhteen. joten laitoin tuon selvennykseksi :)
Niin ja jos niitä esimerkkejä antaa, niin kannattaisi tarkistaa että ne ovat oikein. Tuossa Tommittaja nimittäin koitat luoda olio-luokasta luokka nimistä ilmentymää. Ja muutenkin hieman hassu esimerkki, kun kutsut staattista metodia olion kautta. Voihan sen toki niinkin tehdä.
No, onko nyt oikein? =) en ole kyllä hirveästi käyttänyt olioita, mutta onko?
Tommittaja kirjoitti:
ei periaatteessa, mutta tuo pielinen sanoo: Vielä vähän sekaisin tämän luokka/olio ohjelmoinnin suhteen. joten laitoin tuon selvennykseksi :)
Luulen, että Pielinen on enemmän sekaisin tuon esimerkkikoodin jälkeen.
äläs nyt, yritän vain auttaa.. :(
Tommittaja: Miksi metodi on staattinen, jos sitä kerran kutsutaan ei-staattisesta ympäristöstä?
Ja sitten Javassa muistetaan nuo mukavat konventiot, joihin kuuluu luokkien aloittaminen isolla alkukirjaimella.
Metabolix kirjoitti:
Tommittaja: Miksi metodi on staattinen, jos sitä kerran kutsutaan ei-staattisesta ympäristöstä?
hmm... en oikein tiedä, olen vain tottunut laittamaan metodit staattisiksi, koska yleensä kutsun niitä päämetodista.
siis.. ajattelin, että kun tuo olio luodaan päämetodissa, joka on staattinen, että sen pitäisi siis ollakin staattinen..
Eikös staattisia metodeita kutsuta ilman oliota?
tuo oli nyt vaan semmoinen esimerkki, jolla selitin olion ja luokan eron...
tavallisestihan en edes käytä olioita, ellen tee jotain todella erityista ja hienoa :D
Tommittaja kirjoitti:
Metabolix kirjoitti:
Tommittaja: Miksi metodi on staattinen, jos sitä kerran kutsutaan ei-staattisesta ympäristöstä?
hmm... en oikein tiedä, olen vain tottunut laittamaan metodit staattisiksi, koska yleensä kutsun niitä päämetodista.
Ei välttämättä kannata ruveta muita neuvomaan esimerkein, jos ei itsekään tiedä miksi esimerkkinsä kirjoittaa niin kuin kirjoittaa. Tarkotus toki oli tässä hyvä, toteutus hieman ontui.
Staattisia metodeita kutsutaan yleensä ilman olioita, joten olio- ja luokkaesimerkkinä tuo koodinpätkä ei oikein onnistu. Oliolle luokasta ei ole oikeasti tarvetta, koska kaikki luokan metodit ovat staattisia eli niitä voidaan kutsua ilman olion olemassa oloa. Muutenkaan mielestäni esimerkki ei oikein demonstroi kamalasti mitään.
Paljompa on tullut keskustelua, mutta sain homman toimimaan, ja teoriaa luettu on jo sisäistänyt aika hyvin oliot ja luokat.
Siis käytetäänkö staatista metodia, jos kutsuu jotain samasta luokasta?
static-avainsanalla määritelty metodi (tai muuttuja) on luokkametodi (tai -muuttuja). Luokkametodit ja -muuttujat eivät ole minkään olion omistamia (vaan luokan omistamia), eli näissä ei myöskään pysty käsittelemään muuta kuin muita luokkametodeita ja -muuttujia, sekä tietysti myös parametrina saatuja muuttujia.
Luokkametodit ja -muuttujat ovat olemassa vaikka luokasta ei olisi luotu yhtäkään oliota.
Aihe on jo aika vanha, joten et voi enää vastata siihen.