Olen tässä yrittänyt tihruttaa JAVA kakkosta täysin nollapohjalta. Ainut mikä on edes viitannut JAVAan on ollut JavaScripti. JavaScriptikin tuntui siltä, että olisi pitänyt olla jonkinlainen Rosettan kivi apuna ja useimmiten sen kanssa selvisikin pelkällä pöllimisellä netistä, mutta voi pojat tätä JAVA kakkasta.
Nyt heittää häränpyllyä koko javajava. Mitä ihmettä Javalla edes tehdään? Kuinka sitä joku osaa edes välttävästi? Mihin sitä käytetään reaalielämässä? Miksi ihmeessä yksinkertaisinkin komento pitää olla muotoa
lukuStr = JOptionPane.showInputDialog("Anna ympyrän säde");
eli jotainPISTEjotainPISTEjotainPISTEjoTAInPISTE, eli isojakirjaimia, pisteitä, pilkkuja, puolipisteitä ja kaikki sekaisin? Where's the logiikka?
Ei se Java sen hankalempaa ole kuin moni muukaan kieli. Sitä pitää vaan osata käyttää.
Esimerkiksi seuraavilla sivuilla on ainakin jonkinlaiset oppaat javan käyttöön:
http://www.internetix.fi/opinnot/opintojaksot/
http://www.cs.helsinki.fi/u/wikla/JohdOhj/JaOh/
Sitten kun tietää edes suurinpiirtein mitä hakee, niin seuraavat sivustot ovat melko hyödyllisiä:
http://java.sun.com/j2se/1.5.0/docs/api/
http://javaalmanac.com/
Ja sen "pisteletka" on käytössä aika monessa muussakin kielessä. Sen ideana on se, että saisi oliosta ulos juuri sitä mitä haluaa.
Ennen ensimmäistä pistettä on olion tai luokan nimi (esim. Toolkit).
Pisteen jälkeen tulee sitten luokan metodi jota kutsutaan (esim. getDefaultToolkit()), joka antaa jonkin paluuarvon (tässä tapauksessa Toolkit-olion).
Toisen pisteen jälkeen voi taas kutsua seuraavaa metodia (esim. getScreenSize()), joka antaa taas jonkin paluuarvon (tässä tapauksessa Dimension-olio, joka sisältää tiedon näytön resoluutiosta).
Näytön resoluution saa siis selville melko yksinkertaisesti rivillä Toolkit.getDefaultToolkit().getScreenSize();
HellCome kirjoitti:
lukuStr = JOptionPane.showInputDialog("Anna ympyrän säde");
Tämä rivi voisi olla yhtä hyvin melkein mitä tahansa muuta kieltä. Ei tuossa varsinaisesti mikään Javaan viittaa.
Ja JavaScript ei sitten oo mitään sukua Javalle. Se on vaan jonkun netscapen insinöörin älynväläys.
HellCome kirjoitti:
Mitä ihmettä Javalla edes tehdään?
Javallahan voi tehdä melkein mitä tahansa, se ei ole mikään erikoistarkoitukseen tehty kieli vaan erittäin yleispätevä. Mikä tosin on joskus myös huono asia.
Java on oliopohjainen kieli, ja siihen löytyy paljon valmiita kirjastoja. Siksipä sillä on erittäin helppoa tehdä isompiakin järjestelmiä eikä aina tarvitse keksiä pyörää uusiksi.
Yksi Javan vahvuus on että sillä tehtyjä ohjelmia voidaan ajaa monissa eri laitteistoissa, monissa eri käyttöjärjestelmissä. Tällaisesta yleispätevyydestä on luonnollisesti myös haittojakin.
Java sopii erityisen hyvin palvelinohjelmistojen tekemiseen.
Jaha...
PHP:ssä tekstin saa ruudulle kirjoittamalla
print "Blöö";
ja se on siinä.
JAVAssa pitää kirjoittaa
System.out.print(Blöö);
En ymmärrä. Miksi pitää tehdä niin kumman vaikeasti kaikki nämä asiat? Jos kerran tahtoo tehdä niillä luokilla jotain ihmeellistä, niin eikö ne luokat olisi voinut sijoittaa yhteen vitkuttimeen, kuten esim: komennot.print(Blöö); ?
Voihan siitä tulla isohko siitä "komennot" luokasta, mutta mitä väliä sillä on? Olisiko se niin paha, jos ohjelman (en vieläkään ole saanut ymmärrettyä, että millä ilmeellä tuolla NetBeansilla saa tehtyä exejä) koko on 10 kt sen 5 kt:n sijaan (jos edes kilotavuja)?
Tässäpä nyt tällainen kertotaulu:
public class Kertotaulu {
public static void main(String[] args) {
for(int i = 1; i<10; i = i + 1){ // i = 6. kerrottava
System.out.println(i);
//Sisempi silmukka
for(int k = 1; k<= 10; k++){ // k = kertoja
System.out.print("\t" + i*k);
}//Kasvatetaan k:ta yhdellä
System.out.print("\n"); //Tulostetaan rivinvaihto
} // Kasvatetaan i:tä yhdellä
}
}Meikän silmiin tuo näyttää tältä:
1. rivi = huvikseen nakuteltu jotain
3. rivi = ei mitään käsitystä
5. rivi = koska(int i = 1 [okei]; [sitten] i<10 [jep]; i + 1 [selvä pyy];
Ja lopputuloksena on minun mielestäni tällainen (jos "i" tulostettaisiin ruudulle):
i:n arvoksi annetaan "1". Sitten verrataan, että onko "i" pienempi, kuin 10 (onhan se, mutta mitä sitten). Sen jälkeen "i":hin lisätään yksi, jolloin tulos on "i = 2".
No comprendo
HellCome kirjoitti:
En ymmärrä. Miksi pitää tehdä niin kumman vaikeasti kaikki nämä asiat? Jos kerran tahtoo tehdä niillä luokilla jotain ihmeellistä, niin eikö ne luokat olisi voinut sijoittaa yhteen vitkuttimeen, kuten esim: komennot.print(Blöö); ?
Lyhyehkö selitys tähän on se, että voi printata eri tavoilla. On printtiä konsoliin, nettisivulle, johonkin tiettyyn nettisivun osaan, ruudulle pop-up-ikkunaan, ohjelman otsikkopalkkiin, jne, jne. Nämä eivät tietenkään voi kaikki olla nimeltään "print", koska eihän silloin voisi mitenkään tietää mihin printtaus menee. Tuo System.out.print tarkoittaa jotakuinkin että: printataan suoraan systeemille (eli käytännössä konsoliin), ulostuloon (eikä esimerkiksi virhetuloon, System.err (tai error? en Javaa tunne)).
lainaus:
public class Kertotaulu { public static void main(String[] args) { for(int i = 1; i<10; i = i + 1){ // i = 6. kerrottava System.out.println(i); //Sisempi silmukka for(int k = 1; k<= 10; k++){ // k = kertoja System.out.print("\t" + i*k); }//Kasvatetaan k:ta yhdellä System.out.print("\n"); //Tulostetaan rivinvaihto } // Kasvatetaan i:tä yhdellä } }1. rivi = huvikseen nakuteltu jotain
Siinä määritellään pääluokka, Kertotaulu. Tämän pitää olla samanniminen kuin .java-tiedoston, jotta ohjelma tietää, mistä etsiä pääfunktiota:
lainaus:
3. rivi = ei mitään käsitystä
Tämä on se pääfunktio: main, josta ohjelma alkaa. Muita funktioitakin voi määritellä, mutta mainin tulee aina olla olemassa, jotta ohjelma tietäisi, mistä kohti sen pitää aloittaa.
lainaus:
5. rivi = koska(int i = 1 [okei]; [sitten] i<10 [jep]; i + 1 [selvä pyy];
Tuon "selvä pyytä" edeltävän kohdan pitäisi olla i = i + 1.
Ja sitten isompi ongelma: for ei tarkoita "koska". Se tarkoittaa jotakuinkin suomen kielen päätettä "lle". Eli tuo koodinpätkä on kapulakielelläni selitetty vaikkapa näin: "i:n arvoilla yhdestä yhdeksään, tee allaoleva homma ja ynnää sitten i:hin yksi". "Allaoleva homma" tuossa on siis se, joka on niiden kaarisulkeiden sisällä, se System.out.println jne.
Eli homma menee näin: i:n arvoksi annetaan 1; tarkistetaan, että se on alle 10; tulostetaan i; k:n arvoksi annetaan 1; tarkistetaan, että se on alle tai yhtä kuin 10; tulostetaan vähän tyhjää tilaa tabulaattorilla ("\t") ja perään tulostetaan i kertaa k, eli 1; lisätään k:hon 1 (k++); tarkistetaan että se on alle tai yhtä kuin 10; tulostetaan tyhjää tilaa ja i kertaa k, eli nyt 2, koska i on edelleen 1 mutta k on nyt 2.
Ja niin edelleen, ja niin edelleen. Menee vielä jonkin aikaa kunnes onkin tulostettu i kertaa k, jolloin k on 10. Tämän jälkeen k kasvaa yhdellä, ja nyt for-silmukan toinen osa eli "k <= 10" toteaa että hetkinen, eipäs k (eli 11) ole kymmenen tai alle. Eli silmukka päättyy ja tulostetaan rivinvaihto: System.out.print("\n");.
Suosittelen jonkin Java-ohjelmointioppaan lukemista - sellaisen, joka on tarkoitettu ensimmäistä kertaa ohjelmoiville. Varmasti niitäkin löytyy, Java on kuitenkin sen verran yleinen kieli.
HellCome kirjoitti:
En ymmärrä. Miksi pitää tehdä niin kumman vaikeasti kaikki nämä asiat? Jos kerran tahtoo tehdä niillä luokilla jotain ihmeellistä, niin eikö ne luokat olisi voinut sijoittaa yhteen vitkuttimeen, kuten esim: komennot.print(Blöö); ?
Eiköhän se ole mukavampi käyttää vain niitä luokkia, mitä oikeasti tarvitsee, etteivät ne muut ole suotta tiedoston kokoa kasvattamassa ja nimiavaruutta sotkemassa. Lisäksi hyvä periaate on, että yhdellä luokalla on yksi tehtävä.
HellCome kirjoitti:
Voihan siitä tulla isohko siitä "komennot" luokasta, mutta mitä väliä sillä on? Olisiko se niin paha, jos ohjelman koko on 10 kt sen 5 kt:n sijaan (jos edes kilotavuja)?
Javan luokkakirjasto on VALTAVA, jdk:n kansiossa oleva luokkakirjaston lähdekoodi-zip vie 17 658 kilotavua - eli reilut 17 megaa.
HellCome kirjoitti:
(en vieläkään ole saanut ymmärrettyä, että millä ilmeellä tuolla NetBeansilla saa tehtyä exejä)
Javalla ei tehdä exejä, vaan JAR-tiedostoja. Nämä ovat sitten nopeita ja monella alustalla toimivia sekä käynnistetään komennolla java -jar jarinnimi.jar.
Minulle tämä näyttää selvältä pässinlihalta, mutta alku aina vaikeaa, äläkä lannistu, Java on hieno kieli ;)
Jos välttämättä haluat tehdä tulostuksen lyhyellä komennolla (print), niin siitä vaan kirjoittamaan sellainen metodi. Se on jopa niin yksinkertainen kirjoittaa, että voin antaa sen koodin tässä perässäkin:
public static void print(String text) {
System.out.print(text);
}P.S. for-silmukan syntaksi on täsmälleen sama sekä javassa, että C++:ssa. for (muuttujan alustus; toistoehto; lisäys) {}
Mikään näistä osista ei (muistaakseni) ole edes pakollinen, joten yksi tapa luoda ikuinen silmukka on kirjoittaa for (;;);
Ja onpas for-silmukka samanlainen PHPssäkin. Eikä tuo Java nyt niin sekavalta näytä.
Noin yleensäkkin miksi PHP:n ohjelmat näyttää niin yksinkertaisilta johtuu vain ja ainoastaan siitä että sillä on tarkoitustkin tehdä vain yksinkertaisia ohjelmia ja nopeasti. PHP:n resurssit ja tehokkuus ei riitä valtavien sovellusten tekemiseen kuten Javalla.
Lisäksi PHP:ssä virheiden paikantaminen on vaikeaa ja en menisi kehumaan noita funktoitakaan mysql_connect eikun pgre_connect vai oliko se odbs_connect tai jotain tuonne päin. Javassa tehdään rajapinta tietokannoille esim. DB ja sen jälkeen se toteutetaan ja sitten tietokantaa aletaan käyttää tietämättä itse kannasta mitään muutakuin se, että se toteuttaa jotakin. Tämä ei tietysti liity juurikaan PHP:n ja Javan eroihin vaan funktio ohjelmoinnin ja olio-olioohjelmoinnin eroihin.
Jos hauluat kielen jossa funktiot ja oliot yhdistyy käytä c++:ssa. Toki c++:ssa pitää käyttää nimiavaruuksia kuten javassa ja ohjelman suoritus alkaa Main funktiosta, mutta se ei kuuluu mihinkään luokkaan,
Aihe on jo aika vanha, joten et voi enää vastata siihen.