Upload
jason-velasquez
View
65
Download
1
Embed Size (px)
DESCRIPTION
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 - PowerPoint PPT Presentation
Citation preview
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 then Everest”…
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
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, ...
Java joke
"Write once, run anywhere"
is actually a euphemism for
"Write once, debug everywhere
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, UnicodeJava 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-referenceneexistujú 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áreSú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čnoInteger.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ýchint 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->doublezužujúce konv. double->float->long->int->short->byte
short s = 300; byte b = (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átoryj *= 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
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
cyklywhile (booleovský výraz) príkaz;
do { príkazy;} while (booleovský výraz);
for (výraz štart; výraz stop; výraz iter) 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čeniepublic 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”);