230 likes | 333 Views
Java vs Algoritmy v Jave. Java je. čistý Smalltalk štýl OOP, vylepšenie C ++ , internet programming language , o bjektovo-orientovan á paradigma, silná typová disciplína, vznikla v Sun Microsystems , James Gosling , 1990 ovplyvnená: Objective-C , C++ , Smalltalk , Eiffel
E N D
Java je ... • čistý Smalltalk štýl OOP, • vylepšenie C++, • internet programming language, • objektovo-orientovaná paradigma, • silná typová disciplína, • vznikla v Sun Microsystems, James Gosling, 1990 • ovplyvnená: Objective-C, C++, Smalltalk, Eiffel • ovplyvnila:C#,J#, VJ# Java nie je: • operačný systém, ale pokúša sa ... • javascript ... • easy... ”Saying Java is simpler than C++ is like saying K2 is shorter thenEverest”…
Základné pojmy • dva druhy programov: applikácie a applety • Java Core API – runtime (JRE), • Java Platform – prenositeľnosť, • Java Virtual Machine (JVM), • Java Development Kit (JDK), • JIT kompilátor, • Java ME (Micro Edition) • Java SE (Standard Edition) • Java EE (Enterprise Edition) • Java Environment • Eclipse, • JBuilder, • NetBeans, • Kawa, • MS-Java
Java joke "Write once, run anywhere" is actually a euphemism for "Write once, debug everywhere História • firma SUN, James Gosling,1991, jazyk Oak • 1993, Java for WWW • 1995, oficiálne predstavenie JAVA 1.0, • paradigma Write Once, Run Anywhere (WORA), • vývojové nástroje (JDK):http://www.javasoft.com/ • JDK 1.0 (1996) - nepoužíva sa, • JDK 1.1 (1997) - JDBC, JavaBeans, RMI, vnorené triedy… • J2SE 1.2 (1998) - Java 2 SDK (nové knižnice, Swing, Collections, …), reflection model, JIT kompilátor, • J2SE 1.3 (2000) - zmeny v API, rýchlejšia, CORBA, JNDI, … • J2SE 1.4 (2002) - stabilná, výnimky, XML parser, ... • J2SE 5.0 (2004)- jazykové úpravy, generics, enumerate, ... • Java SE 6 (2006) – beta • Java SE 7 (coming soon) – nové API, knižnice, ...
OOP 5 pravidiel OOP (Alan Kay): • všetko je objekt, • program je hŕba objektov oznamujúcich si, čo robiť, posielaním si správ, • každý objekt má svoj kus pamäte • každý objekt má typ • objekty rovnakého typu môžu prijímať rovnaké správy
Java vs. C++ Typy: • C++: bool, char, short int, int, long int, float, double, long doube, unsigned… • Java: boolean, char, byte, short, int, long, float, double. bite-size je definovaná jazykom, nie implementáciou char je 16bit, Unicode Java nemá union typ Java nemá neinicializované lokálne premenné Pointre: Java nemá pointre, pointrovú artimetiku Java má implicitný garbage collector Template (generics), enumerate: Java od verzie 1.5
Java vs. C++ Polia: C++ : pointre a polia splývajú, chýba range checking Predávanie argumentov: Java: argument-by-value, neexistuje by-reference neexistujú voliteľné parametre Operátory: Java: Overloading operátorov je zakázaný Riadenie výpočtu: Java: neexistuje goto Správa výnimiek Rýchlosť vs.prenositeľnosť.....
Prvý Súbor Prvy.java: public class Prvy { public static void main(String[] args) { System.out.println("Ahoj"); } } C:\borovan\java>javac Prvy.java C:\borovan\java>java Prvy Ahoj C:\borovan\java>
Komentáre Súbor Komentare.java: public class Komentare { static double obsahKruhu(double r) { /* metoda obsah kruhu*/ return r * Math.PI; } public static void main(String[] args) { int uhrada; int pocetPiv = 5; uhrada = pocetPiv * 15; // typický komentar System.out.println("uhrada = " + uhrada); uhrada = pocetPiv * /* 15 */ 20; /* 15 je za desinku */ System.out.println("uhrada = " + uhrada); System.out.println("Obsah kruhu o polomere 5 = " + obsahKruhu(5.0)); } } uhrada = 75 uhrada = 100 Obsah kruhu o polomere 5 = 15.707963267948966
Základné celočíselné typy • byte, short, int, long 8,16,32,64 bitov • neexistuje unsigned int public class IntNaByte { public static void main(String[] args) { int i; byte b; b = -1; // -1 = 255 unsigned i = (b < 0) ? b + 256 : b; System.out.println("i = " + i); i = 128; b = (byte) ((i > 127) ? i - 256 : i); System.out.println("b = " + b); i = 100; b = (byte) ((i > 127) ? i - 256 : i); System.out.println("b = " + b); } } i = 255 b = -128 b = 100
Konštanty • Desiatkové 32,12,.... • Osmičkové 0126, 015, 01 • Šestnástkové 0x56,0x1,0xCD,... • Long int 123456789123L • Znakové ‘A’,’%’,’\u00E1’,’\n’,’\f’ • Reťazcové “toto je retazec v Jave” • Logické typu boolean: true, false • Reálne float, double: 15.8, 7E23, 3.14F,...
Nekonečno Integer.MIN_VALUE, Float.MAX_VALUE public class Nekonecno { public static void main(String[] args) { double nula = 0.0; double vysledok = +5.0 / nula; System.out.println(vysledok); // Infinity if (Double.POSITIVE_INFINITY == vysledok) System.out.println("kladne nekonecno"); // kladne nekonecno vysledok = -5.0 / nula; System.out.println(vysledok); // -Infinity if (Double.isInfinite(vysledok) == true) System.out.println("nekonecno"); // nekonecno System.out.println("MAX = " + Float.MAX_VALUE + ", 2 * MAX = " + (2 * Float.MAX_VALUE)); // MAX = 3.4028235E38, 2 * MAX = Infinity vysledok = nula / nula; // NaN System.out.println(vysledok); if (Double.isNaN(vysledok) == true) System.out.println("nie je cislo"); // neni cislo } }
Deklarácia premenných int i; char c; float f; int i, j, k; int j = 1; final int MAX = 10; final int MAX; MAX = 10; public class TriedaSKonstantou { public static final int MAX = 10; public static void main(String[] args) { System.out.println("MAX = " + MAX); System.out.println("MAX = " + TriedaSKonstantou.MAX); } }
Priradenie, pretypovanie,konverzie j = 3.14; // nie := int j, i = 5; if (i == (j = 5)) // nie if (i = (j = 5)) System.out.println(i); int i = 5; double d = (int) i; // rozšírenie podtypu do nadtypu char c = ‘A’; int i = (int) c; char d = (char)i;// zúženie do podtypu rozširujúce konv. Byte->short->int->long->float->double zužujúce konv. double->float->long->int->short->byte short s = 300; byteb = (byte) s; System.out.println("s = " + s + ", b = " + b); // s = 300, b = 44 b = (byte) 255; System.out.println("b = " + b); // b = -1
Výrazy, pretečenie int i = 5, j = 1, k; i++; // i bude 6 System.out.println("i = " + i); j = ++i; // j bude 7, i bude 7 System.out.println("j = " + j + ", i = " + i); j = i++; // j bude 7, i bude 8 System.out.println("j = " + j + ", i = " + i); k = --j + 2; // k bude 8, j bude 6, i bude 8 System.out.println("k = " + k + ", j = " + j); i = j % 4; // delenie modulo byte b = 126; System.out.println("b = " + b); // b = 126 b += 3; System.out.println("b = " + b); // b = -127 b = -126; b += -5; System.out.println("b = " + b); // b = 125
Operátory j*= i-2; ==, !=, &&, ||, ! logické &, |,~, ^, <, >,<<,>>,>>> bitové Skrátený súčet, súčin (rozdieľ oproti C++) int i, j, k; i = 1; j = 2; k = 3; if (i == 1 || ++j == 2) k = 4; System.out.println("i = "+ i +", j = "+ j +", k = "+ k); // i = 1, j = 2, k = 4 …ak miesto || bude | // i = 1, j = 3, k = 4 int i, j, k; i = 1; j = 2; k = 3; if (i == 2 && ++j == 3) k = 4; System.out.println("i = " + i + ", j = " + j + ", k = " + k); // i = 1, j = 2, k = 3 …ak miesto && bude & // i = 1, j = 3, k = 3
Bitové operácie &, |, ^, <<, >>, >>>, ~ byte i = 7 & 9; byte i = 7 | 9; int i = 4; if (i % 2 == 0) // klasicky System.out.println(i + " je parne"); if ((i & 1) == 0) // bitovo System.out.println(i + " je parne"); final byte VIDITELNY = 1; final byte PREMIESTITELNY = 2; final byte MENITELNY = 4; final byte SMAZATELNY = 8; byte stav = 0; stav |= VIDITELNY; if ((stav & VIDITELNY) == VIDITELNY) System.out.println("je viditelny"); stav &= ~VIDITELNY; if ((stav & VIDITELNY) == VIDITELNY) System.out.println(“je viditelny"); } byte x = 5; x <<= 3; int x = 256; x >>= 4; // int x = 16; x >>= 2; // 4 int x = -16; x >>= 2; // 1073741820 byte i = 7 ^ 5; // 2
Priority (používaj zátvorky) . [index] (typ) ! ++ -- * / % + - << >> >>> < <= >= > == != & ^ | && ?: = += …
if-then-else if (booleovský výraz) C++: if(c = getchar() != ‘A’) … ok príkaz; Java: if(c = getchar() != ‘A’) … error else Java: if((c = getchar()) != ‘A’) … ok príkaz; (booleovský výraz)?výraz1:výraz2 max = (i > j) ? i : j; break continue
cykly while (booleovský výraz) príkaz; do { príkazy; } while (booleovský výraz); for (výrazštart;výrazstop;výraziter)chyba: for(int i=1,sum=0; i<=10;i++)… príkaz; navesti: for (int n = 0; n < 4; n++) { for (int m = 0; m < 2; m++) { if (n == 2 && m == 1) continue navesti; System.out.print(n + "-" + m + " "); } }
switch, return switch (citajZnak()) { case 'a' : case 'b' : case 'c' : System.out.print("1"); break; case 'd' : System.out.print("2"); break; default : System.out.print("3"); break; } return výraz;
java.io import java.io;// include <stdio.h> Výstup: System.out.print() i = 4; j = 7; System.out.print("Toto je hodnota premennej i: " + i + "\n"); System.out.println("Toto je premenna i: "+i+"\na toto j: "+j); System.out.println("Sucet je " + i + j); System.out.println("Sucet je " + (i + j));
cvičenie public class puzzle { static void usage() { System.out.println("Usage: \n\t" +"help yourself"); System.exit(1); } public static void main(String[] args) { if(args.length != 1) usage(); if(args[0].equals("paj")) { int n = 0; int m = 0; while(m < 314588) { double a = Math.random(); double b = Math.random(); if (a*a < 1-b*b) n++; m++; } System.out.println("What ??? !" + (4F*n/m)); } else usage(); } } static void printBinaryInt(String s, int i) { System.out.println(s + ", int: " + i + ", binary: "); System.out.print(" "); for(int j = 31; j >= 0; j--) if(((1 << j) & i) != 0) System.out.print("1"); else System.out.print("0"); System.out.println(); } System.out.println((((1 << j) & i) != 0)?”1”:”0”); System.out.println(((1 << j) & i)?”1”:”0”);