A Java nyelv. Bevezetés, alapok Elek Tibor



Hasonló dokumentumok
Java II. I A Java programozási nyelv alapelemei

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Szoftvertechnológia alapjai Java előadások

Java II. I A Java programozási nyelv alapelemei

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Programozási nyelvek JAVA EA+GY 1. gyakolat

Magas szintű programozási nyelvek 2 Előadás jegyzet

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Programozás I. Első ZH segédlet

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Java I. A Java programozási nyelv

Informatika terméktervezőknek

Objektumorientált programozás C# nyelven III.

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

A C# programozási nyelv alapjai

Osztályok. 4. gyakorlat

és az instanceof operátor

Programozási nyelv Java

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java Programozás 2. Ea: Java alapok. Ismétlés ++

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Java programozási nyelv 5. rész Osztályok III.

Bevezetés a Java programozási nyelvbe

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Java I. A Java programozási nyelv

Kifejezések. Kozsik Tamás. December 11, 2016

Java programozási nyelv

Bevezetés a Java programozási nyelvbe

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozás III A JAVA TECHNOLÓGIA LÉNYEGE. Többlépcsős fordítás JAVA PLATFORM. Platformfüggetlenség

Programozási technológia I 1. gyakorlat. A Java nyelvi alapjai, a NetBeans környezet

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Készítette: Nagy Tibor István

A Java és a C++ összehasonlítása

Imperatív és procedurális programozás a Javában

A C# PROGRAMOZÁSI NYELV

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Java programozási nyelv 6. rész Java a gyakorlatban

A Java programozási nyelv

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Adatszerkezetek és algoritmusok

1. Egyszerű (primitív) típusok. 2. Referencia típusok

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

A C programozási nyelv II. Utasítások. A függvény.

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Java programozási nyelv

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Programozás II. 2. Dr. Iványi Péter

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Programozási nyelvek Java

Objektumorientált programozás C# nyelven III.

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

A C programozási nyelv I. Bevezetés

Web-technológia PHP-vel

Java programozási nyelv

1. Jelölje meg az összes igaz állítást a következők közül!

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Java programozási nyelv 4. rész Osztályok II.

JAVA PROGRAMOZÁS 2.ELŐADÁS

Kivételkezelés a C++ nyelvben Bevezetés

A C programozási nyelv I. Bevezetés

Bánsághi Anna

C# osztályok. Krizsán Zoltán

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Java. JIT (Just in Time) fordítók alkalmazása, optimalizálás AOT (Ahead of Time) fordítók alkalmazásának lehetősége

Bevezetés a C++ programozási nyelvbe

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Programozási nyelvek Java

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás


Segédanyag: Java alkalmazások gyakorlat

Vezérlési szerkezetek

OOP #14 (referencia-elv)

Programozási nyelvek Java

Forráskód formázási szabályok

C programozás. 1 óra Bevezetés

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Java IX. telkezelés a Java-ban

S z á m í t ó g é p e s a l a p i s m e r e t e k

Java IX. telkezelés a Java-ban

Programozási nyelvek (ADA)

Bevezetés a C++ programozási nyelvbe

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Java III. I I. Osztálydefiníció (Bevezetés)

Java III. I I. Osztálydefiníció (Bevezetés)

GYAKORLATIAS JAVA MINTA

Szoftvertervezés és -fejlesztés I.

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Átírás:

A Java nyelv Bevezetés, alapok Elek Tibor

A Java nyelv jellemzıi Interpreteres Forrás file fordítás Bytekódú file-ok (class fileok, nem gépikód, nem futtatható, egy új forrásnyelv) Interpreter: betölti, soronként (?!) fordítja és végrehajtja Java Virtuális Gép (JVM) Következmények: - A Bytekódú file hordozható - Webes környezetben is használható - Az interpreter program beágyazható más programokba vagy eszközökbe (böngészı, telefon) - Lassúság a compileres nyelvekhez képest!!!

A Java nyelv jellemzıi Objektum orientált nyelv - Megvalósítja az OOP alapelveit - A bonyodalmakat okozó részeket kihagyja, pl: többszörös öröklıdés (nehezebb megvalósítás, kódújrafelhasználás) operátor overloading (félreérthetı használat, kevésbé olvasható kód) - Szigorúan OOP (nincsen osztályon kívüli deklaráció, utasítás) Hasonlóság a C++-hoz - A szintaktika teljesen C++-szerő - Nincsenek mutatók (húúú, megkönnyebbülés) Gazdag osztály könyvtár (csomagok) - Kb. 4000 osztály illetve interfész a JSE 6-ban

