Learn to Java (Az alapokt

Indította Szilárd, 2012 július 01, 02:26:02 DÉLUTÁN

Előző téma - Következő téma

Szilárd

Java / C# / Swift Programmer

Apple
----------
OS X / iOS User
iPhone 6 Plus
iPad Air 2
MacBook Pro 13" Retina

Szilárd

Learn to Java II.
----------------------------------

Az előző leírásban a legalapabb dolgokat néztük át, ami szükséges lehet, és egy egyszerű kis HelloWorld-öt.
Most szeretnék a primitívekkel, változókkal, tilalmakkal és a ha(feltétel){ akkor... }egyébként{ akkor... } feltételkezeléssel is foglalkozni egy kicsit.

A Java-ban sok féle változó típus létezik, ezek közül néhány (Mikor a típust definiáljuk, akkor ugyan ilyen betűmérettel kell azokat megtennünk! A String az nagybetű, az int az kicsi... etc.):
   - String (Alapértelmezett érték: null)
   - int (Alapértelmezett érték: 0)
   - byte (Alapértelmezett érték: 0)
   - float (Alapértelmezett érték: 0.0f)
   - boolean (Alapértelmezett érték: false)
   - short (Alapértelmezett érték: 0)
   - long (Alapértelmezett érték: 0L)
   - double (Alapértelmezett érték: 0.0d)
   - char (Alapértelmezett érték: \u0000)

----------------------------------
Tilalmak:
----------------------------------
A tilalmak alatt azt kell érteni, hogy milyen neveket NEM adhatunk változóinknak:

Ezen az oldalon a "The Name of Variables" pont alatt lévő táblázatban fel van sorolva az összes tiltott név, amelyeket a Java már használ.
----------------------------------
Bevezetésük a programunkon belül (HelloWorld.java kibővítése):
----------------------------------

public class HelloWorld{
public static void main(String[] args){
String helloMessage = "Hello World!";

System.out.println(helloMessage);
}
}


Ez így tökéletesen működik. De mi van akkor, ha a változó bevezetését a main tagfüggvényen kívülre tesszük? Nézzük meg:

public class HelloWorld{
String helloMessage = "Hello World!";

public static void main(String[] args){
System.out.println(helloMessage);
}
}


Amint azt már az előző posztban leírtam, nem lehetséges egy statikus konteksztusból egy nem statikus változó meghívása. Hogy így leforduljon a program, a változó bevezetését egy static taggal el kell látni így:

...{
static String helloMessage = "Hello World!";

... static ... (...){
// TODO
}
}

Így már sikerülni fog a fordítása.
Itt már be is vezettünk egy String típusú változót, ami szöveget tartalmaz. Természetesen tartalmazhatja így is:

String MySQLPort = "3306";

Ha két idézőjel közé tesszük a mondandónkat, akkor az automatikusan a String kategóriába fog esni.

Most vezessünk be egy integert is (int):

public class HelloWorld{
public static void main(String[] args){
int numberOfAliens = 2;
String helloMessage = "Hello World!";

System.out.println(helloMessage+" I saw "+numberOfAliens+" yesterday.");
}
}

Több változót is használtam egy println-en belül, amit úgy tettem meg, hogy beírtam az első változót, majd egy + jellel megkezdtem egy String-et (két idézőjel között lévő terület), majd a következő változónál egy + jellel kezdtem és fejeztem be, aztán ismét egy String.

Nem fogom mindegyik változótípust bemutatni, amelyeket még érdemesnek találok arra, hogy bemutassam az a boolean és a float/double (lebegőpontos számok). Egy kis feltételkezelés lesz most a tálcán, amivel már biztos találkoztatok programozási tanulmányaitok során.
Az if(){}else{} az, amiről beszélek. Aki esetleg nem ismerné: A lényege az, hogy az if "ha" mögött egy feltételt vezetünk fel és ha ez a feltétel teljesül, akkor megcsinálunk valamit, de ha a feltétel nem teljesül, akkor mást csinálunk, például:

public class HelloWorld{
public static void main(String[] args){
int numberOfAliens = 0;
String helloMessage = "Hello World!";

if(numberOfAliens <= 0){ // ha kisebb vagy egyenlo nullaval, akkor ..., egyebkent pedig ...
System.out.println(helloMessage+" I didn't see any aliens.");
} else {
System.out.println(helloMessage+" I saw "+numberOfAliens+" aliens.");
}
}
}

Itt a programunk azt fogja kiírni, hogy "Hello World! I didn't see any aliens.", mert a numberOfAliens 0-ra van állítva, de nézzétek meg mi van akkor, ha az értékét 1-re növelitek.

Folytatás később... (boolean,double/float,do{}while(),for(){},etc...)
Java / C# / Swift Programmer

Apple
----------
OS X / iOS User
iPhone 6 Plus
iPad Air 2
MacBook Pro 13" Retina

Szilárd

#2
Learn to Java III.
----------------------------------

Megismerkedt
Java / C# / Swift Programmer

Apple
----------
OS X / iOS User
iPhone 6 Plus
iPad Air 2
MacBook Pro 13" Retina

Szilárd

Learn to Java IV.
----------------------------------
Korrekció:
----------------------------------
Az előző részt és a static-kal kapcsolatos megjegyzésemet szeretném kicsit kijavítani. Egy figyelmes olvasó szólt nekem az előző részről, őszintén nem is figyeltem ezt/ezeket az írás közben.

A booleanok 1 bit-nyi adattal rendelkeznek, tehát 0 és 1. A 0 jelképezi a hamisat és az 1 az igazat.

Nem csak a nem statikus változók, hanem a nem statikus függvények/metódusok sem hívhatók meg egy statikus konteksztusból. Tehát ahhoz, hogy a main függvényből meghívjunk nem statikus metódust, ahhoz előbb az osztályt kell példányosítanunk.
----------------------------------
Objektumok, metódusok, visszatérési értékek
----------------------------------
Metódusokból annyit helyezhetünk el egy osztályon belül, amennyit csak szeretnénk.

Eddig is volt már dolgunk metódussal, mikor a main-t megírtuk. Adtunk neki paramétert (String[] args), majd ezt hívta meg a JVM mikor indítottuk a java MyApp paranccsal a programunkat.

Nézzünk meg először egy olyat, ami nem rendelkezik visszatérési típussal (void) és paraméterekkel sem. Ehhez még egy kis példányosítást is hozzácsapunk, ami nem lesz egyáltalán bonyolult.


public class MyApp{
String myText = "Our non-static method can handle this non-static variable.";

public void doWrite (){
System.out.println(myText);
}
public static void main(String[] args){
MyApp ma = new MyApp(); // **
ma.doWrite(); // ***

/*
// VAGY!
new MyApp().doWrite();
*/
}
}


**: Létrehozunk egy MyApp típusú objektumot "ma" néven, ami igazából lehet bármilyen név, amit csak szeretnél, majd beállitjuk neki értekként a MyApp osztályt, az üres konstruktorával. (Konstruktorokról majd kesőbb lesz bővebben szó.)
***:  A "." segítségével "mélyebbre mehetünk" az adott osztályban, tehát a doWrite() metódust lefuttathatjuk.

Ezzel készen is van az első metódusunk, ami nem rendelkezett visszatérési értekkel és paraméterekkel sem.
Most nézzünk meg egy olyat, amelyben szükség van a paraméterekre, például egy területszámítós programmal.

Ugye tudjuk azt, hogy a téglalap területe (a+b)*2 - a Java-ban is zárójelekkel tudjuk megadni a helyes műveleti sorrendet akkor, mikor hamarabb szeretnénk elvégezni egy műveletet a többinél. Elvileg nem kéne gondot okozzon nekünk, mert matekórán már a fejünkbe vésték, még mikor ott tartottunk. :D
Na lássunk is neki a megírásnak:

public class MyApp{
public void doCalculate(int a,int b){ // **
int result = (a+b)*2;

System.out.println("A teglalap terulete: "+result+" cm2");
}
public static void main(String[] args){
/*
int w = 5;
int h = 7;
*/
int w = 5,h = 7; // Kicsit egyszerubb megoldas, de figyeljunk a sorrendre!

MyApp ma = new MyApp();
ma.doCalculate(w,h);
}
}


**: A JVM két darab értéket fog várni a doCalculate meghívásakor. Ezeket az értékeket a doCalculate után lévő zárójelben kell meghatároznunk. Jelen esetben nem probléma, ha felcseréljük őket, mert két int-et vár, de ha az egyik String a másik int, akkor nem mindegy a sorrend, és akkor sem, ha később a Frame esetén a szélességet és magasságot felcseréljük! :D

Na most lássunk olyan metódusokat is, amelyek rendelkeznek visszatérési értékkel (azaz nem void), és paramétereket is kérnek.
Az előző példát fogom most is megcsinálni, csak most vissza fog térni egy darab int-tel, azaz a végeredménnyel.


public class MyApp{
public int doCalculate(int a,int b){ // **
return (a+b)*2;
}
public static void main(String[] args){
int w = 5,h = 7;

MyApp ma = new MyApp();
System.out.println("A teglalap terulete: "+ma.doCalculate(w,h)+" cm2");
}
}


**: Amint látjátok nem így adtam meg a metódust, hogy public void doCalculate(..., hanem public int doCalculate(..., az int jelzi azt, hogy egy int-el kell visszatérnie a függvénynek, amelyet a függvénytörzsön belül a return-nal adhatunk meg. Ha esetleg String-et írunk a return mögé, akkor fordítási hibába ütközünk, és ki kell javítanunk a problémát.
Gondolom nem kell a többi adattípusra is levonatkoztanom ezt a példát, mert szerintem az már menni fog magatoktól is. :) Ez nem egy hagyományos iskolai oktatás. :D

Ennyit szerettem volna 4. leckeként adni, ha esetleg valami hibát észleltek az irományaim során, akkor kérlek titeket, hogy jelezzétek ezt nekem PM-ben!
Java / C# / Swift Programmer

Apple
----------
OS X / iOS User
iPhone 6 Plus
iPad Air 2
MacBook Pro 13" Retina

Szilárd

#4
Id?m hi
Java / C# / Swift Programmer

Apple
----------
OS X / iOS User
iPhone 6 Plus
iPad Air 2
MacBook Pro 13" Retina

Powered by EzPortal