ĮVADAS JVM Java Virtual Machine Java virtualios mašinos (JVM) JVM write once, run everywhere

Size: px
Start display at page:

Download "ĮVADAS JVM Java Virtual Machine Java virtualios mašinos (JVM) JVM write once, run everywhere"

Transcription

1 ĮVADAS The Java programming language was introduced in 1995 by Sun Microsystems which has since merged into Oracle Corporation. Derived from languages such as C and C++. Pradžioje Java buvo skirta programuoti įrenginius tokius kaip telefonai, po to išsiplėtė iki pilnavertės objektinio programavimo kalbos. In 2014, Oracle Corporation released Java 8, which was another milestone release. Not only was Java already the most modern, statically typed, object oriented language available for development, but Java 8 adds important new enhancements to the language, such as lambda expressions, streams processing, and default methods. JavaFX 8 was also released at the same time, advancing desktop Java applications more than ever. JavaFX 8 can be used for developing rich desktop and Internet applications using the Java language. It provides a rich set of graphical and media user interfaces to develop extraordinary visual applications. There are many editions of Java, such as the Mobile Edition (ME) and the Enterprise Edition (EE). Java SE is the Standard Edition and represents the heart of the language. Programuojant Java, reikia skirti tris pagrindines dalis: Java programavimo kalba; Java virtuali mašina (angl. JVM Java Virtual Machine); Java platforma. Programuojant Java kalba, pirmiausia yra parašomas programos tekstas (angl. source, tai parastas tekstinis failas su praplėtimu *.java). Po to šis programos tekstas sukompiliuojamas gaunamas objektinis modulis (failas *.class), kuris dar yra susiejamas su Java bibliotekomis, kurių funkcijos yra panaudotos sukurtoje Java programoje. Java programa kompiliuojant paverčiama į Java virtualios mašinos (JVM) komadas, o ne konkretaus kompiuterio procesoriaus komandas. Todėl sukompiliuota Java programa (dar vadinama baitiniu kodu, angl. byte code) vienodai veiks ant visų kompiuterių, kur yra įdiegta JVM, jos nereikės perkompiliuoti kiekvienam kompiuteriui/procesoriui atskirai. JVM atlieka baitinio kodo interpretavimą (vykdymą). The JVM is the base upon which compiled Java class files run and is responsible for interpreting compiled Java classes and executing the code. Every operating system that is capable of running Java code has its own version of the JVM. Applications developed in the Java language can run on any operating system that contained a Java Virtual Machine (JVM). Java has been described as a language that allows developers to write once, run everywhere. The Java platform APIs and libraries are a collection of predefined classes that are used by all Java applications. Any application that runs on the JVM makes uses the Java platform APIs and libraries. This allows applications to use the functionality that has been predefined and loaded into the JVM. Java platforma yra aibė Java klasių (bibliotekų), kurios yra kiekvienoje Java installiacijoje. All programs written in the Java language rely on the set of predefined classes that comprise the Java platform. Java classes are organized into related groups known as packages. The Java platform defines packages for functionality such as input/output, networking, graphics, user-interface creation, security, and much more. Kita Java savybė visos standartinės funkcijos, kurios yra kviečiamos programos kode, prijungiamos tik programos vykdymo metu (dinaminis pririšimas, angl. dynamic binding), o neįtraukiamos į baitinį kodą. Dėl šios priežasties sukompiliuotos programos apimtis būna nedidelė. 1

2 Pirmosiose JVM versijose dinaminis pririšimas lėtindavo programos vykdymą, tačiau dabar JVM taip ištobulinta, kad tai nesukelia jokių problemų. Java baitinis kodas yra interpretuojamas. Although interpreters are not typically considered highperformance systems, JVM performance has improved dramatically since the first versions of the language. The latest releases of Java run remarkably fast. Java runtime environment (JRE) sudaro Java Virtuali Mašina(JVM), java platformos bazinės klasės ir pagalbinės Java platformos bibliotekos. Java platformą galima praplėsti papildomais paketais (optional packages). JRE įeina į naršykles, operacines sistemas, duomenų bazių sistemas ir pan. Pagrindinė JRE komada yra java, kuri atlieka baitinio kodo vykdymą (interpretavimą): java pavyzdys1 Java Development Kit (JDK), which is composed of the Java Runtime Environment (JRE), the Java programming language, and platform tools that are necessary to develop and run Java applications. The JRE contains the Java Virtual Machine (JVM), plus the Java application programming interfaces (APIs) and libraries that assist in the development of Java applications. Norint sukompiliuoti ir vykdyti Java kodą, reikia įsidiegti Java Development Kit (JDK). Pagrindinės JDK komandos yra: javac, kuri kompiliuoja Java kodą, ir java, kuri atlieka baitinio kodo vykdymą (interpretavimą): javac pavyzdys1.java //sukompilaivus sukuriamas failas pavyzdys1.class java pavyzdys1 // paleidžiamas sukompiliuotas failas pavyzdys1.class Atkreipkit dėmesį, kad JRE tik vykdo, o JDK kompiliuoja ir vykdo. JRE yra JDK poaibis. INSTALIAVIMAS Java galima parsisiųsti ir susiinstaliuoti adresu (versija Java SE 8u31, 2015): Programavimo aplinkos: NetBeans (nuoroda ta pati, kaip ir Java) Eclipse: 2

3 PERFORMANCE As described earlier, Java programs are compiled to a portable intermediate form known as byte codes, rather than to native machine-language instructions. The Java Virtual Machine runs a Java program by interpreting these portable byte-code instructions. This architecture means that Java programs are faster than programs or scripts written in purely interpreted languages, but Java programs are typically slower than C and C++ programs compiled to native machine language. Keep in mind, however, that although Java programs are compiled to byte code, not all of the Java platform is implemented with interpreted byte codes. For efficiency, computationally intensive portions of the Java platform such as the stringmanipulation methods are implemented using native machine code. Although early releases of Java suffered from performance problems, the speed of the Java VM has improved dramatically with each new release. The JVM has been highly tuned and optimized in many significant ways. Furthermore, most current implementations include a just-in-time (JIT) compiler, which converts Java byte codes to native machine instructions on the fly. Using sophisticated JIT compilers, Java programs can execute at speeds comparable to the speeds of native C and C++ applications. Java is a portable, interpreted language; Java programs run almost as fast as native, nonportable C and C++ programs. THE UNICODE CHARACTER SET Java programs are written using Unicode. You can use Unicode characters anywhere in a Java program, including comments and identifiers such as variable names. Unlike the 7-bit ASCII character set, which is useful only for English, and the 8-bit ISO Latin-1 character set, which is useful only for major Western European languages, the Unicode character set can represent virtually every written language in common use on the planet. 16-bit Unicode characters are typically written to files using an encoding known as UTF- 8, which converts the 16-bit characters into a stream of bytes. The format is designed so that plain ASCII text (and the 7-bit characters of Latin-1) are valid UTF-8 byte streams. Thus, you can simply write plain ASCII programs, and they will work as valid Unicode. 3