Java nyelv verziói Megalkotója a Sun (a Microsoft Java.Net nem ez a nyelv, a JavaSricpt nem ez a nyelv) JRE (Runtime Environment): futtató környezet JDK (Development Kit): fejlesztı könyezet (JRE-t is) Fontosabb verziók: - JDK 1.0 (kb 1996) - JDK 1.2 (innentıl Java 2) (kb. 1998) új nyelvi elemek, fontos új csomagok - JDK 1.5 (kb. 2004) fontos új nyelvi elemek, ez elıttit nem érdemes használni! - Jelenleg 1.6-os verzió (innentıl nem Java 2, csak Java)

Java nyelv verziói JDK változatai (Java 2 óta): - Standard Edition: általános fejlesztési környezet (bıven elegendı) - Enterprise Edition: tartalmaz még nagymérető, elosztott alkalmazás fejlesztéséhez szükséges eszközöket - Micro Edition: kis kapacitású (kijelzı, mem., stb.) eszközökön (telefon) futó programok készítéséhez nyújt eszközöket

Java program felépítése Logikailag: Kizárólag osztályokból és interfészekbıl áll. Az osztályok (és interfészek) csomagokba (névtérhez hasonló fogalom) szervezhetık.

Java program felépítése Fizikailag: - JVM szemszöge: class file-okból áll. A class file-ok lehetnek jar vagy zip fileba tömörítve, vagy adatbázisban tárolva is. - fordító szemszöge: fordítási egységekbıl áll (forrás file) Egy fordítási egységben: egy publikus (lásd késıbb) osztály (interfész) + bármennyi nem publikus. A fordítási egység neve: publikus osztály neve és.java a kiterjesztése. Egy fordítási egységbıl több class file lehet.

Java program felépítése Forrás file szerkezete: csomag deklaráció import deklarációk osztály, interfész definíciók (egy publikus!) Sorrend fontos!

Java program felépítése Helló világ package sajat; public class Hello { } public static void main(string[] args) { System.out.println( Helló világ ); }

Csomagok 1. rész A logikailag összetartozó osztályok (interfészek) Elnevezés hierarchikus (a csomagok nem) - pl. java.util, java.awt, java.awt.event, org.omg.corba - A java.awt.event nem része a java.awt-nek. Két különbözı csomagban lehetnek azonos nevő osztályok (interfészek) Teljes név (minısített név): csomagnév.osztálynév (pl. java.util.date) Csomag deklaráció: package csomagnév;

Import Névtér használat Szintaktika: 1. import osztályteljesnév; 2. import csomagnév.*; Mőködés: 1. Az importált osztályra (interfészre) a fordítási egységen belül a teljes név helyett pusztán az osztálynévvel hivatkozhatunk. 2. A megadott csomag összes osztályára (interfészére) vonatkozik. Ütközés esetén továbbra is a teljes név kell. Létezik még statikus import is. Használatával nem értek egyet. Minden fordítási egység automatikusan importálja a java.lang.*-t

Java program felépítése Tehát egy másik osztály egy metódusában egy osztályra hivatkozhatok a teljes nevével: public class Masik { public static void main(string[] args) { java.util.date most = new java.util.date(); System.out.println(most.toString());}} vagy importálhatom és akkor rövidebben csak a nevével import java.util.date; public class Masik { public static void main(string[] args) { Date most = new Date(); System.out.println(most.toString()); }}

Java file-ok elhelyezkedése A class file-ok elhelyezése szabályrendszer alapján - osztálynév: sajat.masik.valami - forrás file név: Valami.java - class file név: Valami.class relatív útvonal: sajat/masik/valami.class abszolút útv.: CP/sajat/masik/Valami.class, hol a CP az úgynevezett classpath-ban megadott directory-k (jar file-ok) egyike. Classpath megadható: parancssori paraméterként, környezeti változóban. - forrás file útvonal: futtatáskor lényegtelen, fordításkor sourcepath paraméter

