4. előadás
Tömb
Nem olyan "fapados", mint a C-ben
- Túlindexelés elleni védelem
- Hosszát eltárolja
- Magától feltakarít
Enhanced for loop
Referenciák tömbje
class Main {
public static void main(String[] args){
Point[] triangle = { new Point(0,0),
new Point(0,3),
new Point(1,1)};
}
}
A triangle egy referencia, amely referenciákat tárol.
import static
Teljes név: Csomagnévvel minősített név
A sort innentől elérhető rövid néven
100lábú séta
class Százlábú
{
static void séta()
{
Láb[] százlábú;
System.out.println(százlábú.length); // Fordítás-idejű hiba: a "százlábú" változónak nincs értéke
százlábú = null;
System.out.println(százlábú.length); // Futási-idejű hiba: A "százlábú"-nak van értéke, de az `null` -> NullPointerException
százlábú = new Láb[100];
System.out.println(százlábú.length);
// Most már van értelme, yay \o/ 🎉
// Még létre is kell hozni (lépegetIK)
for(int i = 0; i < 100; i+=2)
{
százlábú[i] = new Láb("bal");
százlábú[i+1] = new Láb("jobb");
}
}
}
Mátrix
- Tömb elem lehet referencia (tartalmazhat objektumot)
- A tömbök objektumok
- Ha ezt kombináljuk: mátrixok
class Main
{
// NxN-es Egységmátrix
static double[][] id(int n)
{
double[][] matrix = new double[n][n];
for(int i = 0; i < n; ++i)
{
matrix[i][i] = 1;
}
return matrix;
}
}
Különbsége a C és a Java mátrix között:
- A C egy egybefüggő memóriahelyen fogja ezt tárolni
- A Java-ban a mátrix minden sora egy-egy külön tömb, amelyekre mutat a külső tömb
- A tömb elemei a sorokat alkotó tömbökre mutatnak (kb. így értelmezhető)
A Javában a referenciákat 8 bájton tároljuk (64 bit)
Alsóháromszög mátrix
Jagged array
class Main
{
static double[][] zeroLowerTriangular( int n )
{
double[][] result = new double[n][];
for( int i = 0; i<n; ++i )
{
result[i] = new double[i+1];
}
//result egy tömb, amelyben 3 tömb va
// az 1. hossza 1,
// az 2. hossza 2,
// az 3. hossza 3
return result;
}
}
Parancssori argumentumok
- C-ban:
char *argv[]- u.e. Java-ban:
char[][] argv
- u.e. Java-ban:
- Java-ban:
String[] args
| Nyelv | Kód |
|---|---|
| C | char *argv[] |
| Java | String[] args |
Intermissions
Felsorolási típus
- Referencia típus
- Értékek: objektumok, nem intek
class Main
{
public static void main(String[] args)
{
Day best = Day.SAT; // import static?
best = 3; // fordítási hiba
int n = best; // fordítási hiba
int m = best.ordinal(); // 5
}
}
Nem lehet konstruktort hívni a felsorolási típuson
Switch
static int workingHours( Day day )
{
switch(day)
{
case SUN:
case SAT: return 0;
case FRI: return 6;
default: return 8;
}
}
Forráskód felépítése
Forráskód felépítése:
- fordítási egységek
- típusdefiníciók
- metódusok
- utasítások
- kifejezések
- lexikális elemek
- karakterek
Karakterek
Több féle karakterkódolási standard terjedt el
Legelterjedtebb: ASCII (American Standard Code for Intormation Interchange)
Ma használatos és legelterjetebbebb: Unicode (pl. UTF-8)
Pl:
Main.javaWindows karakterkódolás- A rendszer UTF-8 karakterkódolású
- =>
unmappable character (0xE1) for encoding UTF-8 - Megoldás:
$ javac -encoding Cp1250 Main.java
Lexikális elemek
Lexikális elemek:
- Kulcsszavak
- Azonosítók
- Operátorok
- Literálok
- Zárójelek: (.) [.] {.} <.>
- Speciális jelek: . , : ; -> | ... :: @
- Megjegyzések (egysoros, többsoros, „dokumentációs’ ’)
Amiket a félévben tanulunk
- Utasítások:
ifelseswitchcasedefaultwhiledoforbreakcontinuereturntrycatchfinallythrowassertyield
- Programszerkezet:
packageimportclassenuminterfaceextendsimplements
- Deklarációk:
publicprotectedprivateabstractstaticfinalthrows
- Típusok:
booleancharbyteshortintlongfloatdoublevoid
- Speciális változók, konstruktorok:
thissuper
- Operátorok:
instanceofnew
- Literálok:
truefalsenull
Konvenciók
Csomag nevek: végig kisbetűvel
Osztály: camelcase
Konstans: nagybetűs
Függvény / metódus: camelcase kis betűvel kezdve
Kifejezések
szitaxis: operátorok aritása, fixitása, zárójelezés
(innen folytatjuk)