2. Java
1. Projekt Oak - 1991 rok,
a. autor: James Gosling, Sun Microsystems
b. nazwa zmieniona na „Green”, następnie na „Java”
c. public release - rok 1995, wersja 1.0
2. „Write Once Run Anywhere”
a. Java Virtual Machine - Oracle HotSpot, OpenJDK i wiele, wiele innych...
i. JRE czy JDK?
3. Paradygmaty:
a. obiektowy, proceduralny, strukturalny, imperatywny, generyczny,
wielowątkowy, funkcyjny
Duke, oficjalna maskotka Javy
3. CPL BCPL B C C++CPL
Wpływowe języki
1963 1966 1972 1983
1969
1995
4. Dlaczego Java?
1. Łatwiejsze zarządzanie kodem aplikacji
a. co gdy aplikacja ma więcej, niż 10 tys linii kodu?
i. kod spaghetti (goto), trudny do zrozumienia / przeanalizowania
2. Rozwój bogatych aplikacji internetowych
a. JSP, JSF, Servlet, EJB, JMS, JDBC, JPA, JNDI, JAXP, JAX-WS...
3. Separacja od architektury procesora
a. mikrokontrolery, procesory - dla każdej architektury kompilator, seriously…?
4. Zautomatyzowane zarządzanie pamięcią
a. Garbage Collector - odśmiecacz pamięci
5. C++
● „Write Once Run Anywhere”
● Wywołania C dostępne poprzez JNI
● Program kompilowany do kodu
bajtowego i wykonywany w JVM
● Dla wszystkich typów:
„pass by value”
● Pojedyncze dziedziczenie
● Automatyczne zarządzanie pamięcią
Java
● „Write Once Compile Anywhere”
● Kompatybilny z C*
● Program kompilowany do kodu
maszynowego, wykonywany bezpośrednio
● Przekazywanie parametrów przez:
wskaźniki, referencje i „pass by value”
● Pojedyncze i wielodziedziczenie
● Rdzennie manualne zarządzanie pamięcią
vs
*w większości przypadków
6. Rozwój i wersje Javy
● JDK 1.0 (Styczeń 23, 1996)
● JDK 1.1 (Luty 19, 1997) - klasy wewnętrzne, reflection API, i18n, Unicode, rozszerzenie dla AWT
● J2SE 1.2 (Grudzień 8, 1998) - kompilator JIT, framework „Collections”, Swing API
● J2SE 1.3 (Maj 8, 2000)
● J2SE 1.4 (Luty 6, 2002) - słowo kluczowe „assert”, Non-blocking IO, Java Web Start, Image I/O API
● J2SE 5.0 (Wrzesień 30, 2004) - typy generyczne, enhanced loop (foreach), „varargs”, statyczne importy,
automatyczne opakowywanie/odpakowywanie typów prymitywnych
● Java SE 6 (Grudzień 11, 2006)
● Java SE 7 (Lipiec 28, 2011) - łańcuchy znaków (String) w bloku „switch”, try-with-resources, multi-catch w
przechwytywaniu wyjątków, NIO2, „diamentowy operator”
● Java SE 8 (Marzec 18, 2014) - programowanie funkcyjne, stream API, nowe API czasu, domyślne i statyczne
metody w interfejsach...
● Java SE 9 (Lipiec 27, 2017) - modularność JDK, jshell, jlink, G1 jako domyślny GC… i wiele więcej...
8. Punkt startowy
// plik Start.java
public class Start {
public static void main(String[ ] args) {
System.out.println(“Witaj świecie”);
}
}
9. Kompilacja kodu
Opcjonalnie punkt 1 i 2:
1. Ustawiona zmienna środowiskowa JAVA_HOME
2. Dodana JAVA_HOME/bin do zmiennej środowiskowej PATH
3. javac Start.java -> Start.class -> java Start
kod bajtowy
(produkt kompilacji)
wczytanie do JVM i
uruchomienie programu
kompilacja
10. Zadanie
1. Sprawdź wersję Javy zainstalowanej na swoim systemie
a. prócz wersji, jaka jest wersja JVM, Oracle HotSpot / OpenJDK?
b. czy zainstalowana JVM jest 32-bitowa czy 64?
2. Sprawdź gdzie wskazuje zmienna środowiskowa JAVA_HOME
a. czy jest w ogóle ustawiona?
3. Napisz, skompiluj i uruchom swój pierwszy program wyświetlający łańcuch znaków:
„Java to język bazujący na obiektach”.