Fordítás, futtatás Fordítás: javac forrásfile pl. javac Valami.java fontos paraméterek: -classpath dirlista: már volt róla szó -d dir: a megadott directory lesz a relatív útvonal kiinduló pontja, e nélkül oda rakja, ahol a forrás van Hivatkozott osztályok keresése Futtatás: Csak olyan osztály futtatható, amelynek van public static void main(string[] args) { } Futtatás: java osztályteljesnév pl. java sajat.masik.valami fontos paraméterek: -classpath dirlista: már volt róla szó

Fordítás, futtatás javac -classpath.;\classes Akarmi.java Tegyük fel, hogy hivatkozás történik a sajat.masik.valami osztályra. A szabványos könyvtárakban nem találja. Ott java. és javax. kezdető típusok vannak... Keresi a.\sajat\masik\valami.class fájlt Ha nincs, keresi a \classes\sajat\masik\valami.class fájlt Ha az sincs, keresi a forrását, a sajat\masik\valami.java fájlt, hogy lefordítsa a -sourcepath kapcsoló alapján ha nincs megadva, akkor az aktuális könyvtárban

Példa program Megfigyelendı: programszerkezet csomag megadása hivatkozás más osztályokra futtatható program file-ok neve, elhelyezkedése fordítás, futtatás

A Java nyelv http://java.sun.com/docs/books/jls/third_edition/html/j3toc.html Lexikális értelmezés - UniCode karakterkészlet - Case-Sensitive - tokenes feldolgozás Elemek: - megjegyzések, - deklarációk, - kulcsszavak, - operátorok, - azonosítók, - típuskonverziók, - típusok, - utasítások - literálok,

A Java nyelv - megjegyzések Egysoros megjegyzés //sor végéig megjegyzés Több soros megjegyzés /* a következı csillag és perjelig megjegyzés */ Dokumentációs megjegyzés /** az elején két csillag van, a vége ugyanaz */ - javadoc program html doksit csinál a forráskódban levı dokumentációs megjegyzésekbıl - használhatunk a belsejében a javadoc-nak szóló kulcsszavakat

A Java nyelv - Kulcsszavak abstract continue for new switch assert default if package synchronized boolean do goto private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile const float native super while További foglalt szavak: true, false, null

A Java nyelv - Azonosítók Szabályok - Alkothatják: olyan karakterek, amelyre Character.isJavaIdentifierPart(char) true-t ad. (pl. bető (Unicode), számjegy, _, $ ) - Elsı karaktere: olyan karakter, amelyre a Character.isJavaIdentifierFirst(char) true-t ad (pl. bető, _, $ ) - Nem lehet kulcsszó, foglalt szó - Nincs hossz korlát - pl. éva, a1_b, (akár görög, cirill vagy kínai betők is lehetnek benne) - egyes betők külalakra hasonlítanak, de eltérıek

A Java nyelv - Azonosítók Szokások - változók: alma, almasulya - konstansok: MAX_ERTEK - metódusok: szoroz(), öttelszoroz() - csomagok: sajat.masik, java.util - elemi típusok: int, boolean - osztály, interfész: Valami, ArrayList

A Java nyelv Típusok Elemi típusok, primitív típusok, érték típusok -boolean (logikai) -char (unicode karakter) -byte (1 byte egész) -short (2 byte egész) -int (4 byte egész) -long (8 byte egész) -float (4 byte lebegıpontos) -double (8 byte lebegıpontos) Nincs elıjeles és elıjeltelen, mind elıjeles.

A Java nyelv - Típusok Referencia típusok - osztály - interfész Speciális szintaktikával rendelkezı osztály típusok - tömb - felsorolás (enum) Fontos ismerni a különbséget az elemi és a referencia típusok között!!

A Java nyelv - Literálok boolean literálok: true, false char literálok: B, \n, \u00ff Egész literálok: int literál: 5, -48, 012 (okt), 0x5F (hexa) long literál: 12345678901, 4L, 4l, 0x2DL byte, short literál: csak konverzióval (short)5 Lebegıpontos literál: double literál: 5.4, 0.12e3, 0.1E-2D float literál: 4.21e2F, 0.2E5f Szöveg (String) literál: szöveg Referencia literál: null

A Java nyelv - Deklarációk Változót deklarálni: - adattag - metódus (konstruktor) paraméter - catch paramétere - lokális Szintaktika közös rész: típus azonosító Pl. int a, sajat.masik.valami b Az eltéréseket a megfelelı témánál tárgyaljuk

A Java nyelv - Operátorok Precedencia, asszociativitás Táblázat: Op. A. Jelentés Operandusok [] index tömb, egész. minısítés referencia, tag () fgvhívás fgv, param ++ post inc. numerikus -- post dec. numerikus ++ pre inc. numerikus -- pre dec. numerikus + - elıjelek numerikus ~ bit. tagadás egész! log. tagadás boolean () típus konverzió típus, kifejezés new példányosítás típus

A Java nyelv - Operátorok Táblázat folytatás Op A. Jelentés Operandus * / % szorz, oszt, mod numerikus + - összead, kivon numerikus + string összefüzés String << bitléptetés egész >> bitléptetés egész >>> bitléptetés egész < <= reláció numerikus > >= reláció numerikus instanceof típus vizsg. referencia, típus == egyenlıség tetszıleges!= nem egy. tetszıleges

A Java nyelv - Operátorok Táblázat folytatás Op A. Jelentés Operandusok & bit and, v. log and egész v. boolean ^ bit xor, v. log xor egész v. boolean bit or, v. log or egész v. boolean && log and (röv) boolean log or (röv) boolean?: feltételes op boolean, tetsz. =, +=, értékadás változó, kifejezés Érdekességek: - referencián végezhetı:., (típus), +(csak String), instanceof, ==,!=, = MÁS NEM!

A Java nyelv Típuskonverziók 1. Két fajta: - implicit (automatikus) - explicit (kikényszerített) Alkalmazás fajta - elemi típusok konverziói - referencia típusok konverziói - boxing, unboxing konverziók - generikus típusokkal kapcsolatos konverziók - String konverziók - Value Set konverziók

A Java nyelv Típuskonverziók 1. Elemi típusok konverziói - Automatikus konverzió: a bıvebb típus irányába: byte, short, int, long, float, double érdekes a long float: jegyvesztés lehetséges boolean numerikus, numerikus boolean nincs char numerikus, numerikus char nincs - Automatikus konverzió mőveletvégzéskor: A mőveletekben a byte és shortint-ként szerepel, a float double-ként. A két operandusú mőveletekben a szőkebb típus a bıvebb típusként vesz részt, eredmény a bıvebb típus: 5/2, 5/2.0

A Java nyelv Típuskonverziók 1. Elemi típusok kikényszerített konverziói típus konverziós operátorral: 5/(double)2, int a = (int)5.8, short b = (short) A, int c = (int)true Value Set konverziók float és double típusok esetén, a mőveletek részeredményei bıvebb értékkészleten ábrázolódhatnak, a végeredmény mindig a float vagy double Bıvebben nem foglalkozunk vele Többi konverzióval késıbb foglalkozunk

A Java nyelv - Utasítások Utasítások - blokk {} - lokális osztály deklaráció - lokális változó deklaráció - üres utasítás - kifejezés utasítás - elágazások (if, switch) - assert utasítás - ciklusok (while, do, for) - ugró, vezérlésátadó (break, continue, return) - kivétellel kapcsolatos (throw, try-catch) - synchrozined utasítás

A Java nyelv - Utasítások Blokk { utasítás1 utasítás2 stb. } - a utasításait sorban hajtja végre - a blokkban levı utasítások bármilyenek lehetnek, akár blokk utasítások is - lehet olyan blokk amiben nincs utasítás Lokális osztály deklaráció - Késıbb

A Java nyelv - Utasítások Lokális változó deklaráció - Szintaktika (nem tömb esetén): típus elem; vagy típus elem, elem, stb.; ahol elem: azonosító vagy azonosító=inicializálókif Pl. int a; String b= alma,c; int d, e=1; - Értéke, ha nem inicializáljuk definiálatlan. A fordító hibát jelez, ha hivatkozunk rá értékadás elıtt. - Hatásköre a blokk, amelyben deklarálták, azt elhagyva el is pusztul (referencia változók esetén?) - Elfedi a külsı blokk egyezı nevő azonosítóit

A Java nyelv - Utasítások Üres utasítás ; Kifejezés utasítás kifejezés; - Hatástalan kifejezések NEM! Lehet: értékadás, increment, decrement, fgvhívás, objektum létrehozás pl. a+=2; jó a+2; nem jó

A Java nyelv - Utasítások Feltételes utasítások: IF if (logikai kif) utasítás1 else utasítás2 - A kifejezés csak logikai lehet - Csak egy utasítás állhat mindkét ágban, de ez lehet blokk is. - Szokás: if (logikai kif) { utasítások } else { utasítások }

A Java nyelv - Utasítások Feltételes utasítás: SWITCH switch (kifejezés) { case konstkif1: utasítások case konstkif2: utasítások default: utasítások } - A kifejezés típusa csak: byte, short, int, char, ezek burkoló osztályai, enum - A megfelelı címke a belépési pont. - Kiugrás a break utasítással. - A default nem kötelezı, akkor ez a belépési pont, ha egyik konstkif értékével sem egyezik a kifejezés.

A Java nyelv - Utasítások assert utasítás - szerepe: hibajelzés a programozó felé - kikapcsolható, ilyenkor az assert utasításoknak nincs hatása - szintaktika: assert logikaikif; vagy assert logikaikif : kif; - mőködése: kiértékeli a logikai kifejezést és, ha hamis AssertionError keletkezik, ha van megadva kif, akkor az a AssertionError üzenete (detail message) - bekapcsolás: -ea kapcsolóval

A Java nyelv - Utasítások While ciklus while (logikaikif) utasitas -logikaikif csak boolean lehet -utasitas csak egy utasítás lehet (lehet blokk) - elöltesztelı, igaz esetén ismétel Do ciklus do utasitas while (logikaikif); -logikaikif csak boolean lehet -utasitas csak egy utasítás lehet (lehet blokk) - hátultesztelı, igaz esetén ismétel

A Java nyelv - Utasítások For ciklus 1. alak for (kif1; kif2; kif3) utasitas - Szokás szerint ez egyenértékő: { kif1; while (kif2) { utasitas kif3; } } -kif1 és kif2 kifejezés utasítások, elmaradhatnak -kif3 logikai kifejezés, ha elmarad, akkor true -utasitas egy utasítás (lehet blokk)

A Java nyelv - Utasítások For ciklus 2. alak for (tipus azonosító : kifejezés) utasitas -kifejezés tömb vagy iterálható objektum kell legyen -utasitas egy utasítás (lehet blokk) - mőködés: az azonosító rendre felveszi a kifejezés elemeit és minden érték mellett végrehajtódik az utasítás - pl. feltételezve, hogy van egy elemekkel feltöltött egész tömb, neve a int sum = 0; for (int i : a) sum += i; A sum értéke a tömb elemeinek összege.

A Java nyelv - Utasítások Ugró utasítás, feltétel nélküli vezérlésátadás -break; utasítás: Kilép a blokkból amiben szerepel és a blokkot követı utasításra adódik a vezérlés. Csak switch, while, do, for utasításában levı blokkban használható. Switch esetén szerepe, hogy ne csorogjon át a végrehajtás a következı case-re. Ciklusok esetén, hogy a ciklusból kilépjünk. -break címke; utasítás Egymásba ágyazott blokkok esetén a belsı blokkban levı break a címkével megjelölt külsı blokkból lép ki, tehát az azt követı utasításon folytatódik a végrehajtás. (ez csak egy egyszerősítése a valóságnak)

A Java nyelv - Utasítások Ugró utasítás, feltétel nélküli vezérlésátadás -continue; utasítás Csak ciklusok blokkjában használható. A blokk végére ugrik, azaz a ciklusmag hátralevı részét átugorja. -continue címke; utasítás A break-hez hasonlóan egymásba ágyazott ciklusoknál van szerepe. -return; utasítás Kilép a függvénybıl és a függvény hívás utáni utasításon folytatódik a végrehajtás. Csak void függvényekben használható. -return kif; utasítás Kilép a függvénybıl és a függvény hívás helyére behelyettesítıdik a kif értéke. Csak nem void függvényekben használható.

A Java nyelv - Utasítások Kivétellel kapcsolatos utasítások (throw, try) Lásd késıbb a kivételkezelésnél. Szinkronizációs utasítás synchronized (kif) blokk - A kif referencia típus kell legyen. - Kölcsönös kizárásra használható. A blokkba belépéskor, ha a zár (lásd. operációs rendszerek) szabadot jelez, akkor belép és tilosra állítja a zárat, elhagyásakor szabadra, ha tilos a zár, akkor nem lép be (vár). Több szálból is használható kódrészleteknél használható. - A kif azonosítja a létrehozott zárat.