4 PIRMA PROGRAMA JAVA public class Paskaita1 { public static void main(string[] args) { String str = vakaras ; int i = 10, j= 10; long l = 20; float f = (float)0.01; double d = 0.02; byte b1 = 50; char c1 = A, c2 =?, c3 = \n ; System.out.println( Labas + str + ; i= + i + ; l= + l + ; f= + f + ; d= + d); Išsaugoti failą būtina tokiu pačiu pavadinimu, kaip ir klasės pavadinimas: Paskaita1.java javac Paskaita1.java sukompiliuojamas failas, sukuriamas baitinis kodas Paskaita1.class java Paskaita1 interpretatorius įvykdo kodą,ekrane išvedamas tekstas: Labas vakaras; i=10; l=20; f=0.01; d=0.02 Programą sudaro viena ar kelios klasės (public class Paskaita1). Klasėspradžia žymima žodžiu: class po to eina klasės pavadinimas (iš didžiosios raidės), pvz. Paskaita1 Klasės kūnas (class body) rašomas tarp riestinių skliaustų. Visi veiksmai surašomi metoduose (kitose progr. Kalbose vadinama funkcijomis). Metodams suteikiami pavadinimai iš mažosios raidės. Būtinai turi būti vienas metodas pavadinimu main(string[] args), nes nuo jo pradedama vykdyti programa. Metodas gali grąžinti vieną reikšmę (return), kurios tipas nurodomas prieš metodo pavadinimą. Jei metodas negrąžina jokios reikšmės, tipas nurodomas void. Po metodo pavadinimo tarp skliaustelių nurodomi paduodami argumentai (parametrai) ir jų tipai. Pvz. String[] args yra masyvas sudarytas iš teksto eilučių. Prieš metodo tipą gali būti nurodomi modifikatoriai (modifiers): public reiškia, kad metodas pasiekiamas iš bet kur, static leidžia iškviesti main() pačioje programosvykdymo pradžioje. Modifikatoriai metodams nebūtini, išskyrus main() metodą, kur ji e privalomi. Metodo kūnas (suprogramuoti veiksmai) surašomi tarp riestinių skliaustų. Kiekvienos eilutės ar reiškinio gale dedamas kabliataškis. System.out.println() - išveda į ekraną tekstą. Java kalboje didžiosios ir mažosios raidės skirasi. Turi būti nurodyti kintamųjų tipai. KOMENTARAI Vienos eilutės komentavimas: //======PRADŽIA====== Kelių eilučių komentavimas: /* ČIA YRA PRADŽIA */ 4

5 PAVADINIMAI Kintamųjų, metodų ir klasių pvadinimai turi būti sudaryti iš lotyniškų raidžių, pabraukimo simbolio _ ar skaičių. Remiantis Java kodo konvencija rekomenduojama klasių pavadinimus rašyti iš didžiosios raidės, metodų ir kintamųjų pavadinimus mažosiomis raidėmis, konstantų pavadinimus visomis didžiosiomis raidėmis. public class Paskaita1 { public static int MIN_DELTA = 10; // klases pavadinimas // konstanta public static void main(string[] args) { // metodas String str = vakaras ; // kintamieji int i = 10, j= 10; long l = 20; float f = (float)0.01; double d = 0.02; byte b1 = 50; char c1 = A, c2 =?, c3 = \n ; System.out.println( Labas + str + ; i= + i + ; l= + l + ; f= + f + ; d= + d); Pavadinimas negali prasidėti skaičiumi. Pavadinimams negalima naudoti sisteminių Java žodžių pvz. kaip class, void, public, static, float, int ir t.t. EILUTES Rašomos tarp dvigubų kabučių: Dvi eilutes galima sujungti + ženklu: String str = vakaras ; Labas + vakaras SIMBOLIAI \n naujos eilutės simbolis (ASCII kodas 10) \r kursoriaus permetimo simbolis - grąžina į eilutės pradžią (ASCII kodas 13) \t tabuliacija \ dviguba kabutė \ - vienguba kabutė \\ - atgalinis pasvirasis brūkšnys System.out.println( Labas \n vakaras ); System.out.println( Labas \t vakaras ); System.out.println( Labas \ vakaras\ ); System.out.println( Labas \ vakaras\ ); 5

6 Raides galima nurodyti ir UTF-8 kodais, pvz.: "Balsis \u017eod\u017eio gale prie\u0161 priebalsius"; // \u017e radidė ž, \u0161 raidė š "Balsis daugiau nei trij\u0173 skiemen\u0173 \u017eodyje"; // \u0173 raidė ų Kompiliatorius visas raides kovertuoja į UTF-8 koduotę, tame tarpe ir patį programos tekstą. SVEIKIEJI SKAIČIAI Pvz. 5, -7, Pvz. 25L, -37L Jie pagal nutylėjimą išsaugomi int tipo formatu (4 baitai). Kai gale prirašyta raidė L arba l, išsaugoma long tipo formatu (8 baitai). Sveikieji tipai: Tipo pavadinimas Kiek užima baitų Diapazonas byte iki 127 short iki int iki (-2^31 iki 2^31-1) long 8-2^63 iki 2^63-1 char 2 \u0000 iki \uffff,dešimtainėj formoj nuo 0 iki Sveikieji skaičiai atmintyje saugomi dvejetainiu pavidalu su papildomu kodu, t.y. neigiamiems sveikiems skaičiams saugomas atitinkamo dvejetainio kodo papildomas kodas (two s complement). Pvz. int b1 = 50, b2=-99; Atmintyje b1=50 bus saugomas kaip 50 dvejetainis kodas b2=-99 bus saugomas tokiu principu: 99 dvejetainis kodas yra ; nuliukai keičiami vienetais, vienetai nuliukais, gaunamas papildomas kodas , ir pridedame vienetą, gauname atmintyje saugomą papildomą kodą Tokio papildomo kodo saugojimo tikslas yra tas, kad prie 99 pridėjus -99, turi gautis 0, taip pat skaičiaus dvejetainį kodą sudėjus su papildomu kodu (two s complement) yra gaunamas nulis (vyriausias bitas yra numetamas: baitą sudaro 8 bitai, todėl 9-tas bitas numetamas): = Tokiu būdu saugant neigiamo skaičiaus priešingą dvejetainį kodą vietoje atimties veiksmo yra naudojamas sudėties veiksmas. 6

7 DVEJETAINIŲ SKAIČIŲ ARITMETIKA Dvejetainių skaičių suma: 0+0=0 0+1=1 1+0=1 1+1=0, 1 laikomas atmintyje, pridedamas prie sekančio skaitmens. Pvz.: Dvejetainių skaičių atimtis: 0 0 = = 1, pasiskolinamas 1 iš sekančio skaitmens 1 0 = = Papildomi dvejetainiai skaičiai Yra dviejų tipų papildomi dvejetainiai skaičiai: One s complement ir Two s complement. One s complement : gaunamas kai dvejetainio kodo nuliukai keičiami vienetais, vienetai nuliukais. Pvz papildomas kodas bus Two s complement : gaunamas kai dvejetainio kodo nuliukai keičiami vienetais, vienetai nuliukais ir pridedamas 1tas. Pvz papildomas kodas bus An N-bit ones' complement numeral system can only represent integers in the range (2 N 1 1) to 2 N 1 1 while two's complement can express 2 N 1 to 2 N 1 1. Praktikoje paprastai yra naudojamas Two s complement kodas. 7

8 REALIEJI SKAIČIAI Jie pagal nutylėjimą išsaugomi double tipo formatu. Pvz , Pvz. 2.5e34, 2.5E-3 Pvz. 3.5F Pvz. 3.5D Su fiksuotu tašku. Su plaukiojančiu tašku. Kai gale prirašyta raidė F arba f, išsaugoma float tipo formatu. Kai gale prirašyta raidė D arba d, išsaugoma double tipo formatu (nurodyti D nebūtina,nes ir taip pagal nutylėjimą išsaugoma double tipu). Tipo pavadinimas Kiek užima baitų Diapazonas float 4 3.4e-38 < x < 3.4e38 (7-8 skaitmenys po kablelio) double 8 1.7e-308 < x < 1.7e308 (17 skaitmenų po kablelio) Jei reiškinyje vienas narys yra double tipo, tai ir kiti nariai pakeliami iki double tipo ir rezultatas yra double. Jei reiškinyje nėra double nario, bet dalyvauja float narys,tai ir kiti nariai pakeliami iki float tipo ir rezultatas yra float. LOGINIS TIPAS Galimos dvi reikšmės: true, false Pvz.: boolean b1 = true, b2 = false; LOGINĖS OPERACIJOS! NOT & AND OR ^ XOR && Conditional-AND Conditional-OR b1 b2!b1 b1&b2 b1 b2 b1^b2 true true false true true false true false false false true true false true true false true true false false true false false false Operacijose && ir dešinės pusės operandas skaičiuojamas tik tada, kai rezultatas nebūna aiškus iš karės pusės. Pvz. jei kairėje operacijos && pusėje yra false, tai dešinė pusė nebeskaičiuojama,nes aišku,kad atsakymas bus false. Jei kairėje operacijos pusėje yra true, tai dešinė pusė nebeskaičiuojama, nes aišku, kad atsakymas bus true. Ši taisyklė praverčia pvz. tokiais atvejais, kur nereikės bijoti dalybos iš nulio: if (x!= 0 && y/x > 0.001) if (x == 0 y/x > 0.001) Praktikoje programuojant būtent && ir operacijos yra naudojamos. boolean a, b, c; a = true; b = false; c = a & b; System.out.println("a & b=" + c); //a & b=false 8

9 c = a b; System.out.println("a b=" + c); //a b=true c = a ^ b; System.out.println("a ^ b=" + c); //a ^ b=true c =!a; System.out.println("!a=" + c); //!a=false System.out.println("\nOPERACIJOS && ir "); int x, y; x = 0; y = 5; if(x!= 0 && y / x > 2) { System.out.println("x!= 0 && y / x > 2"); else { System.out.println("NOT (x!= 0 && y / x > 2)"); if(x == 0 y / x > 2) { System.out.println("x == 0 y / x > 2"); else { System.out.println("NOT (x == 0 y / x > 2)"); PRISKYRIMO OPERACIJA Reikšmės priskyrimo operacija yra lygybės ženklas. Pvz.: int a = 5; Operacija Pvz. Operacija Pvz. = int i = 5; &= boolean b1 = true,b2=false; b1 &= b2; // atitinka b1 = b1 & b2; += int i = 5; ^= Analogiškai i += 3; // atitinka i = i + 3; atsakymas = 8 -= int i = 5; = Analogiškai i -= 3; // atitinka i = i 3; atsakymas 5 3 = 2 *= int i = 5; i *= 3; // atitinka i = i * 3; atsakymas 5 * 3 = 15 /= Analogiškai %= Analogiškai 9

10 OPERACIJOS SU SVEIKAIS SKAIČIAIS + suma - skirtumas * daugyba / dalyba % liekanos radimas ++ padidinimas vienetu -- sumažinimas vienetu Tipo keitimas pvz. (float)2.0 +, -, * operacijos atliekamos paprastai, pvz.: c = a + b; Reikia atkreipti dėmesį, kad dviejų sveikų saičių dalybos rezultatas vėl bus sveikas skaičius. Pvz. 5 / 2 = 2, o ne 2.5. Trupmeninė dalis yra tiesiog numetama. Tačiau 5 / 2.0 = 2.5, nes reiškinyje dalyvauja realus skaičius 2.0, todėl rezultatas irgi bus realus 2.5. int aa, bb, rez1; float cc, rez2, rez3; aa = 5; bb = 2; cc = (float)2.0; cc = 2; rez1 = aa / bb; //rez1 = aa / cc; rez2 = aa / cc; rez3 = (float)aa / bb; // KLAIDINGA!!! // TEISINGA!!! // TEISINGA!!! System.out.println("aa*bb=" + (aa*bb)); System.out.println("aa/bb=" + rez1); System.out.println("aa/cc=" + rez2); System.out.println("aa/bb=" + rez3); //aa*bb=10 //aa/bb=2 //aa/cc=2.5 //aa/bb= ir operacijas galima naudoti ir atskirai, ir reikškinio viduje, tačiau tai gali duoti skirtingus rezultatus. Jei operacija ++ ar -- yra atskirai, t.y. i++; arba ++i, tai tiesiog yra padidinama/sumažinama vienetu. Jei i++ ar i- operacija naudojama reiškinyje, tai pradžioje yra suskaičiuojamas reiškinys, po to yra padidinama/sumažinama vienetu. Jei ++i ar --i operacija naudojama reiškinyje, tai pradžioje yra padidinama/sumažinama vienetu po to suskaičiuojamas reiškinys. int i, j rez1; System.out.println("====== (++) ir (--) OPERACIJOS======"); i = 10; i++; System.out.println("i=" + i); // 11 i = 10; rez1 = i++; // rez1=10!!! System.out.println("rez1=" + rez1); // 10!!! System.out.println("i=" + i); // 11 i = 10; System.out.println("i++ " + i++); // 10 System.out.println("i=" + i); // 11 i = 10; j = (i++) + 5; System.out.println("1) j=" + j); // 15 i = 10; j = (++i) + 5; System.out.println("2) j=" + j); // 16 10

11 System.out.println(); i = 0; j = 0; for (int k=0; k < 5; k++) { System.out.println(k + ") i++:" + i++ + "; ++j:" + (++j)); // k=0..4 i=0..4 j=1..5 TIPO KEITIMO OPERACIJA Kai skaičiuojamas reiškinys visada vyskta reiškinyje dalyvaujančių narių tipo pakėlimas (angl. promotion) iki didžiausio reikškinyje dalyvaujančio tipo tokiu principu: Kai atliekamos aritmetinės operacijos (+,-,*,/) su sveikaisiais skaičiais (byte, short, int, char), visada tipas yra pakeliamas iki int tipo ir rezultatas gaunamas irgi int tipo. Tačiau, jei bent vienas reiškinio narys yra long tipo, visi kiti nariai pakeliami iki long tipo ir atsakymas yra long tipo. Panašiai jei bent vienas reiškinio narys yra float / double tipo, visi kiti nariai pakeliami iki float / double tipo ir atsakymas yra float / double tipo. Programuotojas gali pats nurodyti, kokiu tipu išsaugoti duomenis, prieš skaičių ar kintamąjį paprastuose skliaustuose įrašęs norimą tipą, pvz. int tipo skaičius 2 konvertuojamas į float tipą: float f = (float)2; Kaip jau turėjome ankstesniame pavyzdyje: int aa, bb, rez1; float cc, rez2, rez3; aa = 5; bb = 2; cc = 2; // int tipas praplečiamas iki float tipo rez1 = aa / bb; // 2 //rez1 = aa / cc; // KLAIDA, nes aa/cc yra float tipo, bandoma įrašyti į mažesnį int rez2 = aa / cc; // TEISINGA, atsakymas 2.5 rez3 = aa / bb; // 2.0, nes aa/bb=2 yra int tipo, praplečiama iki float rez3 = (float)aa / bb; // 2.5, nes aa konvertuojamas į float, ir visas aa/bb tampa float Tipą galima ne tik praplėsti, bet ir susiaurinti. Tai reikia daryti atsargiai!!! 1 Pvz.: cc = (float)2.0; // 2.0 yra double, tačiau double tipas susiaurinamas iki float 2 Pvz.: skaičius 300 dvejetainėje sistemoje yra , kurį sudaro devyni bitai, bet šį skaičių įrašius į byte tipo kintamąjį, kuriam išskirta aštuoni bitai atminties, vysriausias bitas yra numetamas, ir atsakyme gauname skaičių =44: // tipo susiaurinimas byte by = (byte)300; // atsakymas by=44 byte b1 = 50, b2 = -99; short k; k = b1 + b2; // KLAIDINGA: Type mismatch: cannot convert from int to short // desineje puseje atliekama artim-ne op-cija ir tipas pakeliamas iki int k = (short)(b1 + b2); // TEISINGA, atliekamas tipo susiaurinimas 11

12 by = 1; //by = by + 10; // KLAIDINGA, nes desineje puseje by tipas pakeliamas iki int!!! by += 10; // TEISINGA, nes 10 tipas susiaurinamas iki byte!!! System.out.println("by="+ by); //by=11 PALYGINIMO OPERACIJOS > daugiau >= daugiau lygu == lygu < mažiau <= mažiau lygu!= nelygu if(a > 5) if(b == 2) while(c!= 0) SĄLYGINĖ OPERACIJA (sąlyga)? (atsakymas, jei sąlyga=true) : (atsakymas, jei sąlyga=false) Pvz.: //======SALYGINE OPERACIJA====== System.out.println("======SALYGINE OPERACIJA======"); int i = 10, j = -10, rez1; rez1 = i<0?0:i; System.out.println("1) i=10 rez1=" + rez1); //1) i=10 rez1=10 rez1 = j<0?0:j; System.out.println("2) j=-10 rez1=" + rez1); //2) j=-10 rez1=0 REIŠKINIO SKAIČIAVIMAS Reiškiniai yra skaičiuojami iš kairės į dešinę. Reiškinio skaičiavimo tvarką galima nurodyti skliaustelių pagalba. Operacijų atlikimo prioriteto tvarka: 1. i++, i i, --i, ~,! 3. Tipo keitimas, pvz. (float)i 4. *, /, % 5. +, - 6. >, <, >=, <= 7. ==,!= 8. & 9. ^ && (sąlyga)? (atsakymas, jei sąlyga=true) : (atsakymas, jei sąlyga=false) 14. =, +=, -=, *=, /=, %=, &=, ^=, =, 12

13 OPERATORIAI Java kalboje yra tokie operatoriai: Kintamųjų paskelbimo operatoriai; Operatoriai-išraiškos (pvz. a+5); Priskyrimo operatoriai (pvz. a=b-1); if while, do-while, for switch; break, continue, return; blokas nurodomas riestiniais skliausktais { tuščias operatorius (kabliataškis) OPERATORIUS if if (max < y) { max = y; if (a < x) { x = a + b; else { x = a - b; if (n == 0) { sign = 0; else if (n < 0) { sign = -1; else { sign = 1; CIKLO OPERATORIUS for for (int k=0; k < 5; k++) { System.out.println(k + ") i++:" + i++ + "; ++j:" + (++j)); // k=0..4 i=0..4 j=1..5 CIKLO OPERATORIUS while, do-while The while statement continually executes a block of statements while a particular condition is true: while (expression) { statement(s) The while statement evaluates expression, which must return a boolean value. If the expression evaluates to true, the while statement executes the statement(s) in the while block. The while statement continues testing the expression and executing its block until the expression evaluates to false. Using the while statement to print the values from 1 through 10 can be accomplished as in the program: class WhileDemo { public static void main(string[] args){ int count = 1; while (count < 11) { System.out.println("Count is: " + count); count++; 13

14 You can implement an infinite loop using the while statement as follows: while (true){ // your code goes here The Java programming language also provides a do-while statement, which can be expressed as follows: do { statement(s) while (expression); The difference between do-while and while is that do-while evaluates its expression at the bottom of the loop instead of the top. Therefore, the statements within the do block are always executed at least once: class DoWhileDemo { public static void main(string[] args){ int count = 1; do { System.out.println("Count is: " + count); count++; while (count < 11); OPERATORIAI continue ir break Operatorius continue nutraukia esamos ciklo iteracijos vykdymą ir peršokia prie sekančios ciklo iteracijos: int x = 0; for(int i = 0; i <= N; i++) { if (i < 3) continue; x += i; // x = suma nuo 4 iki N Operatorius break nutraukia ciklo vykdymą ir peršokia į sekančią eilutę, esančią iš karto už ciklo pabaigos: int x = 0; for(int i = 0; i < N; i++) { if (i > 8) break; x += i; // x = suma nuo 0 iki 7 OPERATORIUS switch A switch works with the byte, short, char, and int primitive data types. It also works with enumerated types, the String class, and a few special classes that wrap certain primitive types: Character, Byte, Short, and Integer. The following code example, SwitchDemo, declares an int named month whose value represents a month. The code displays the name of the month, based on the value of month, using the switch statement. 14

15 public class SwitchDemo { public static void main(string[] args) { int month = 8; String monthstring; switch (month) { case 1: monthstring = "January"; break; case 2: monthstring = "February"; break; case 3: monthstring = "March"; break;.. case 7: monthstring = "July"; break; case 8: monthstring = "August"; break; case 9: monthstring = "September"; break; case 10: monthstring = "October"; break; case 11: monthstring = "November"; break; case 12: monthstring = "December"; break; default: monthstring = "Invalid month"; break; System.out.println(monthString); In this case, August is printed to standard output. return Statement The return statement exits from the current method, and control flow returns to where the method was invoked. The return statement has two forms: one that returns a value, and one that doesn't. To return a value, simply put the value (or an expression that calculates the value) after the return keyword. return v; The data type of the returned value must match the type of the method's declared return value. When a method is declared void, use the form of return that doesn't return a value. return; 15

16 MASYVAI Masyvas yra skirtas laikyti kelis vieno tipo elementus, kurie saugomi gretimose atminties celėse. Masyvai priskiriami prie nuorodų tipų (reference types). Masyvo paskelbimas vykdomas trimis žingsniais: Paskelbimas (declaration), pvz.: double[] a, b; int[] c; Šiame žingsnyje yra sukuriamos nuorodos a ir b į du double tipo masyvus, bei nuoroda c į int tipo masyvą. Apibrėžimas (instantiation),pvz.: a = new double[5]; b = new double[10]; c = new int[20]; Nurodomas masyvo elementų skaičius (dar vadinamas masyvo ilgiu), pavyzdyje 5, 10 ir 20, operatyvinėje atmintyje išskiriama vieta masyvui, nuorodos kintamajam (a, b ir c) priskiriamas masyvo adresas atmintyje. Visa tai padaro operacija new, kuri objektui išskiria atmintį ir grąžina atitinkamą adresą. Masyvo elementai yra numeruojami nuo 0, t.y. a[0],..., a[4]. Masyvo elemento indeksas turi būti sveikasis skaičius ar kintamasis, išskyrus long tipą. Pvz.: int i=2; a[i]=3.5; Inicializacija (initialization) masyvo elementams yra priskiriamos reikšmės,pvz.: a[0]=0; a[1]=1; a[2]=2; a[3]=3; a[4]=4; for(int i=0; i<10; i++) { b[i]=2*i+0.5; Pirmus du žingsnius galima apjungti į vieną: double[] a = new double[5]; double[] b = new double[10]; int[] c = new int[20]; arba: double[] a = {0.5, 0.1, 3.6, 7.0, 10.1; Į ką reikia atkrepti dėmesį: Kadangi masyvai yra nuorodos tipo, tai nuoroda į masyvą nėra masyvo dalis. Nuorodą į masyvą galima permesti, kad rodytų į kitą tokio paties tipo masyvą. Pvz.: Po priskyrimo veiskmo: a = b; abi nuorodos a ir b rodys į tą patį double[] masyvą, kurio dydis yra 10 (pirmasis double masyvas iš 5 elementų bus prarastas, tiksliau jokia nuoroda į jį neberodys). Pvz. Palyginimo operacijose: a == b; a!= b; yra lyginami ne masyvų elementai, o jų adresai, saugomi nuorodose a ir b, t.y. nustatome ar nuorodos rodo į tą patį masyvą ar ne. Kiekvienam masyvui be nuorodos į jį papildomai yra sukuriama sveikoji konstanta pavadinimu length, kurioje saugomas masyvo ilgis. Pvz.: a.length yra lygus 5, b.length yra lygus 10, c.length yra lygus

17 DAUGIAMAČIAI MASYVAI Daugiamačio masyvo paskelbimas ir reikšmių priskyrimas: int[][] d = new int[3][4]; d[0][0] = 0; d[0][1] = 1;...; d[2][3] = 5; Arba: int m[][] = new int [3][4]; for (int i=0; i < m.length; i++) { for (int j=0; j < m[0].length; j++) { m[i][j] = i+j; System.out.println(m[i][j]); Arba: int[][] e = {{1,2,3, {4,5,6; Java kalboje dvimatis masyvas neprivalo būti stačiakampis. Masyvo elelemntai gali būti kiti masyvai. Pvz.: char[][] c = new char[3][]; Čia paskelbiama, kad masyvą c sudaro 3 elementai, kurie vėl yra masyvai. Dabar apibrėšime tuos 3 elementus-masyvus: c[0] = new char[2]; c[1] = new char[4]; c[2] = new char[3]; Tada: c.lenght = 3 c[0].length = 2 c[1].length = 4 c[2].length = 3 Paskutiniame žingsnyje priskiriame konkrečias reikšmes: c[0][0]= a ;c[0][1]= b ;c[1][0]= c ; c[1][1]= d ; ir t.t. 17

18 VECTOR Masyvų trūkumai: Iš anksto reikia žinoti elementų skaičių. Nepatogu įterpinėti per vidurį naujus elementus praktiškai reikia kurti naują didesnį masyvą. Nepatogu per vidurį ištrinti elementus reikia arba pernumeruoti elementus, arba kurti naują, mažesnį masyvą. Elementai privalo būti vieno tipo. Kai iš anksto nežinomas elementų skaičius, ir reikia dažnai įterpti / ištrinti elementus, reikia naudoti kitas struktūras. Viena iš anksčiausiai Java kalboje atsiradusių struktūrų duomenų saugojimui yra Vector. Vector klasė yra Java pakete java.util. Vektoriuje saugomi bendriausio tipo Object elementai, t.y. bet kokio tipo. Elementai gali būti skirtingų tipų. Elementų skaičius iš ansto nefiksuojamas/ nenurodomas, jis automatiškai keičiasi pridedant ar ištrinant elementus. Jei vektorių sudaro N elementų, jie numeruojami 0, 1,..., N-1. Veiksmas Vektoriaus sukūrimas, kai nežinomas elementų skaičius: new Vector() Vektoriaus sukūrimas, kai žinomas elementų skaičius: new Vector(N) Elemento pridėjimas vektoriaus gale: add() Elemento įdėjimas nurodytoje pozicijoje: add(int index, Object element) Pasirinktoje vietoje buvęs el-tas ir visi sekantys yra perstumiami per vieną poziciją. El-to, esančio nurodytoje pozicijoje, pakeitimas: set(int index, Object element) Pasirinktoje vietoje buvęs el-tas ištrinamas, vetoje jo įrašomas naujas Pavyzdys // el-tai Integer, Float ir string tipo Vector<Integer> v1 = new Vector<Integer> (); Vector<Float> v2 = new Vector<Float> (); Vector<String> v3 = new Vector<String> (); // el-tai bet kokio tipo Vector<Object> v4 = new Vector<Object> (); // vektorius sudarytas iš 5 el-tų Vector<Integer> v1 = new Vector<Integer> (5); // gale pridedamas el-tas, kurio reikšmė nurodyta v1.add(13); v1.add(14); v1.add(17); v1.add(18); v3.add( Labas ); // pozicijoje nr. 2 įterpiamas naujas el-tas =15, // kiti el-tai perstumiami v1.add(2, 15); // pozicijoje nr. 3 užrašomas naujas el-tas 16 v1.set(3, 16); 18

19 Ar vektorius tuščias isempty() Vektoriaus el-to gavimas: get(int index) Ar vektoriuje yra nurodytas elementas contains() Nurodyto el-to pozicija indexof() El-to ištrynimas pagal reikšmę: remove(object obj) El-to ištrynimas pagal indeksą arba indeksus nuoiki: remove(int index) removerange(int begin, int end) Visų vektoriaus el-tų ištrynimas: clear() // atsakymas true, jei tuščias v1.isempty() // grąžina el-tą, esantį 3-je pozicijoje v1.get(3); // atsakymas true, jei vektoriuje yra el-tas =16 v1.contains(16); //el-tas =16yra 3-je pozicijoje v1.indexof(16); // ištrina pirmą surastą el-tą = Labas v3.remove( Labas ); // ištrina pozicijoje 1 esantį el-tą v1.remove(1); v1.removerange(2, 4); v2.clear(); 19

20 KLASĖS APRAŠYMAS Klasės aprašymas prasideda nuo žodžio class po kurio nurodomas klasės pavadinimas (rekomenduojama klasių pavadinimus rašyti iš didžiosio raidės). Prieš žodį class galima nurodyti modifikatorių: public, abstract, final ir kt. Klasės kūnas, kuriame surašomi klasės kintamieji ir metodai, rašomas tarp riestinių skliaustų. Prekė kodas pavadinimas šalis kainavnt import java.util.vector; public class Preke { int kodas; String pavadinimas; String salis; float kainavnt; public Preke(int pkodas, String ppav, String psalis, float pkainavnt) { kodas = pkodas; pavadinimas = ppav; salis = psalis; kainavnt = pkainavnt; public void spausdinti() { System.out.println(kodas + + pavadinimas + + salis + + kainavnt); private int getkodas() { return kodas; Klasės kintamieji dar vadinami laukais (angl. field), yra skelbiami nurodant jo tipą ir pavadinimą. Prieš kintamojo tipą galima nurodyti modifikatorių: public, protected, private, static, final, kt. Ką reiškia modofikatoriai, bus paaiškinta vėliau. Kintamųjų ir metodų (funkcijų) pavadinimus rekomenduojama rašyti iš mažosios raidės. Klasės metodai skelbiami nurodant grąžinamos reikšmės tipą, metodo pavadinimą, tarp paprastų skliaustų išvardijami metodui paduodami kintamieji su jų tipais, atskiriami kableliais. Toliau tarp riestinių skliaustų programuojami metodo atliekami veiksmai. Metodo pabaigoje yra grąžinama reikšmė operatoriumi return. Jei metodo tipas nurodytas void, tai metodas jokios reikšmės negrąžina, ir return operatorius nereikalingas. Metodo aprašymas gali prasidėti nuo modifikatoriaus: public, protected, private, abstract, static, final, ir kt. Metodo signatūrą sudaro: metodo pavadinimas, jo parametrų skaičius ir jo parametrų tipų sąrašas. Todėl du metodai su vienodais pavadinimais tačiau skirtingais parametrų tipais ar skirtingu parametrų skaičiumi yra laikomi skirtingais metodais, pvz.: 20

21 // metodas nuskaito tik duomenis su data=pdata public Vector nuskaityti(string pdata) { Vector v = new Vector(); // is lenteles nuskaitomi irasai, kur Data == pdata // nuskaityti irasai surasomi i kintamaji v return v; // metodas nuskaito visus duomenis public Vector nuskaityti() { Vector v = new Vector(); // is lenteles nuskaitomi visi // nuskaityti irasai surasomi i kintamaji v return v; Toks metodų su vienodais pavadinimais tik skirtingais parametrais naudojimas vadinamas metodų perkrovimu (angl. overloading). KLASĖS KONSTRUKTORIUS Klasės Preke objektas yra sukuriamas taip: Preke p1 = new Preke(1, "Duona", "LT", 2); Dešinėje pusėje po new yra kreipiamasi į klasės kostrukrotių, kurio pagalba klasės kintamiesiems yra priskiriamos konkrečios reikšmės: public Preke(int pkodas, String ppav, String psalis, float pkainavnt) { kodas = pkodas; pavadinimas = ppav; salis = psalis; kainavnt = pkainavnt; Klasės konstruktorius aprašomas panašiai kaip metodas, kurio vardas sutampa su klasės pavadinimu. Konstruktoriaus savybės: Kiekviena klasė turi konstruktorių. Net jei konstruktoriaus kodas nėra parašytas, Java pati sukuria konstruktorių (default constructor), kuris yra tuščias ir neatlieka jokių veiksmų,tik iškviečia tėvinės klasės konstruktorių (komanda super() ). Konstruktoriaus kūnas rašomas tarp riestinių skliaustų. Jame surašomi veiksmai, kuriuos reikia atlikti prieš pradedant naudoti klasės objektą, pvz. pradinių reikšmių priskyrimas. Kai yra kuriamas klasės objektas, Java visada pradžioje sukuria klasės kintamuosius, steikia jiems nulines reikšmes, tada automatiškai įvykdo konstruktorių. Tik po to galima pradėti naudoti objektą. Konstruktorius nelaikomas metodu. Konstruktorius negrąžina jokios reikšmės, todėl jo aprašyme nėra nurodytas tipas void. Konstruktoriui galima nurodyti modifikatorių public, protected ar private. Konstruktoriuje komanda super() galima kreiptis į tėvinės klasės konstruktorių (ši komanda visada turi būti pati pirma, tik po jos seka kiti veiksmai): public Preke(int pkodas, String ppav, String psalis, float pkainavnt) { super(); kodas = pkodas; pavadinimas = ppav; salis = psalis; kainavnt = pkainavnt; 21

22 Net jei konstruktoriuje nėra įrašyta komanda super(), Java vis tiek pati iškviečia tėvinės klasės konstruktorių, ir tik po to vykdo kitus konstruktoriuje surašytus veiksmus. Klasė gali turėti kelis konstruktorius, su skirtingais parametrais (analogiškai kaip ir kelis vienodo pavadinimo metodus su skirtingais parametrais). OPERACIJA new Operacija new išskiria atmintį masyvams ir objektams. Masyvų atveju (a yra nuoroda į sukurtą masyvą): double a[] = new double[10]; Objektų atveju: Preke p1 = new Preke(1, "Duona", "LT", 2); kur dešinėje pusėje yra kreipiamasi į klasės konstruktorių, p1 yra nuoroda į objektą. Tada: Klasės kintamiesiems-skaičiams yra priskiriamos nulinės reikšmės, loginiams kintamiesiems - reikšmės false, nuorodoms reikšmės null. Po to yra vykdomas konstruktoriaus kodas, t.y. priskiriamos parametruose nurodytos reikšmės (1, "Duona", "LT", 2). KINTAMŲJŲ MATOMUMO DIAPAZONAS Kintamųjų matomumą aprašysime pavyzdyje: class Matomumas { int a = 1, p; // a ir p matomi visuose klasės metoduose, // kuriuose jų neuždengia kiti tokio pat vardo kintamieji // p priskiriama pradinė reikšmė 0 public Matomumas (int pp) { // pp lokalus kintamasis matomas tik konstruktoriaus viduje p = pp ; // klasės kintamajam p priskiriama reikšmė iš lokalaus pp // cia pp jau nebeegzistuoja, p matomas public void funkcija (int b) { // b lokalus kintamasis matomas tik metodo funkcija() viduje int a = 2; // a lokalus kintamasis matomas tik metodo funkcija() viduje // jis perdengia klasės kintamąjį a int c; ; // c lokalus kintamasis matomas tik metodo funkcija() viduje // c kol kas nepriskirta jokia reikšmė c = 8; // c priskirta reikšmė 8 for(int i=0; i < 10; i++) { // i lokalus kintamasis matomas tik ciklo viduje int e = 5; // e lokalus kintamasis matomas tik ciklo viduje System.out.println( e= + e); // visada išves reikšmę 5 // i ir e nebeegzistuoja ciklo išorėje 22

23 public static void main (String[] args) { int a = 1; // a lokalus kintamasis matomas tik metodo main() viduje funkcija(a); Taigi klasės kintamiesiems, juos sukuriant automatiškai yra priskiriamos pradinės (nulinės) reikšmės, o lokaliems kintamiesiems nepriskiriamos jokios reikšmės, programuotojas pats turi pasirūpinti priskyrimu. Kompiliatorius parodo pranešimus, jei yra lokalių kintamųjų, kuriem nepriskirtos jokios pradinės reikšmės. PAVELDINČIOS IR TĖVINĖS KLASĖS Pvz.: Turime klasę Zmogus, su kintamuoju vardas ir keliais metodais: Zmogus.java: public class Zmogus { String vardas; public Zmogus(String v) { vardas = v; public void labas() { System.out.println("Zmogus.labas(): Labas " + vardas); visogeroprivate(); // TIK sioje klaseje galima kreiptis i private metoda private void visogeroprivate() { System.out.println("Zmogus.visoGeroPrivate(): Viso gero " + vardas); protected void visogeroprotected() { System.out.println("Zmogus.visoGeroProtected(): Viso gero " + vardas); Tai yra bendra (tėvinė) klasė. Norime sukurti iš jos paveldinčias klases Lietuvis ir Anglas, kuriose yra paveldimi visi kintamieji ir metodai iš tėvinės klasės ir sukuriami papildomi skirtingi metodai. Tėvinės klasės pavadinimas, iš kurios yra paveldima, nurodomas po žodžio extends: Lietuvis.java: public class Lietuvis extends Zmogus { public Lietuvis(String v) { super(v); public void labasrytas() { System.out.println("Lietuvis.labasRytas(): Labas rytas " + vardas); public void dauginti(int n) { int rez = 1; for(int i = 1; i <= n; i++) { rez *= i; System.out.println("Lietuvis.dauginti(): rez=" + rez); 23

24 Anglas.java: public class Anglas extends Zmogus { public Anglas(String v) { super(v); public void labas() { System.out.println("Anglas.labas(): Hello " + vardas); public void labasrytas() { System.out.println("Anglas.labasRytas(): Good morning " + vardas); public void sumuoti(int n) { int rez = 0; for(int i = 1; i <= n; i++) { rez += i; System.out.println("Anglas.sumuoti(): rez=" + rez); Pagrindinis.java: public class Pagrindinis { public static void main(string[] args) { Zmogus zm = new Zmogus("Zmogus"); Lietuvis lt = new Lietuvis("Petras"); Anglas en = new Anglas("John"); zm.labas(); zm.visogeroprotected(); //zm.visogeroprivate(); // KLAIDA: private metodo cia negalima kviesti lt.labas(); lt.visogeroprotected(); lt.labasrytas(); lt.dauginti(5); en.labas(); en.visogeroprotected(); en.labasrytas(); en.sumuoti(5); Programos rezultatas: Zmogus.labas(): Labas Zmogus Zmogus.visoGeroPrivate(): Viso gero Zmogus Zmogus.visoGeroProtected(): Viso gero Zmogus Zmogus.labas(): Labas Petras Zmogus.visoGeroPrivate(): Viso gero Petras Zmogus.visoGeroProtected(): Viso gero Petras Lietuvis.labasRytas(): Labas rytas Petras Lietuvis.dauginti(): rez=120 Anglas.labas(): Hello John Zmogus.visoGeroProtected(): Viso gero John Anglas.labasRytas(): Good morning John Anglas.sumuoti(): rez=15 24

25 Kaip matome, tiek objektas lt tiek objektas en turi iš tėvinės klasės paveldėtą kintamąjį vardas ir metodą labas(). Taip pat kiekvienas objektas atskirai turi savo metodus dauginti() ir sumuoti(). Be to tėvinėje klasėje esantis metodas gali būti perrašomas paveldinčioje klasėje, t.y. paveldinčioje klasėje gali būti sukurtas metodas su tokiu pačiu pavadinimus ir parametrais, kaip ir tėvinėje klasėje tik su pakeistu programiniu kodu. Tai vaidinama metodo overriding. Pvz. Klasėje Anglas galima perrašyti tėvinės klasės metodą labas(): public class Anglas extends Zmogus { //... public void labas() { System.out.println("Hello " + vardas); Tokiu atveju metodo pasiekiamumą galima tik praplėsti, negalima susiaurinti, t.y. jei tėvinėje klasėje metodas buvo public, jis ir turi likti public, o jei buvo protected, tai gali paveldinčioje klasėje pasikeisti į public. Į tėvinės klasės metodus galima kreiptis pridedant žodį super. Pvz.: public class Anglas extends Zmogus { //... public void labas() { super.labas(); // kviečiamas tėvinės klasės metodas labas() PUBLIC PRIVATE PROTECTED Klases, klasės kintamuosius ir mtodus galima pažymėti modifikatoriais public, private ar protected. Klasės nariai pažymėti public yra matomi visose kitose klasėse ir aišku pačios klasės viduje. Pvz: public void labasrytas() { System.out.println("Anglas.labasRytas(): Good morning " + vardas); Į metodą labasrytas() galima kreiptis ir iš pačios klasės viduje esančių metodų ir iš bet kurios kitos klasės. Tuo tarpu klasės nariai, į kuriuos nebus kreipiamasi iš išorės, turėtų būti pažymėti private, t.y. į juos galima kreiptis tik iš esamos klasės vidaus. Tai vadinama inkapsuliacija. 25

26 Pvz.: Į metodą visogeroprivate(), esantį klasėje Zmogus, galima kreiptis tik iš pačios klasės Zmogus vidaus, pvz. iš metodo labas(): public class Zmogus { //... public void labas() { System.out.println("Zmogus.labas(): Labas " + vardas); visogeroprivate(); // TIK sioje klaseje galima kreiptis i private metoda private void visogeroprivate() { System.out.println("Zmogus.visoGeroPrivate(): Viso gero " + vardas); //... Tačiau tiesiai į metodą visogeroprivate() negalima kreiptis nei iš paveldinčios klasės Lietuvis, nei iš klasės Anglas, nei iš metodo main(). Programuojant programos struktūros sukuriamos žymiai paprastesnės, kai ryšiai tarp klasių yra kuo mažesni, t.y. kiekvienoje klasėje yra sukuriami tik tai klasei reikalingi metodai, nesusiję su kitomis klasėmis. Tai vadinama low coupling ir tuo tikslu tik klasės viduje naudojami kintamieji bei metodai žymimi private modifikatoriumi. Klasės nariai, į kuriuos nebus kreipiamasi iš išorės, tačiau galima kreiptis iš esamos klasės ir iš paveldinčių klasių, turėtų būti pažymėti protected. Pvz.: public class Zmogus { //... protected void visogeroprotected() { System.out.println("Zmogus.visoGeroProtected(): Viso gero " + vardas); //... public static void main (String[] args) { //... zm.labas(); zm.visogeroprotected(); //... lt.visogeroprotected(); //... en.visogeroprotected(); FINAL Metodą pažymėjus modifikatoriumi final, yra uždraudžiama paveldinčiose klasėse jį perrašyti (overriding). Būtent final yra matematinės bibliotekos metodai: Math.cos(), Math.sin() ir t.t. Jei final pažymėta visa klasė, iš jos negalima paveldėti. Tokia klasė yra Math: public final class Math {... 26

27 Kintamųjų atveju final modifikatorius nurodo, kad kintamojo reikšmės negalima keisti, t.y. paskelbiama konstanta: public final double PI = 3.14; Pagal Code Conevntion kanstantų pavadinimai rašomi visomis didžiosiomis raidėmis. STATINIAI KINTAMIEJI Sukūrus kelis tos pačios klasės objektus, kiekvienam jų atskirai yra sukuriami savi kintamieji, kintamiesiems yra išskiriamos atskiros atmitys, ir viename objekte keičiant kintamojo reikšmę, kito objekto to pačio kintamojo reikšmė nesikeičia. Pvz.: Point p1 = new Point(1,2,3); Point p2 = new Point(3,4,5); p1.x = 2; p2.y = 3; Taško p1 koordinatės bus (2,2,3), o taško p2 koordinatės bus (3,3,4), t.y. vieno taško koordinačių keitimas neįtakoja kito taško koordinačių. Tačiau gali būti atvejų, kai reikia sukurti kintamąjį bendrą visiems klasės objektams, t.y. tokį, kurio reikšmę keičiant viename objekte, reikšmė pasikeistų ir kituose tos klasės objektuose. Tokie kintamiemi paskelbiami static. Statiniam kintamajam išskiriama viena atminties ląstelė, kuria naudojasi visi klasės objektai. Pvz. klasės Automobile statinis kintamasis number skaičiuoja, kiek buvo sukurta tos klasės objektų: public class Automobile { public static int number; public String name; public Automobile(String pname) { name = pname; public class test { public static void main(string[] args) { Automobile a1 = new Automobile( automobilisa ); a1.number++; System.out.println(a1.name + nr= + a1.number); Automobile a2 = new Automobile( automobilisb ); a2.number++; System.out.println(a2.name + nr= + a2.number); Automobile a3 = new Automobile( automobilisc ); a3.number++; System.out.println(a3.name + nr= + a3.number); Rezulatas: automobilisa nr=1 automobilisb nr=2 automobilisc nr=3 27

28 STATINIAI METODAI Metodai, kuriuose yra naudojami statiniai kintamieji irgi paskelbiami statiniais, pridedant žodį static, pvz.: public static void main(string[] args) {... Statiniai metodai turi visai kitą prasmę negu kintamieji. Nepriklausomai nuo to ar metodas statinis ar ne, atmintyje visada sukuriama tik viena metodo mašininio kodo kopija, kuria naudojasi visi kalsės objektai (dar sakoma visi klasės egzemlpioriai). Pagrindinė statinio metodo savybė statinis metodas įvykdomas iš karto visuose klasės objektuose (egzemplioriuose). PRIMITYVŪS IR NUORODOS DUOMENŲ TIPAI Java turi aštuonis primityvius duomenų tipus (angl. primitive types), išvardintus lentelėje žemiau. Papildomai Java turi penkis nuorodos tipus (angl. reference types) tokius, kaip klasės, interfeisai, masyvai, sunumeruoti, anotacijos (angl. classes, interfaces, arrays; enumerated types and annotation types are reference types). Java primityvūs duomenų tipai Type Contains Default Size boolean true or false false 1 bit char Unicode character \u bits byte Signed integer 0 8 bits short Signed integer 0 16 bits int Signed integer 0 32 bits long Signed integer 0 64 bits float IEEE 754 floating point bits double IEEE 754 floating point bits REFERENCE vs. PRIMITIVE TYPES Reference types and objects differ substantially from primitive types and their primitive values: Eight primitive types are defined by the Java language. Reference types are user-defined, so there is an unlimited number of them. For example, a program might define a class named Point and use objects of this newly defined type to store and manipulate X,Y points in a Cartesian coordinate system. The same program might use an array of characters of type char[ ]to store text and might use an array of Point objects of type Point[ ]to store a sequence of points. Primitive types represent single values. Reference types are aggregate types that hold zero or more primitive values or objects. Our hypothetical Point class, for example, might hold two double values to represent the X and Y coordinates of the points. The char[ ] and Point[ ] array types are obviously aggregate types because they hold a sequence of primitive char values or Point objects. 28

29 Primitive types require between one and eight bytes of memory. When a primitive value is stored in a variable or passed to a method, the computer makes a copy of the bytes that hold the value. Objects, on the other hand, may require substantially more memory. Memory to store an object is dynamically allocated on the heap when the object is created and this memory is automatically "garbage-collected" when the object is no longer needed. When an object is assigned to a variable or passed to a method, the memory that represents the object is not copied. Instead, only a reference to that memory is stored in the variable or passed to the method. This last difference between primitive and reference types explains why reference types are so named. The sections that follow are devoted to exploring the substantial differences between types that are manipulated by value and types that are manipulated by reference. COPYING OBJECTS The following code manipulates a primitive int value: int x = 42; int y = x; After these lines execute, the variable y contains a copy of the value held in the variable x. Inside the Java VM, there are two independent copies of the 32-bit integer 42. Now think about what happens if we run the same basic code but use a reference type instead of a primitive type: Point p = new Point(1.0, 2.0); Point q = p; After this code runs, the variable q holds a copy of the reference held in the variable p. There is still only one copy of the Point object in the VM, but there are now two copies of the reference to that object. This has some important implications. Suppose the two previous lines of code are followed by this code: System.out.println(p.x); // Print out the X coordinate of p: 1.0 q.x = 13.0; // Now change the X coordinate of q System.out.println(p.x); // Print out p.x again; this time it is 13.0 Since the variables p and q hold references to the same object, either variable can be used to make changes to the object, and those changes are visible through the other variable as well. This behavior is not specific to objects; the same thing happens with arrays, as illustrated by the following code: char[] greet = { 'h','e','l','l','o' ; // greet holds an array reference char[] cuss = greet; // cuss holds the same reference cuss[4] = '!'; // Use reference to change an element System.out.println(greet); // Prints "hell!" 29

30 A similar difference in behavior between primitive types and reference types occurs when arguments are passed to methods. Consider the following method: void changeprimitive(int x) { while(x > 0) System.out.println(x--); x = 5; changeprimitive(x); // System.out.println(x); // 5 When this method is invoked, the method is given a copy of the argument used to invoke the method in the parameter x. The code in the method uses x as a loop counter and decrements it to zero. Since x is a primitive type, the method has its own private copy of this value, so this is a perfectly reasonable thing to do. On the other hand, consider what happens if we modify the method so that the parameter is a reference type: void changereference(point p) { while(p.x > 0) System.out.println(p.x--); When this method is invoked, it is passed a private copy of a reference to a Point object and can use this reference to change the Point object. Consider the following: Point q = new Point(3.0, 4.5); // A point with an X coordinate of 3 changereference(q); // Prints 3,2,1 and modifies the Point System.out.println(q.x); // The X coordinate of q is now 0! When the changereference( ) method is invoked, it is passed a copy of the reference held in variable q. Now both the variable q and the method parameter p hold references to the same object. The method can use its reference to change the contents of the object. Note, however, that it cannot change the contents of the variable q. In other words, the method can change the Point object beyond recognition, but it cannot change the fact that the variable q refers to that object. The title of this section is "Copying Objects," but, so far, we've only seen copies of references to objects, not copies of the objects and arrays themselves. To make an actual copy of an object, you must use the special clone( ) method (inherited by all objects from java.lang.object): Point p = new Point(1,2); // p refers to one object Point q = (Point) p.clone( ); // q refers to a copy of that object q.y = 42; // Modify the copied object, but not the original int[] data = {1,2,3,4,5; // An array int[] copy = (int[]) data.clone( ); // A copy of the array Note that a cast is necessary to coerce the return value of the clone( ) method to the correct type. There are a couple of points you should be aware of when using clone( ). clone creates a shallow copy of an object. The copied object contains copies of all the primitive values and references in the original object. In other words, any references in the object are copied, not cloned; clone( ) does not recursively make copies of the objects referred to by those references. A class may need to override this shallow copy behavior by defining its own version of the clone( ) method that explicitly performs a deeper copy where needed. To understand the shallow copy behavior of clone( ), consider cloning a two-dimensional array of arrays: 30

JAVA pagrindai Lek. Liudas Drejeris

JAVA pagrindai Lek. Liudas Drejeris JAVA pagrindai Lek. Liudas Drejeris Programa (1) Programa, tai eilė instrukcijų (vadinamų programiniais sakiniais), kurie vykdomi paeiliui, kol gaunamas norimas rezultatas. Programa (2) Programa (2) /*

More information

C++ programavimo kalba. Konstruktorius, destruktorius, klasių metodų modifikatoriai, objektų masyvai (4 paskaita)

C++ programavimo kalba. Konstruktorius, destruktorius, klasių metodų modifikatoriai, objektų masyvai (4 paskaita) C++ programavimo kalba Konstruktorius, destruktorius, klasių metodų modifikatoriai, objektų masyvai (4 paskaita) Konstruktorius Sukuriant objektą, jo duomenims paprastai turi būti priskiriamos pradinės

More information

C programavimo kalba. 5 paskaita (Funkcijos, masyvai)

C programavimo kalba. 5 paskaita (Funkcijos, masyvai) C programavimo kalba 5 paskaita (Funkcijos, masyvai) Funkcijų pavyzdys // Skaičių lyginimo programa #include void pmax(int, int); /* prototipas */ int main() {int i, j; for (i = -10; i

More information

C programavimo kalba. 3 paskaita (Sąlygos ir ciklo operatoriai, funkcija scanf() )

C programavimo kalba. 3 paskaita (Sąlygos ir ciklo operatoriai, funkcija scanf() ) C programavimo kalba 3 paskaita (Sąlygos ir ciklo operatoriai, funkcija scanf() ) Sąlygos operatorius if - else Sąlygos operatoriai skirti perduoti programos vykdymą vienai ar kitai programos šakai. Operatorius

More information

Kas yra masyvas? Skaičių masyvo A reikšmės: Elementų indeksai (numeriai): Užrašymas Turbo Paskaliu: A[1] A[2] A[3] A[4] A[5]

Kas yra masyvas? Skaičių masyvo A reikšmės: Elementų indeksai (numeriai): Užrašymas Turbo Paskaliu: A[1] A[2] A[3] A[4] A[5] Masyvas 2013 1 Vienmatis masyvas Veiksmai su masyvo elementais: reikšmių priskyrimas ir išvedimas, paieška, rikiavimas. Masyvų perdavimas procedūros (funkcijos) parametrais. 2 Kas yra masyvas? Masyvu vadinamas

More information

Parengė ITMM Artūras Šakalys 1

Parengė ITMM Artūras Šakalys 1 2014.02.02 Parengė ITMM Artūras Šakalys 1 2014.02.02 Parengė ITMM Artūras Šakalys 2 Kaip suprantame masyvą? Pavyzdys: Peteliškių šeima; Gėlių laukas; 2014.02.02 Parengė ITMM Artūras Šakalys 3 Kaip suprasti

More information

Polimorfizmas. Lekt. dr. Pijus Kasparaitis m. m. pavasario semestras.

Polimorfizmas. Lekt. dr. Pijus Kasparaitis m. m. pavasario semestras. Polimorfizmas Lekt. dr. Pijus Kasparaitis pkasparaitis@yahoo.com 2009-2010 m. m. pavasario semestras Dar apie paveldėjimą Java kalboje kiekvienas paveldėtos klasės objektas gali būti naudojamas ten, kur

More information

C++ programavimo kalba

C++ programavimo kalba C++ programavimo kalba Operatorių perkrovimas (7 paskaita) Operatorių perdengimas Programavimo kalbose naudojami operatoriai pasižymi polimorfizmu (daugiavariantiškumu). Kaip pavyzdys gali būti operatorius

More information

PHP PROGRAMOS EIGOS VYKDYMO VALDYMAS

PHP PROGRAMOS EIGOS VYKDYMO VALDYMAS PHP PROGRAMOS EIGOS VYKDYMO VALDYMAS Sąlygos sakiniai PHP skriptų vykdymo eigą galite valdyti naudodami sąlygos sakinius. Sąlygos sakiniai tai loginės struktūros, kuriose saugomas kodas, įvykdomas įgyvendinus

More information

C++ programavimo kalba

C++ programavimo kalba C++ programavimo kalba Šablonai (10 paskaita) Kodėl šablonai (templates)? Programuojant egzistuoja situacijos, kai reikia atlikti tuos pačius veiksmus su skirtingais duomenų tipais (pvz. modulio radimas,

More information

A.Kynienė. С, C++ kalbų ABC. Metodinė priemonė

A.Kynienė. С, C++ kalbų ABC. Metodinė priemonė A.Kynienė С, C++ kalbų ABC Metodinė priemonė Vilnius 2004 TURINYS C KALBOS PRIVALUMAI...4 PROGRAMAVIMO PROCESAS...5 OPERACIJOS...6 PAPRASTOS PROGRAMOS STRUKTŪRA...8 DUOMENŲ IR KINTAMŲJŲ TIPAI...9 SIMBOLINĖS

More information

Struktūrų sintaksė Struktūra tai vienodo arba skirtingo tipo kintamųjų rinkinys. Sintaksė: struct vardas { ; type1 var1; type2 var2;... typen varn; //

Struktūrų sintaksė Struktūra tai vienodo arba skirtingo tipo kintamųjų rinkinys. Sintaksė: struct vardas { ; type1 var1; type2 var2;... typen varn; // C programavimo kalba 10 paskaita (Struktūros) Struktūrų sintaksė Struktūra tai vienodo arba skirtingo tipo kintamųjų rinkinys. Sintaksė: struct vardas { ; type1 var1; type2 var2;... typen varn; // Gale

More information

Projektas. .h failai Header failai (interface) .m failai Pačios programos failai ( .xib /.storyboard Vartotojo sąsajos failai

Projektas. .h failai Header failai (interface) .m failai Pačios programos failai ( .xib /.storyboard Vartotojo sąsajos failai ios Projektas.h failai Header failai (interface).m failai Pačios programos failai (.xib /.storyboard Vartotojo sąsajos failai AppDelegate.h / AppDelegate.m aplikacijos pradiniai startavimo prpograminiai

More information

C++ programavimo kalba

C++ programavimo kalba C++ programavimo kalba Rodyklė this, C++ string klasė (9 paskaita) Rodyklėthis Visos objekto funkcijos gali naudotis rodykle this, kuri rodo į patį objektą. Tokiu būdu kiekviena funkcija gali rasti objekto,

More information

Vilniaus universitetas Fizikos fakultetas Radiofizikos katedra R. Grigalaitis Programavimas (Programavimo C++ kalba paskaitų konspektas)

Vilniaus universitetas Fizikos fakultetas Radiofizikos katedra R. Grigalaitis Programavimas (Programavimo C++ kalba paskaitų konspektas) Vilniaus universitetas Fizikos fakultetas Radiofizikos katedra R. Grigalaitis Programavimas (Programavimo C++ kalba paskaitų konspektas) Vilnius 2010 - 2 - Turinys PROGRAMAVIMO SAMPRATA... - 4 - KINTAMIEJI

More information

Paveikslėliai. Lekt. dr. Pijus Kasparaitis m. m. pavasario semestras.

Paveikslėliai. Lekt. dr. Pijus Kasparaitis m. m. pavasario semestras. Paveikslėliai Lekt. dr. Pijus Kasparaitis pkasparaitis@yahoo.com 2008-2009 m. m. pavasario semestras Klasė Image Priklauso paketui java.awt Abstrakti klasė paveldėta iš Object Tai visų grafinių paveikslėlių

More information

Come to the TypeScript

Come to the TypeScript Come to the TypeScript we have type hinting! Sergej Kurakin Sergej Kurakin Amžius: 36 Dirbu: NFQ Technologies Pareigos: Programuotojas Programuoti pradėjau mokytis 1996 metais. Programuotoju dirbu nuo

More information

Buferio perpildymo klaida Įvadas, techniniai klausimai

Buferio perpildymo klaida Įvadas, techniniai klausimai Buferio perpildymo klaida Įvadas, techniniai klausimai Rolandas Griškevičius rolandas.griskevicius@fm.vgtu.lt MSN: rgrisha@hotmail.com http://fmf.vgtu.lt/~rgriskevicius 2009-10-16 R. Griškevičius, Saugus

More information

Programavimas C kalba

Programavimas C kalba Programavimas C kalba Mokomoji priemonė Elektronikos specialybės studentams Vytautas Vyšniauskas 2008.01.28 09:26 Šiaulių Universitetas, 2007 Turinys Įvadas... 4 1 Simbolių kodavimas ir ASCII kodų lentelė...

More information

2017 m. pagrindinės sesijos informacinių technologijų valstybinio brandos egzamino programavimo užduoties galimi sprendimai

2017 m. pagrindinės sesijos informacinių technologijų valstybinio brandos egzamino programavimo užduoties galimi sprendimai Pavyzdys A 2017 m. pagrindinės sesijos informacinių technologijų valstybinio brandos egzamino programavimo užduoties galimi sprendimai int konvertuojamas(int skaic, int id); char konvertuojamas2(int dal);

More information

Apletai (įskiepiai) Lekt. dr. Pijus Kasparaitis m. m. pavasario semestras.

Apletai (įskiepiai) Lekt. dr. Pijus Kasparaitis m. m. pavasario semestras. Apletai (įskiepiai) Lekt. dr. Pijus Kasparaitis pkasparaitis@yahoo.com 2008-2009 m. m. pavasario semestras Java grafinės bibliotekos AWT (Abstract Window Toolkit) Swing 2009.04.09 P.Kasparaitis. Objektinis

More information

Collections (Java) Collections Framework

Collections (Java) Collections Framework Collections (Java) https://docs.oracle.com/javase/tutorial/collections/index.html Collection an object that groups multiple elements into a single unit. o store o retrieve o manipulate o communicate o

More information

DUOMENŲ STRUKTŪROS IR ALGORITMAI. Rūšiavimo algoritmai (įterpimo, burbulo, išrinkimo)

DUOMENŲ STRUKTŪROS IR ALGORITMAI. Rūšiavimo algoritmai (įterpimo, burbulo, išrinkimo) DUOMENŲ STRUKTŪROS IR ALGORITMAI Rūšiavimo algoritmai (įterpimo, burbulo, išrinkimo) Rūšiavimo veiksmas Kasdieniniame gyvenime mes dažnai rūšiuojame: Failus kataloguose Katalogus lokaliame diske Kasdienines

More information

Uždavinių sprendimas MATLAB aplinkoje

Uždavinių sprendimas MATLAB aplinkoje Operacijų tyrimas. Įvadas. Laboratoriniai darbai 1 Uždavinių sprimas MATLAB aplinkoje Matlab tai interaktyvi sistema, skirta atlikti inžinerinius bei mokslinius skaičiavimus. Sistemos aplinkoje galima

More information

Kodėl programą sudaro daug failų? Sukurtos tipinės funkcijų galėtų būti panaudojamos dar kartą; Sudaroma aiškesnė programos struktūra; Sudaroma galimy

Kodėl programą sudaro daug failų? Sukurtos tipinės funkcijų galėtų būti panaudojamos dar kartą; Sudaroma aiškesnė programos struktūra; Sudaroma galimy C programavimo kalba 12 paskaita (Daugiafailinės programos, laiko ir datos funkcijos) Kodėl programą sudaro daug failų? Sukurtos tipinės funkcijų galėtų būti panaudojamos dar kartą; Sudaroma aiškesnė programos

More information

Masyvai Javoje. Masyvai. Objektų talpyklos. Masyvo tipas. Deklaravimo pavyzdžiai. Deklaracija ir sukūrimas. Masyvo superklas - Object

Masyvai Javoje. Masyvai. Objektų talpyklos. Masyvo tipas. Deklaravimo pavyzdžiai. Deklaracija ir sukūrimas. Masyvo superklas - Object Masyvai Javoje Masyvai. Objektų talpyklos (Arrays, collections) Dinamiškai sukuriami java objektai iš anksto apibr žtam komponenčių skaičiui saugoti. Komponent s g.b. primityvaus tipo arba nuorodos tipo

More information

El. pašto konfigūravimas

El. pašto konfigūravimas El. pašto konfigūravimas Outlook Express (integruota Windows XP) elektroninio pašto klientas Žemiau pateikta instrukcija, kaip sukonfigūruoti savo elektroninį paštą vartotojams, turintiems elektroninio

More information

PHP Lietuviškai. Turinys

PHP Lietuviškai. Turinys PHP Lietuviškai Informacija iš interneto pakampių surinko, visa savaitgalį prie Easy PDF sėdėjo ir kankinosi Justinas L. aka scooox. Taigi, kad visi girdėtų, sakau: šitas dokumentas yra surinktas iš visų

More information

C++ programavimo kalba

C++ programavimo kalba C++ programavimo kalba Klasės, klasių savybės, vardų erdvės (3 paskaita) OOP Struktūrinio programavimo modelio problema: Didelės programos tampa labai sudėtingos t.y. egzistuoja tūkstančiai kintamųjų ir

More information

Lecture 1: Overview of Java

Lecture 1: Overview of Java Lecture 1: Overview of Java What is java? Developed by Sun Microsystems (James Gosling) A general-purpose object-oriented language Based on C/C++ Designed for easy Web/Internet applications Widespread

More information

HTML dokumentai. Praktinės užduotys

HTML dokumentai. Praktinės užduotys HTML dokumentai Praktinės užduotys 1. DzSoft PHP Editor šablonai Pakeiskite HTML šabloną į: ... Programos

More information

T u r b o P a s k a l i s 7.0

T u r b o P a s k a l i s 7.0 Vilniaus universitetas Matematikos ir informatikos fakultetas Programų sistemų katedra I N F O R M A T I K A T u r b o P a s k a l i s 7.0 Doc. V. Undzėno paskaitų konspektai (skaitoma Fizikos fakulteto

More information

Gijos. Gijų modelis Javoje. R.Vaicekauskas, OP, 2017

Gijos. Gijų modelis Javoje. R.Vaicekauskas, OP, 2017 Gijos Gijų modelis Javoje R.Vaicekauskas, OP, 2017 1 Turinys Motyvacija Sukūrimas Valdymas Sinchronizacija Susijusios klasės 2 Motyvacija Gijos reikalingos tam, kad išreikšti lygiagretumą vieno proceso

More information

CS 231 Data Structures and Algorithms, Fall 2016

CS 231 Data Structures and Algorithms, Fall 2016 CS 231 Data Structures and Algorithms, Fall 2016 Dr. Bruce A. Maxwell Department of Computer Science Colby College Course Description Focuses on the common structures used to store data and the standard

More information

Redis Ma as, greitas, galingas. Specialiai VilniusPHP

Redis Ma as, greitas, galingas. Specialiai VilniusPHP Redis Ma as, greitas, galingas Specialiai VilniusPHP 2013.06.06 Sergej Kurakin Na, Jūs mane jau nekarta matėte, tai nieko nesakysiu apie save. Kaip aš susipa inau! Tai buvo prieš keletą metų! Projektas

More information

double *pdouble1, *pdouble2, *pdouble3, double4;

double *pdouble1, *pdouble2, *pdouble3, double4; 11. RODYKLĖS Rodyklė (angl. pointer) kintamasis, saugantis kito konkretaus tipo kintamojo adresą. Rodyklės taikomos: - Netiesioginei prieičiai prie kintamojo - Prieičiai prie masyvo elementų - Argumentų

More information

1 Shyam sir JAVA Notes

1 Shyam sir JAVA Notes 1 Shyam sir JAVA Notes 1. What is the most important feature of Java? Java is a platform independent language. 2. What do you mean by platform independence? Platform independence means that we can write

More information

Java language. Part 1. Java fundamentals. Yevhen Berkunskyi, NUoS

Java language. Part 1. Java fundamentals. Yevhen Berkunskyi, NUoS Java language Part 1. Java fundamentals Yevhen Berkunskyi, NUoS eugeny.berkunsky@gmail.com http://www.berkut.mk.ua What Java is? Programming language Platform: Hardware Software OS: Windows, Linux, Solaris,

More information

Elektroninis.lt šakninių sertifikatų diegimas

Elektroninis.lt šakninių sertifikatų diegimas Elektroninis.lt šakninių sertifikatų diegimas Ši instrukcija aprašo, kaip į kompiuterį įdiegti šakninius elektroninis.lt sertifikatus. Diegimo darbus galima atlikti turint kompiuterio administratoriaus

More information

Introduction to Visual Basic and Visual C++ Introduction to Java. JDK Editions. Overview. Lesson 13. Overview

Introduction to Visual Basic and Visual C++ Introduction to Java. JDK Editions. Overview. Lesson 13. Overview Introduction to Visual Basic and Visual C++ Introduction to Java Lesson 13 Overview I154-1-A A @ Peter Lo 2010 1 I154-1-A A @ Peter Lo 2010 2 Overview JDK Editions Before you can write and run the simple

More information

Web servisai WSDL. Osvaldas Grigas

Web servisai WSDL. Osvaldas Grigas Web servisai WSDL Osvaldas Grigas Web servisų aprašymas Kiekvienas web servisas yra unikalus Jis turi adresą(arba kelis adresus), kuriuo į jį galima kreiptis. Jis supranta tik tam tikros struktūros įeinančius

More information

C++ programavimo kalba

C++ programavimo kalba C++ programavimo kalba Standartinė šablonų biblioteka (STL) Duomenų struktūros (11paskaita) Šablonai Programuojant egzistuoja situacijos, kai reikia atlikti tuos pačius veiksmus su skirtingais duomenų

More information

CS321 Languages and Compiler Design I. Winter 2012 Lecture 2

CS321 Languages and Compiler Design I. Winter 2012 Lecture 2 CS321 Languages and Compiler Design I Winter 2012 Lecture 2 1 A (RE-)INTRODUCTION TO JAVA FOR C++/C PROGRAMMERS Why Java? Developed by Sun Microsystems (now Oracle) beginning in 1995. Conceived as a better,

More information

Introduction to Java

Introduction to Java Introduction to Java Module 1: Getting started, Java Basics 22/01/2010 Prepared by Chris Panayiotou for EPL 233 1 Lab Objectives o Objective: Learn how to write, compile and execute HelloWorld.java Learn

More information

K R I S T I N A L A P I N. I dalis. Matematikos ir statistikos studijų krypčių pirmo kurso studentams

K R I S T I N A L A P I N. I dalis. Matematikos ir statistikos studijų krypčių pirmo kurso studentams V I L N I A U S U N I V E R S I T E T AS M A T E M A T I K O S I R I N F O R M A T I K O S F A K U L T E T A S P R O G R A M Ų S I S T E M Ų K A T E D R A K R I S T I N A L A P I N Programavimas C I dalis

More information

Simboliai ir simbolių eilutės 2 val. Standartinės procedūros ir funkcijos darbui su simbolių eilutėmis

Simboliai ir simbolių eilutės 2 val. Standartinės procedūros ir funkcijos darbui su simbolių eilutėmis T8 Simboliai ir simbolių eilutės 2 val. Standartinės procedūros ir funkcijos darbui su simbolių eilutėmis 1 Kintamasis, kurio tipas nurodomas žodžiu char, skirtas simboliui saugoti. var a, b : char; Su

More information

6-7-8 PASKAITOS. Bendros žinios

6-7-8 PASKAITOS. Bendros žinios 6-7-8 PASKAITOS Turinys: Paveldimumas Bendros žinios. Išvestinės klasės konstruktoriai. Paveldimumas ir metodų perkrovimas. Įvadas į abstrakčias klases. Bendrasis ir dalinis paveldimumas. Daugybinis paveldimumas.

More information

Pasirenkamojo modulio kūrybinio darbo atlikimas ir vertinimas

Pasirenkamojo modulio kūrybinio darbo atlikimas ir vertinimas Pasirenkamojo modulio kūrybinio darbo atlikimas ir vertinimas Pasirenkamojo modulio kūrybinis darbas atliekamas keliais etapais: kūrybinio darbo temos (problemos / užduoties) pasirinkimas ir derinimas

More information

2-3 PASKAITOS. Paprasčiausia programa:

2-3 PASKAITOS. Paprasčiausia programa: 2-3 PASKAITOS Turinys: Paprasčiausios programos pavyzdys. Darbas su programavimo terpėmis. Duomenys. Duomenų tipai ir charakteristikos. Paprasčiausia įvestis/išvestis. Paprasčiausia programa: /* Pirmoji

More information

Class, Variable, Constructor, Object, Method Questions

Class, Variable, Constructor, Object, Method Questions Class, Variable, Constructor, Object, Method Questions http://www.wideskills.com/java-interview-questions/java-classes-andobjects-interview-questions https://www.careerride.com/java-objects-classes-methods.aspx

More information

Outline. Java Models for variables Types and type checking, type safety Interpretation vs. compilation. Reasoning about code. CSCI 2600 Spring

Outline. Java Models for variables Types and type checking, type safety Interpretation vs. compilation. Reasoning about code. CSCI 2600 Spring Java Outline Java Models for variables Types and type checking, type safety Interpretation vs. compilation Reasoning about code CSCI 2600 Spring 2017 2 Java Java is a successor to a number of languages,

More information

ios Uždara operacinė sistema skirta tik Apple įrenginiams: iphone ipad ipod touch Apple TV

ios Uždara operacinė sistema skirta tik Apple įrenginiams: iphone ipad ipod touch Apple TV ios Uždara operacinė sistema skirta tik Apple įrenginiams: iphone ipad ipod touch Apple TV Pagrindas OS X, skirtas ARM įrenginiams Programavimo aplinka: XCode ir Objective-C Programavimo kompiuteris -

More information

C programos struktūra ir funkcijos

C programos struktūra ir funkcijos C programos struktūra ir funkcijos 1. C programą sudaro 1 arba daugiau failų (arba kompiliavimo vienetų). programa ::= { failas 1+ 2. C programos failas tai vienas paskui kitą einantys kintamųjų, funkcijų

More information

1. Java is a... language. A. moderate typed B. strogly typed C. weakly typed D. none of these. Answer: B

1. Java is a... language. A. moderate typed B. strogly typed C. weakly typed D. none of these. Answer: B 1. Java is a... language. A. moderate typed B. strogly typed C. weakly typed D. none of these 2. How many primitive data types are there in Java? A. 5 B. 6 C. 7 D. 8 3. In Java byte, short, int and long

More information

Introduction to Java. Lecture 1 COP 3252 Summer May 16, 2017

Introduction to Java. Lecture 1 COP 3252 Summer May 16, 2017 Introduction to Java Lecture 1 COP 3252 Summer 2017 May 16, 2017 The Java Language Java is a programming language that evolved from C++ Both are object-oriented They both have much of the same syntax Began

More information

Paprastų lentelių kūrimas

Paprastų lentelių kūrimas HTML lentelės Lentelės Informacijos pateikimas HTML-dokumentuose lentelių pagalba yra vienas iš dažniausiai naudojamų. HTML kalboje lentelės yra naudojamos ne tik tradiciškai, kaip duomenų pateikimo metodas,

More information

C++ programavimo kalba

C++ programavimo kalba C++ programavimo kalba Santrauka doc.dr. Dalius Mažeika Dalius.Mazeika@fm.vtu.lt VGTU SC L318 Programavimo kalbos Procedūrinės (Assembler, ankstyvos, Fortran versijos) Pagrindą sudaro procedūros. Kiekvienas

More information

DTD aprašas gali būti XML failo viduje. Šiuo atveju jis įterpiamas į žymę DOCTYPE naudojant tokią sintaksę:

DTD aprašas gali būti XML failo viduje. Šiuo atveju jis įterpiamas į žymę DOCTYPE naudojant tokią sintaksę: XML DTD paskirtis DTD (angl. Document Type Definition) paskirtis nusakyti, iš kokių blokų gali būti sudarytas XML (o taip pat ir HTML) dokumentas. Taigi DTD apibrėžia dokumento struktūrą išvardindama leistinus

More information

Introduction to Programming Using Java (98-388)

Introduction to Programming Using Java (98-388) Introduction to Programming Using Java (98-388) Understand Java fundamentals Describe the use of main in a Java application Signature of main, why it is static; how to consume an instance of your own class;

More information

B.V. Patel Institute of BMC & IT, UTU 2014

B.V. Patel Institute of BMC & IT, UTU 2014 BCA 3 rd Semester 030010301 - Java Programming Unit-1(Java Platform and Programming Elements) Q-1 Answer the following question in short. [1 Mark each] 1. Who is known as creator of JAVA? 2. Why do we

More information

C++ programavimo kalba

C++ programavimo kalba C++ programavimo kalba I/O biblioteka (2 paskaita) I/O operatoriai Išvedimo > #include using namespace std; void main() { float A = 18.236; cout

More information

Manual for Basic Java

Manual for Basic Java Java Boot Camp Boot Camp Manual for Basic Java By The contents of this document are the sole and exclusive property of AgileTestingAlliance.org. They may not be disclosed to any third party, copied or

More information

Java Overview An introduction to the Java Programming Language

Java Overview An introduction to the Java Programming Language Java Overview An introduction to the Java Programming Language Produced by: Eamonn de Leastar (edeleastar@wit.ie) Dr. Siobhan Drohan (sdrohan@wit.ie) Department of Computing and Mathematics http://www.wit.ie/

More information

Pace University. Fundamental Concepts of CS121 1

Pace University. Fundamental Concepts of CS121 1 Pace University Fundamental Concepts of CS121 1 Dr. Lixin Tao http://csis.pace.edu/~lixin Computer Science Department Pace University October 12, 2005 This document complements my tutorial Introduction

More information

1. AJAX įvadas. AJAX principai:

1. AJAX įvadas. AJAX principai: 1. AJAX įvadas AJAX principai: Naršyklė talpina programą (application), ne turinį. Serveris siunčia duomenis ne turinį. Asinchroniškumas - asinchroninio request/response siuntimo pagrindinis principas

More information

COE318 Lecture Notes Week 3 (Week of Sept 17, 2012)

COE318 Lecture Notes Week 3 (Week of Sept 17, 2012) COE318 Lecture Notes: Week 3 1 of 8 COE318 Lecture Notes Week 3 (Week of Sept 17, 2012) Announcements Quiz (5% of total mark) on Wednesday, September 26, 2012. Covers weeks 1 3. This includes both the

More information

Java Bytecode (binary file)

Java Bytecode (binary file) Java is Compiled Unlike Python, which is an interpreted langauge, Java code is compiled. In Java, a compiler reads in a Java source file (the code that we write), and it translates that code into bytecode.

More information

Amadeus On-Line Helpdesk

Amadeus On-Line Helpdesk Amadeus On-Line Helpdesk Vartotojo instrukcija Skirta kelionių agentūroms Turinys Įžanga... 3 Jungimasis prie Amadeus Helpdesk... 3 Patarimai ir pastabos... 7 Dokumento valdymas 2007 Apsauga Viešas Įmon

More information

KAUNO TECHNOLOGIJOS UNIVERSITETAS

KAUNO TECHNOLOGIJOS UNIVERSITETAS KAUNO TECHNOLOGIJOS UNIVERSITETAS INFORMATIKOS FAKULTETAS VALDIKLIŲ PROGRAMAVIMAS STANDARTO IEC 61131-3 KALBOMIS Referatas Atliko: Kęstutis Valinčius Kaunas 2011 Turinys 1 Įvadas... 3 2 Struktūriniai elementai...

More information

Objektiškai Orientuotas Programavimas su C++

Objektiškai Orientuotas Programavimas su C++ Vilniaus Universitetas Matematikos ir Informatikos fakultetas Kompiuterijos katedra Saulius Narkevičius Objektiškai Orientuotas Programavimas su C++ paskaitų konspektai pavasaris 2005 Turinys Pratarmė...

More information

Programming Language Concepts: Lecture 2

Programming Language Concepts: Lecture 2 Programming Language Concepts: Lecture 2 Madhavan Mukund Chennai Mathematical Institute madhavan@cmi.ac.in http://www.cmi.ac.in/~madhavan/courses/pl2011 PLC 2011, Lecture 2, 6 January 2011 Classes and

More information

KLIENTŲ DUOMENŲ BAZĖS IR SANTYKIO SU KLIENTAIS VALDYMO PROGRAMA

KLIENTŲ DUOMENŲ BAZĖS IR SANTYKIO SU KLIENTAIS VALDYMO PROGRAMA KTU INFORMATIKOS FAKULTETAS HENRIKAS SINICKAS KLIENTŲ DUOMENŲ BAZĖS IR SANTYKIO SU KLIENTAIS VALDYMO PROGRAMA MAGISTRO DARBAS Darbo vadovas doc. dr. Ojaras Purvinis KAUNAS 2004 TURINYS 2 1. ĮVADAS... 3

More information

Getting started with Java

Getting started with Java Getting started with Java by Vlad Costel Ungureanu for Learn Stuff Programming Languages A programming language is a formal constructed language designed to communicate instructions to a machine, particularly

More information

Paskirstytos atminties lygiagretusis programavimas Įvadas į MPI

Paskirstytos atminties lygiagretusis programavimas Įvadas į MPI Paskirstytos atminties lygiagretusis programavimas Įvadas į MPI Distributed memory parallel programming Paskirstytos atminties lygiagretieji kompiuteriai Kiekvienas procesorius turi tik savo nuosavą atmintį

More information

13 th Windsor Regional Secondary School Computer Programming Competition

13 th Windsor Regional Secondary School Computer Programming Competition SCHOOL OF COMPUTER SCIENCE 13 th Windsor Regional Secondary School Computer Programming Competition Hosted by The School of Computer Science, University of Windsor WORKSHOP I [ Overview of the Java/Eclipse

More information

Introduction to Programming (Java) 2/12

Introduction to Programming (Java) 2/12 Introduction to Programming (Java) 2/12 Michal Krátký Department of Computer Science Technical University of Ostrava Introduction to Programming (Java) 2008/2009 c 2006 2008 Michal Krátký Introduction

More information

Outline. Parts 1 to 3 introduce and sketch out the ideas of OOP. Part 5 deals with these ideas in closer detail.

Outline. Parts 1 to 3 introduce and sketch out the ideas of OOP. Part 5 deals with these ideas in closer detail. OOP in Java 1 Outline 1. Getting started, primitive data types and control structures 2. Classes and objects 3. Extending classes 4. Using some standard packages 5. OOP revisited Parts 1 to 3 introduce

More information

COT 3530: Data Structures. Giri Narasimhan. ECS 389; Phone: x3748

COT 3530: Data Structures. Giri Narasimhan. ECS 389; Phone: x3748 COT 3530: Data Structures Giri Narasimhan ECS 389; Phone: x3748 giri@cs.fiu.edu www.cs.fiu.edu/~giri/teach/3530spring04.html Evaluation Midterm & Final Exams Programming Assignments Class Participation

More information

Certified Core Java Developer VS-1036

Certified Core Java Developer VS-1036 VS-1036 1. LANGUAGE FUNDAMENTALS The Java language's programming paradigm is implementation and improvement of Object Oriented Programming (OOP) concepts. The Java language has its own rules, syntax, structure

More information

Interpreted vs Compiled. Java Compile. Classes, Objects, and Methods. Hello World 10/6/2016. Python Interpreted. Java Compiled

Interpreted vs Compiled. Java Compile. Classes, Objects, and Methods. Hello World 10/6/2016. Python Interpreted. Java Compiled Interpreted vs Compiled Python 1 Java Interpreted Easy to run and test Quicker prototyping Program runs slower Compiled Execution time faster Virtual Machine compiled code portable Java Compile > javac

More information

Character Stream : It provides a convenient means for handling input and output of characters.

Character Stream : It provides a convenient means for handling input and output of characters. Be Perfect, Do Perfect, Live Perfect 1 1. What is the meaning of public static void main(string args[])? public keyword is an access modifier which represents visibility, it means it is visible to all.

More information

Web technologijos. Hostingas JavaScript PHP

Web technologijos. Hostingas JavaScript PHP jquery & PHP Web technologijos Hostingas JavaScript PHP Kelios hostingo kompanijos serveriai.lt hostex.lt hostinger.lt Nemokamas hostingas su PHP/mysql http://mindaugas.zz.mu/jm1.html Hostingo paslaugų

More information

COP 3330 Final Exam Review

COP 3330 Final Exam Review COP 3330 Final Exam Review I. The Basics (Chapters 2, 5, 6) a. comments b. identifiers, reserved words c. white space d. compilers vs. interpreters e. syntax, semantics f. errors i. syntax ii. run-time

More information

Programming. Syntax and Semantics

Programming. Syntax and Semantics Programming For the next ten weeks you will learn basic programming principles There is much more to programming than knowing a programming language When programming you need to use a tool, in this case

More information

CS 11 java track: lecture 1

CS 11 java track: lecture 1 CS 11 java track: lecture 1 Administrivia need a CS cluster account http://www.cs.caltech.edu/ cgi-bin/sysadmin/account_request.cgi need to know UNIX www.its.caltech.edu/its/facilities/labsclusters/ unix/unixtutorial.shtml

More information

Assumptions. History

Assumptions. History Assumptions A Brief Introduction to Java for C++ Programmers: Part 1 ENGI 5895: Software Design Faculty of Engineering & Applied Science Memorial University of Newfoundland You already know C++ You understand

More information

Interneto technologijų taikymai

Interneto technologijų taikymai Interneto technologijų taikymai Mantas Puida (mantasp@gmail.com) VI paskaita Entity pirminis raktas Kiekviena Entity klasė privalo turėti pirminį raktą (Primary Key). Jei turima Entity objektų hierarchija,

More information

Selected Questions from by Nageshwara Rao

Selected Questions from  by Nageshwara Rao Selected Questions from http://way2java.com by Nageshwara Rao Swaminathan J Amrita University swaminathanj@am.amrita.edu November 24, 2016 Swaminathan J (Amrita University) way2java.com (Nageshwara Rao)

More information

Java is a high-level programming language originally developed by Sun Microsystems and released in Java runs on a variety of

Java is a high-level programming language originally developed by Sun Microsystems and released in Java runs on a variety of Java is a high-level programming language originally developed by Sun Microsystems and released in 1995. Java runs on a variety of platforms, such as Windows, Mac OS, and the various versions of UNIX.

More information

Zheng-Liang Lu Java Programming 45 / 79

Zheng-Liang Lu Java Programming 45 / 79 1 class Lecture2 { 2 3 "Elementray Programming" 4 5 } 6 7 / References 8 [1] Ch. 2 in YDL 9 [2] Ch. 2 and 3 in Sharan 10 [3] Ch. 2 in HS 11 / Zheng-Liang Lu Java Programming 45 / 79 Example Given a radius

More information

Trumpai-ilga istorija

Trumpai-ilga istorija Įvadas į Web Services Kas yra Web Service? Kas ką žino??? 70-ieji: Mainframe Trumpai-ilga istorija 80-ieji: Client-Server Istorijos 90-ieji: Web 2000: SOA 2010: Cloud Computing Šaltinis: Sergejus Barinovas,

More information

Pažintis su C++ Builder

Pažintis su C++ Builder Pažintis su C++ Builder Turinys C++ Builder aplinka... 2 Komponentai, jų savybės ir metodai, įvykiai... 2 Programos objektų savybių keitimas... 4 Vartotojo programos kūrimas, saugojimas ir vykdymas...

More information

Index COPYRIGHTED MATERIAL

Index COPYRIGHTED MATERIAL Index COPYRIGHTED MATERIAL Note to the Reader: Throughout this index boldfaced page numbers indicate primary discussions of a topic. Italicized page numbers indicate illustrations. A abstract classes

More information

Data Types. Lecture2: Java Basics. Wrapper Class. Primitive data types. Bohyung Han CSE, POSTECH

Data Types. Lecture2: Java Basics. Wrapper Class. Primitive data types. Bohyung Han CSE, POSTECH Data Types Primitive data types (2015F) Lecture2: Java Basics Bohyung Han CSE, POSTECH bhhan@postech.ac.kr Type Bits Minimum Value Maximum Value byte 8 128 127 short 16 32768 32767 int 32 2,147,483,648

More information

3. Convert 2E from hexadecimal to decimal. 4. Convert from binary to hexadecimal

3. Convert 2E from hexadecimal to decimal. 4. Convert from binary to hexadecimal APCS A Midterm Review You will have a copy of the one page Java Quick Reference sheet. This is the same reference that will be available to you when you take the AP Computer Science exam. 1. n bits can

More information

University of Palestine. Mid Exam Total Grade: 100

University of Palestine. Mid Exam Total Grade: 100 First Question No. of Branches (5) A) Choose the correct answer: 1. If we type: system.out.println( a ); in the main() method, what will be the result? int a=12; //in the global space... void f() { int

More information

Arrays. Arrays. Wolfgang Schreiner Research Institute for Symbolic Computation (RISC) Johannes Kepler University, Linz, Austria

Arrays. Arrays. Wolfgang Schreiner Research Institute for Symbolic Computation (RISC) Johannes Kepler University, Linz, Austria Arrays Wolfgang Schreiner Research Institute for Symbolic Computation (RISC) Johannes Kepler University, Linz, Austria Wolfgang.Schreiner@risc.jku.at http://www.risc.jku.at Wolfgang Schreiner RISC Arrays

More information

Crash Course in Java. Why Java? Java notes for C++ programmers. Network Programming in Java is very different than in C/C++

Crash Course in Java. Why Java? Java notes for C++ programmers. Network Programming in Java is very different than in C/C++ Crash Course in Java Netprog: Java Intro 1 Why Java? Network Programming in Java is very different than in C/C++ much more language support error handling no pointers! (garbage collection) Threads are

More information

COMP 250: Java Programming I. Carlos G. Oliver, Jérôme Waldispühl January 17-18, 2018 Slides adapted from M. Blanchette

COMP 250: Java Programming I. Carlos G. Oliver, Jérôme Waldispühl January 17-18, 2018 Slides adapted from M. Blanchette COMP 250: Java Programming I Carlos G. Oliver, Jérôme Waldispühl January 17-18, 2018 Slides adapted from M. Blanchette Variables and types [Downey Ch 2] Variable: temporary storage location in memory.

More information

Weiss Chapter 1 terminology (parenthesized numbers are page numbers)

Weiss Chapter 1 terminology (parenthesized numbers are page numbers) Weiss Chapter 1 terminology (parenthesized numbers are page numbers) assignment operators In Java, used to alter the value of a variable. These operators include =, +=, -=, *=, and /=. (9) autoincrement

More information