23
Java vs Algoritmy v Jave

Java vs Algoritmy v Jave

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

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

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”);