Framen käyttäminen suorittamatta

Yritän suorittaa seuraavan tyylistä koodia:

Main frame = new Main();
frame.myValue = 1;
frame.myVoid();

Ongelma on se, että kun suoritan:
Main frame = new Main();
silloin suoritetaan framen Main koodi, jota en halua tehdä.

Olen myös kokeillut seuraavanlaista:

public class Main {
int block = 0;

public Main() {
if (block == 0) {
koodi jota en halua suorittaa
final int block = 1;
}
}
}

Mutta jostain syystä tämä final ei halua toimia.

Osaisikohan kukaan auttaa?
6565
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

Mikset määrittele tuota konstruktoria suoraan tyhjäksi (tai poista sitä kokonaan)?
PS. Normaalisti Javassa käytetään set- ja get-metodeja luokan muuttujien asettamiseen. Ei siis
frame.myValue = 1; vaan frame.setMyValue(1);

Äänestä
  • Kyseessä on siis main class. Tyhjentämällä tai poistamalla main konstruktorin siis koko koodi ei tee mitään.
    Jos nyt ymmärsin oikein :)

    Äänestä

  • Makkarapipo kirjoitti:

    Kyseessä on siis main class. Tyhjentämällä tai poistamalla main konstruktorin siis koko koodi ei tee mitään.
    Jos nyt ymmärsin oikein :)

    Öö, java-luokka ei tarvitse konstruktoria. En nyt myöskään ymmärrä miksi tuolla Main-luoka konstruktorissa on koodia jota ei haluta suorittaa. Luokan konstruktoria kutsutaan vain kerran luokan ilmentymän, eli olion, elinaikana, joten tuota koodia ei suoriteta koskaan.

    Äänestä

Onko tarkoitus siis tehdä niin, että luotaessa ensimmäinen instanssi kyseisestä luokasta, ei jotain tiettyä koodia suoriteta, muulloin suoritetaan?

Mahdollisuuksia on monia. Final int ei niihin taida kuulua. :)
Miten olisi static -muuttuja, jonka arvoa kasvatetaan frameja luotaessa?

Pistä muuten se koodi, jota et suorittaa halua, omaan metodiinsa ja kutsu sitä tarvittaessa. Tulee siistimpi konstruktori...

Mitä sitten tuohon mainiin tulee, varmaan haet metodia, joka voitaisiin komentoriviltä menemään pistää: public static void main(String[] args)? Sitä ei kuitenkaan kutsuta kuin kerran ohjelman eliniässä, joten siihen tuo ei sovellu.

Konstruktori on sitten eri asia.

Äänestä
  • Sori vaan kun olen aivan noobi tämän Javan kanssa.

    Haluan suorittaa koodin, kun ohjelma käynnistyy. Tätä koodia ei saisi kuitenkaan jälkeenpäin suorittaa.

    Koodi jota en halua suorittaa on pakko suorittaa kun ohjelma käynnistyy. Kuitenkin koodi, joka on suoritetaan ohjelman alussa suoritetaan kokonaisuudessaan kun "Main frame = new Main()" suoritetaan.

    En saa millään estettyä tietyn koodinpätkän suorittamista, sillä kaikki Mainissa käytettävät variablet on alustettava koodin alussa.

    Toivottavasti ymmärrätte ongelmani, joka on hieman vaikeasti selitettävissä.

    Äänestä

  • up0down0 Kyseessä on siis main class. Makkarapipo kirjoitti:

    Sori vaan kun olen aivan noobi tämän Javan kanssa.

    Haluan suorittaa koodin, kun ohjelma käynnistyy. Tätä koodia ei saisi kuitenkaan jälkeenpäin suorittaa.

    Koodi jota en halua suorittaa on pakko suorittaa kun ohjelma käynnistyy. Kuitenkin koodi, joka on suoritetaan ohjelman alussa suoritetaan kokonaisuudessaan kun "Main frame = new Main()" suoritetaan.

    En saa millään estettyä tietyn koodinpätkän suorittamista, sillä kaikki Mainissa käytettävät variablet on alustettava koodin alussa.

    Toivottavasti ymmärrätte ongelmani, joka on hieman vaikeasti selitettävissä.

    Hmm... kenties haluat käyttää useampaa muodostinta joita käytät tarpeen mukaan.
    Vilkaseppa tänne http://cs.joensuu.fi/~vouti/tjdoku/JAVA/luku6.html#Konstruktorit

    //Esimerkki

    class Luokka {

    public void Luokka () {
    //Omaa koodia tai jätä tyhjäksi
    }

    public void Luokka (int myVal) {
    this.myValue = myVal;
    //Tänne kans jotain jos haluat
    }

    }

    Uutta instanssia muodostaessa valitset vain tarpeen mukaan sopivan muodostimen, joissa koodi jonka haluat suorittaa.

    // Esimerkki
    Luokka l = new Luokka ();
    tai
    Luokka l = new Luokka (1234);

    Äänestä

Kommentoi aloitusta


Makkarapipo kirjoitti:

Yritän suorittaa seuraavan tyylistä koodia:

Main frame = new Main();
frame.myValue = 1;
frame.myVoid();

Ongelma on se, että kun suoritan:
Main frame = new Main();
silloin suoritetaan framen Main koodi, jota en halua tehdä.

Olen myös kokeillut seuraavanlaista:

public class Main {
int block = 0;

public Main() {
if (block == 0) {
koodi jota en halua suorittaa
final int block = 1;
}
}
}

Mutta jostain syystä tämä final ei halua toimia.

Osaisikohan kukaan auttaa?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu