Kihagyás

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

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

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

import static java.util.Arrays.sort;

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
double[][] id3 = { {1,0,0}, {0,1,0}, {0,0,1} };
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
  • Java-ban: String[] args
Nyelv Kód
C char *argv[]
Java String[] args

Intermissions

The Streaming

Felsorolási típus

enum Day {MON, TUE, WED, THU, FRI, SAT, SUN}
  • 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.java Windows 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:
    • if
    • else
    • switch
    • case
    • default
    • while
    • do
    • for
    • break
    • continue
    • return
    • try
    • catch
    • finally
    • throw
    • assert
    • yield
  • Programszerkezet:
    • package
    • import
    • class
    • enum
    • interface
    • extends
    • implements
  • Deklarációk:
    • public
    • protected
    • private
    • abstract
    • static
    • final
    • throws
  • Típusok:
    • boolean
    • char
    • byte
    • short
    • int
    • long
    • float
    • double
    • void
  • Speciális változók, konstruktorok:
    • this
    • super
  • Operátorok:
    • instanceof
    • new
  • Literálok:
    • true
    • false
    • null

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)