A Java nyelv jdonsgai AK AKADMIA MARKOS ANDRS
- Slides: 63
A Java nyelv újdonságai A&K AKADÉMIA MARKOS ANDRÁS HTTPS: //AK-AKADEMIA. HU
Bevezető 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 2
Mi a Java? A Java egy ◦ ◦ ◦ platformfüggetlen általános célú objektumorientált osztályalapú konkurens programozási nyelv. 1995 -től a Sun Microsystems fejlesztette 2009 -ben az Oracle felvásárolta (7, 4 milliárd $) 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 3
Java verziók Verzió JDK Alpha / Beta JDK 1. 0 JDK 1. 1. 7 JDK 1. 1. 8 J 2 SE 1. 2. 1 J 2 SE 1. 2. 2 J 2 SE 1. 3. 1 J 2 SE 1. 4. 0 J 2 SE 1. 4. 1 J 2 SE 1. 4. 2 J 2 SE 5. 0 (1. 5. 0) Java SE 6 Java SE 7 Java SE 8 Java SE 9 Java SE 10 Java SE 11 2020. 11. 02. 19: 23 Kódnév Kiadási dátum 1995. 03. 23. Oak 1996. 01. 23. 1997. 02. 19. Brutus 1998. 09. 28. Chelsea 1999. 04. 08. Playground 1998. 12. 04. 1999. 03. 30. Cricket 1999. 07. 08. Kestrel 2000. 05. 08. Ladybird 2001. 05. 17. Merlin 2002. 13. Hopper 2002. 09. 16. Mantis 2003. 06. 26. Tiger 2004. 09. 29. Mustang 2006. 12. 11. Dolphin 2011. 07. Spider 2014. 03. 18. 2017. 09. 21. 2018. 03. 2018. 09. © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 4
Java népszerűsége 2018 áprilisi TIOBE index alapján Helyezés Programozási nyelv 1 Java 2 C 3 C++ 4 Python 5 C# 6 Visual Basic. NET 7 PHP 8 Java. Script 9 SQL 10 Ruby 11 Delphi / Object Pascal 12 R 13 Visual Basic 14 Assembly language 15 Swift 16 Perl 17 MATLAB 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA Arány 15, 777% 13, 589% 7, 218% 5, 803% 5, 265% 4, 947% 4, 218% 3, 492% 2, 650% 2, 018% 1, 961% 1, 806% 1, 798% 1, 655% 1, 534% 1, 527% 1, 457% 5
Java működése Java forráskód (. java) javac fordító bájtkód (. class) 2020. 11. 02. 19: 23 JVM JVM Windows Linux Macintosh © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 6
Rövidítések Rövidítés Angol kifejtés Magyar kifejtés JLS Java Language Specification Java nyelvi specifikáció JVM Java Virtual Machine Java virtuális gép JRE Java Runtime Environment Java futtató környezet JDK Java Development Kit Java fejlesztői csomag Java ME (J 2 ME) Java Micro Edition - Java SE (J 2 SE) Java Standard Edition - Java EE (J 2 EE) Java Enterprise Edition - GC Garbage Collector szemétgyűjtő 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 7
Új nyelvi elemek áttekintése Verzió Új nyelvi elemek Java 10 • • párhuzamos teljes garbage collection a G 1 GC-hez var copy. Of Graal VM alternatív memóriaeszközök támogatása Docker észlelés gyorsabb JShell indulási idő 2018. 03. 20. Java 9 • • modul rendszer Collection factory metódusok JShell: Java REPL privát interfész metódusok 2017. 09. 21. Java 8 • • lambda kifejezések és funkcionális interfészek Stream API default és statikus metódusok interfészekben Date and Time API Collection API újítások core API újítások Optional 2014. 03. 18. 2020. 11. 02. 19: 23 Kiadási dátum © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 8
Új nyelvi elemek áttekintése Verzió Új nyelvi elemek Java 7 • • try-with-resources switch Stringekre NIO. 2 aláhúzásjel szám literálokban 2011. 07. Java 6 • Collections Framework újítások • Console 2006. 12. 11. Java 5 • generics • enum • Executor Framework 2004. 09. 29. Java 11 • • • 2020. 11. 02. 19: 23 Kiadási dátum HTTP kliens Epsilon garbage collector var kiterjesztése lambda kifejezések paramétereire raw String literálok switch expressions © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 2018. 09. 9
Java 10
Java 10 – Párhuzamos teljes garbage collection a G 1 GC-hez G 1 GC = Garbage First Garbage Collector Java 7 -ben vezették be kísérleti jelleggel. Hatékonyan, konkurensen nagy heap-eket is képes kitisztítani. Beállítható, hogy bizonyos várakozási időknél rövidebb legyen a stop-the-world helyzetekben a futási ideje. Java 9 óta ez az alapértelmezett GC. A G 1 GC-t többprocesszoros, sok memóriával rendelkező eszközökre tervezték. A G 1 GC: ◦ ◦ ◦ generációs inkrementális párhuzamos (többnyire) stop-the-world evakuáló 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 11
Java 10 – Párhuzamos teljes garbage collection a G 1 GC-hez Valós világbeli Java alkalmazások megfigyelésével rájöttek, hogy ◦ az újonnan létrehozott objektumok 90%-a az első GC-t sem élik túl ◦ ha „néhány” GC-t túléltek, akkor 98% eséllyel továbbra is életben maradnak 1. Az újonnan létrehozott objektumok az Eden-be kerülnek. 2. Minor GC alkalmával átmásolódnak az egyik Survivor területre. 3. Ha több GC ciklust is túléltek, akkor az old generation-be kerülnek (Tenured). Heap Old generation Young generation Eden Survivor 1 Survivor 2 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 12
Java 10 – Párhuzamos teljes garbage collection a G 1 GC-hez A young generation esetén ◦ futási idejében hatékony GC algoritmussal tisztogat, ami ◦ gyors ◦ fele memóriát elpazarolja (Survivor 1 <-> Survivor 2 másolgatás) Az old generation esetén ◦ memória hatékony GC algoritmussal tisztogat, ami ◦ lassú ◦ memória hatékony Heap Old generation Young generation Eden Survivor 1 Survivor 2 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 13
new Array. List<>(); new Date(); new Hash. Map<>(); Heap Young generation Survivor 1 Old generation Eden Survivor 2 GC time! 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 14
new Array. List<>(); new Date(); new Hash. Map<>(); Heap Young generation Eden Survivor 1 1 Old generation 1 1 Survivor 2 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 15
new Array. List<>(); new Date(); new Hash. Map<>(); Heap Young generation Survivor 1 1 Eden 1 1 Old generation 1 1 Survivor 2 GC time! 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 16
new Array. List<>(); new Date(); new Hash. Map<>(); Heap Young generation Survivor 1 Old generation Eden Survivor 2 2020. 11. 02. 19: 23 2 2 2 1 1 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 17
new Array. List<>(); new Date(); new Hash. Map<>(); Heap Young generation Survivor 1 Old generation Eden Survivor 2 GC time! 2020. 11. 02. 19: 23 2 2 2 1 1 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 18
new Array. List<>(); new Date(); new Hash. Map<>(); Heap Young generation Eden Survivor 1 1 1 3 2 Old generation 1 Survivor 2 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 19
new Array. List<>(); new Date(); new Hash. Map<>(); Heap Young generation Eden Survivor 1 1 1 3 2 Old generation 1 Survivor 2 GC time! 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 20
new Array. List<>(); new Date(); new Hash. Map<>(); Heap Young generation Survivor 1 Old generation 4 Eden Survivor 2 1 1 1 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 21
Java 10 – Párhuzamos teljes garbage collection a G 1 GC-hez A G 1 particionálja a heap-et azonos méretű régiókra (alapértelmezés szerint 2 MB egy régió). A régiók képzik a memóriafoglalás és felszabadítás egységét. A régiók mindegyike a következő állapotok egyikében lehet: ◦ üres (szürke) ◦ young generation ◦ eden (piros) ◦ survivor (piros S betűvel) ◦ old generation (világoskék) ◦ humongous (világoskék H betűvel) 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 22
Java 10 – Párhuzamos teljes garbage collection a G 1 GC-hez Régiók egy bizonyos kis részét tisztogatja egyszerre, egy adott időzítés szerint. Eden régió esetén ha csak szeméttel volt tele, akkor üresnek jelöli meg ezt a területet, és nincs szükség további műveletekre => ez sokszor fordul elő, ezért gyors és innen kapta a nevét. Általános esetben egy régió tisztogatása után a túlélő objektumokat egy üres régióba másolja. Ha Eden régiót tisztogatott és vannak túlélő objektumok, akkor az üres régió, ahova másolja, survivor régiónak lesz minősítve. 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 23
Java 10 – Párhuzamos teljes garbage collection a G 1 GC-hez Előnyei: ◦ A G 1 GC a munkája nagy részét konkurensen (az alkalmazás futása mellett) tudja elvégezni, ezért gyors. ◦ Nem egy nagy folytonos memóriaterületet használ, ezért nagyon nagy heap-eket is képes kezelni. ◦ A young és old generációkat egyszerre tudja begyűjteni. Hátránya: ◦ Kis heap esetén nem elég hatékony. ◦ Még mindig stop-the-world a teljes garbage collection esetén, párhuzamos (parallel) de nem konkurens (concurrent). Párhuzamos GC Konkurens GC Program szálai Szemétgyűjtő szálak futnak, normál futás során a program normál futása megállítva (stop-the-world) 2020. 11. 02. 19: 23 Program szálai normál futás során; konkurensen futó szemétgyűjtő szálak © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 24
Java 10 – var Csak helyi változóknál használható. Java típusossága nem sérül. Futásidőben nincs új nyelvi elem, a var kifejezések egyértelműen átfordulnak egy típusra. Ehelyett public static void main(String[] args) { List<Integer> my. List = new Array. List<>(); my. List. add(0451); my. List. add(42); } Írható ez: public static void main(String[] args) { var my. List = new Array. List<Integer>(); my. List. add(0451); my. List. add(42); } 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 25
Java 10 – var Ebből: public static void main(String[] args) { var my. List = new Array. List<Integer>(); my. List. add(0451); my. List. add(42); } Igazából ez lesz: public static void main(String[] args) { Array. List<Integer> my. List = new Array. List<Integer>(); my. List. add(0451); my. List. add(42); } 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 26
Java 10 – copy. Of import java. util. *; public class Copy. Of. Example { public static void main(String[] args) { List<Integer> my. List = new Array. List<>(); my. List. add(42); my. List. add(0451); List<Integer> copy. Of. My. List = List. copy. Of(my. List); Set<Integer> my. Set = new Hash. Set<>(); my. Set. add(4); my. Set. add(8); my. Set. add(15); my. Set. add(16); my. Set. add(23); my. Set. add(42); Set<Integer> copy. Of. My. Set = Set. copy. Of(my. Set); Map<String, String> my. Map = new Hash. Map<>(); my. Map. put("version", "10. 0"); my. Map. put("build_no", "135"); Map<String, String> copy. Of. My. Map = Map. copy. Of(my. Map); } } 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 27
Java 9/10 - Graal. VM A Graal. VM a JVM egy kiterjesztése, ami több programozási nyelvet és több végrehajtási módot támogat. Új, nagy sebességű Java fordítót tartalmaz, ami szintén a Graal nevet kapta. just-in-time konfigurációban használható a Hot. Spot VM-en. ahead-of-time konfigurációban használható a Substrate. VM-en. 3 célja van a Graal projektnek: ◦ JVM alapú nyelvek teljesítményének növelése, hogy a natív nyelvekével egyenértékű legyen. ◦ Project Metropolis (Java-on-Java) a Hot. Spot kiterjedt C++ használatát helyettesítse. ◦ Más programozási nyelveket tetszőlegesen lehessen használni egyetlen programban => polyglot alkalmazások. 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 28
Java 10 – alternatív memóriaeszköz támogatás A Hot. Spot számára lehetővé tették, hogy az object heap-et egy alternatív memóriaeszközön (pl. : NV-DIMM) foglalja le. Várhatóan a jövőben a számítógépek többféle típusú memóriamodult is tartalmazni fognak. 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 29
Java 10 – Docker észlelés Linux rendszeren futtatva a JVM tudja, hogy Docker konténerben fut-e. Konténerrel kapcsolatos információk ◦ a processzorok száma ◦ teljes, a konténer számára elérhető memória 3 új JVM lehetőség Docker konténert használók számára. Egyéb hibajavítások konténerizált környezetben futó Java alkalmazások esetén. 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 30
Java 10 – gyorsabb JShell indulási idő Bizonyos esetekben a Java 9 -ben bevezetett JShell lassan indult, amit a Java 10 -ben orvosoltak. 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 31
Java 9
Java 9 – Collection factory metódusok Egysoros inicializációt tesznek lehetővé. Immutábilis példányokat használnak. A statikus factory metódus neve: of 10+ overloadolt változatot tartalmaz. Interfészbe kerültek (List, Set, Map) statikus metódusként. 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 33
Java 9 – Collection factory metódusok import java. util. List; import java. util. Map; import java. util. Set; public class Collection. Factory. Method. Example { public static void main(String[] args) { List<Integer> my. List = List. of(4, 8, 15, 16, 23, 42); Set<Integer> my. Set = Set. of(4, 8, 15, 16, 23, 42); Map<String, String> my. Map = Map. of("version", "10", "build_no", "135"); System. out. println(my. List); System. out. println(my. Set); System. out. println(my. Map); } } 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 34
Interfészek Java 8 előtt public class String. Pair implements Pair<String> { public interface Pair<E> { static <E> void swap. Elements(Pair<E> pair) { E old. Left. Element = pair. get. Left. Element(); pair. set. Left. Element(pair. get. Right. Element()); pair. set. Right. Element(old. Left. Element); } default void print. Elements() { System. out. println(get. Left. Element()); System. out. println(get. Right. Element()); } E get. Left. Element(); void set. Left. Element(E element); E get. Right. Element(); void set. Right. Element(E element); private String left. Element; private String right. Element; public String. Pair(String left. Element, String right. Element) { this. left. Element = left. Element; this. right. Element = right. Element; } public String get. Left. Element() { return left. Element; } public void set. Left. Element(String left. Element) { this. left. Element = left. Element; } public String get. Right. Element() { return right. Element; } public void set. Right. Element(String right. Element) { this. right. Element = right. Element; } } } 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 35
Interfészek Java 8 -ban public class String. Pair implements Pair<String> { public interface Pair<E> { static <E> void swap. Elements(Pair<E> pair) { E old. Left. Element = pair. get. Left. Element(); pair. set. Left. Element(pair. get. Right. Element()); pair. set. Right. Element(old. Left. Element); } default void print. Elements() { System. out. println(get. Left. Element()); System. out. println(get. Right. Element()); } E get. Left. Element(); void set. Left. Element(E element); E get. Right. Element(); void set. Right. Element(E element); private String left. Element; private String right. Element; public String. Pair(String left. Element, String right. Element) { this. left. Element = left. Element; this. right. Element = right. Element; } public String get. Left. Element() { return left. Element; } public void set. Left. Element(String left. Element) { this. left. Element = left. Element; } public String get. Right. Element() { return right. Element; } public void set. Right. Element(String right. Element) { this. right. Element = right. Element; } } } 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 36
Interfészek Java 9 -ben public interface Pair<E> { public class String. Pair implements Pair<String> { static <E> void swap. Elements(Pair<E> pair) { E old. Left. Element = pair. get. Left. Element(); pair. set. Left. Element(pair. get. Right. Element()); pair. set. Right. Element(old. Left. Element); } private String left. Element; private String right. Element; default void print. Elements() { print. Separator(); System. out. println(get. Left. Element()); System. out. println(get. Right. Element()); print. Separator(); } public String. Pair(String left. Element, String right. Element) { this. left. Element = left. Element; this. right. Element = right. Element; } public String get. Left. Element() { return left. Element; } private void print. Separator() { System. out. println("-----"); } public void set. Left. Element(String left. Element) { this. left. Element = left. Element; } E get. Left. Element(); public String get. Right. Element() { return right. Element; } void set. Left. Element(E element); E get. Right. Element(); public void set. Right. Element(String right. Element) { this. right. Element = right. Element; } void set. Right. Element(E element); } 2020. 11. 02. 19: 23 } © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 37
Java 9 – modul rendszer Project Jigsaw kódnéven futott Célja a Java platform modularizációja: 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 38
Java 9 – modul rendszer Egy speciálisan elnevezett fájlt igényel: module-info. java tartalma: module ${module-name} { requires ${module-name}; exports ${package-name}; } A requires a függőségeket írja le. Az exports azokat a package-eket nevezi meg, amik elérhetők más modulból. 2020. 11. 02. 19: 23 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 39
Java 9 – JShell REPL = Read Evaluate Print Loop Parancssori eszköz. Azonnali visszajelzést ad a megadott Java utasításokról. Kipróbálható vele bármilyen Java nyelvi elem. 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 40
Java 9 – JShell C: Program FilesJavajdk-10bin>jshell | Welcome to JShell -- Version 10 | For an introduction type: /help intro jshell> int i = 5 i ==> 5 jshell> int j = 6 j ==> 6 jshell> int k = i + j; k ==> 11 jshell> 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 41
Java 8
Java 8 – lambda kifejezések előtt import java. util. Array. List; java. util. Collections; java. util. Comparator; java. util. List; public class Sorting. With. Lambdas { public static void main(String[] args) { List<String> names = new Array. List<>(List. of("John", "Adam", "Victoria", "Aaron", "Robert", "Ursula", "Lauren", "Elisabeth", "Zeno")); Collections. sort(names, new Comparator<String>() { @Override public int compare(String first, String second) { return Integer. compare(first. length(), second. length()); } }); System. out. println(names); } } 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 43
Java 8 – lambda kifejezések segítségével import java. util. Array. List; import java. util. Collections; import java. util. List; public class Sorting. With. Lambdas { public static void main(String[] args) { List<String> names = new Array. List<>(List. of("John", "Adam", "Victoria", "Aaron", "Robert", "Ursula", "Lauren", "Elisabeth", "Zeno")); Collections. sort(names, (first, second) -> Integer. compare(first. length(), second. length())); System. out. println(names); } } 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 44
Java 8 – lambda kifejezések Névtelen metódusok. Paraméterként adható át vele logika. Java 8 előtt is volt erre lehetőség. Egyik ok, ami létjogosultságot adott a névtelen belső osztályoknak. Lambda kifejezéssel tömörebb, mint névtelen belső osztállyal. Kevesebb a boilerplate kód. Új kapcsolódó szintaktikai elem : : Metódus referencia, definiált metódus átadható paraméterként. 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 45
Java 8 – funkcionális interfész Minden olyan interfész, ami 1 absztrakt metódust tartalmaz. SAM = Single Abstract Method Opcionálisan ellátható az ilyen interfész a @Functional. Interface annotációval. @Override annotációval azonos szerep. Comparable Runnable Callable Action. Listener 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 46
Java 8 – funkcionális interfészek Interface Bi. Consumer<T, U> Bi. Function<T, U, R> Binary. Operator<T> Bi. Predicate<T, U> Boolean. Supplier Consumer<T> Double. Binary. Operator Double. Consumer Double. Function<R> Double. Predicate Double. Supplier Double. To. Int. Function Double. To. Long. Function Double. Unary. Operator Function<T, R> Int. Binary. Operator Int. Consumer Int. Function<R> Int. Predicate Int. Supplier Int. To. Double. Function Int. To. Long. Function Int. Unary. Operator Long. Binary. Operator Long. Consumer Long. Function<R> Long. Predicate Long. Supplier Long. To. Double. Function Long. To. Int. Function Long. Unary. Operator Obj. Double. Consumer<T> Obj. Int. Consumer<T> Obj. Long. Consumer<T> Predicate<T> Supplier<T> To. Double. Bi. Function<T, U> To. Double. Function<T> To. Int. Bi. Function<T, U> To. Int. Function<T> To. Long. Bi. Function<T, U> To. Long. Function<T> Unary. Operator<T> 2020. 11. 02. 19: 24 Description Represents an operation that accepts two input arguments and returns no result. Represents a function that accepts two arguments and produces a result. Represents an operation upon two operands of the same type, producing a result of the same type as the operands. Represents a predicate (boolean-valued function) of two arguments. Represents a supplier of boolean-valued results. Represents an operation that accepts a single input argument and returns no result. Represents an operation upon two double-valued operands and producing a double-valued result. Represents an operation that accepts a single double-valued argument and returns no result. Represents a function that accepts a double-valued argument and produces a result. Represents a predicate (boolean-valued function) of one double-valued argument. Represents a supplier of double-valued results. Represents a function that accepts a double-valued argument and produces an int-valued result. Represents a function that accepts a double-valued argument and produces a long-valued result. Represents an operation on a single double-valued operand that produces a double-valued result. Represents a function that accepts one argument and produces a result. Represents an operation upon two int-valued operands and producing an int-valued result. Represents an operation that accepts a single int-valued argument and returns no result. Represents a function that accepts an int-valued argument and produces a result. Represents a predicate (boolean-valued function) of one int-valued argument. Represents a supplier of int-valued results. Represents a function that accepts an int-valued argument and produces a double-valued result. Represents a function that accepts an int-valued argument and produces a long-valued result. Represents an operation on a single int-valued operand that produces an int-valued result. Represents an operation upon two long-valued operands and producing a long-valued result. Represents an operation that accepts a single long-valued argument and returns no result. Represents a function that accepts a long-valued argument and produces a result. Represents a predicate (boolean-valued function) of one long-valued argument. Represents a supplier of long-valued results. Represents a function that accepts a long-valued argument and produces a double-valued result. Represents a function that accepts a long-valued argument and produces an int-valued result. Represents an operation on a single long-valued operand that produces a long-valued result. Represents an operation that accepts an object-valued and a double-valued argument, and returns no result. Represents an operation that accepts an object-valued and a int-valued argument, and returns no result. Represents an operation that accepts an object-valued and a long-valued argument, and returns no result. Represents a predicate (boolean-valued function) of one argument. Represents a supplier of results. Represents a function that accepts two arguments and produces a double-valued result. Represents a function that accepts two arguments and produces an int-valued result. Represents a function that accepts two arguments and produces a long-valued result. Represents a function that produces a long-valued result. Represents an operation on a single operand that produces a result of the same type as its operand. © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 47
Java 8 – funkcionális interfészek @Functional. Interface public interface Consumer<T> { void accept(T t); } @Functional. Interface public interface Supplier<T> { T get(); } @Functional. Interface public interface Predicate<T> { boolean test(T t); } @Functional. Interface public interface Function<T, R> { R apply(T t); } @Functional. Interface public interface Bi. Function<T, U, R> { R apply(T t, U u); } 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 48
Java 8 – Stream API nélkül import java. util. Array. List; import java. util. Iterator; import java. util. List; public class Before. Stream. APIExample { public static void main(String[] args) { List<String> names = new Array. List<>(List. of("John", "Adam", "Victoria", "Aaron", "Robert", "Ursula", "Lauren", "Elisabeth", "Zeno")); for (Iterator<String> iterator = names. iterator(); iterator. has. Next(); ) { String name = iterator. next(); String lower. Case. Name = name. to. Lower. Case(); if (lower. Case. Name. starts. With("a")) { iterator. remove(); continue; } System. out. println(lower. Case. Name); } } } 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 49
Java 8 – Stream API segítségével import java. util. Array. List; import java. util. Iterator; import java. util. List; public class Stream. APIExample { public static void main(String[] args) { List<String> names = new Array. List<>(List. of("John", "Adam", "Victoria", "Aaron", "Robert", "Ursula", "Lauren", "Elisabeth", "Zeno")); names = names. stream() . map(name -> name. to. Lower. Case()) . filter(name -> !name. starts. With("a")) . collect(Collectors. to. List()); names. stream(). for. Each(System. out: : println); } } 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 50
Java 8 – Date and Time API Sok probléma az eredeti osztályokkal (java. util. Date, java. text. Simple. Date. Format): ◦ Megértést és használatot nehezítő tényezők ◦ Nem immutábilisak. ◦ Kontraintuitív: Date date = new Date(117, 1, 2); // kimenet: 2017 -02 -02 ◦ Időzónákat nem kezelik. ◦ Nem szálbiztosak. 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 51
Java 8 – Date and Time API Local. Date -> dátum idő nélkül (1985 -10 -26) Local. Time -> idő dátum nélkül (01: 20: 00. 562748800) Local. Date. Time -> dátum idővel (1985 -10 -26 T 01: 20: 00. 562748800) 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 52
Java 8 – Date and Time API import java. time. Local. Date; public class Date. Time. APIExample 1 { public static void main(String[] args) { Local. Date today = Local. Date. now(); System. out. println(today); // 1985 -10 -26 } } 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 53
Java 8 – Date and Time API import java. time. Local. Time; public class Date. Time. APIExample 2 { public static void main(String[] args) { Local. Time now = Local. Time. now(); System. out. println(now); // 01: 20: 00. 562748800 } } 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 54
Java 8 – Date and Time API import java. time. Local. Date. Time; public class Date. Time. APIExample 3 { public static void main(String[] args) { Local. Date. Time now = Local. Date. Time. now(); System. out. println(now); // 1985 -10 -26 T 01: 20: 00. 562748800 } } 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 55
Java 8 – Date and Time API import java. time. Local. Date. Time; public class Date. Time. APIExample 4 { public static void main(String[] args) { Local. Date. Time present = Local. Date. Time. of(1985, 10, 26, 01, 20, 00); Local. Date. Time past = present. minus. Years(30); System. out. println(present); // 1985 -10 -26 T 01: 20 System. out. println(past); // 1955 -10 -26 T 01: 20 } } 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 56
Java 8 – Optional Érték hiányának jelzésére használható => fluent API írható vele. null használata nem szerencsés. Alapvetően visszatérési értékek esetén használjuk. Paraméterváltozó típusaként kerülendő => overloading. Osztály és példányváltozó típusaként kerülendő. Nem szerializálható. 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 57
Java 8 – Optional<Coordinates> coordinates = get. GPSCoordinates(); coordinates. or. Else(Coordinates. NOT_AVAILABLE); 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 58
Java 7
Java 7 – aláhúzásjel szám literálokban Szám literálok tagolására használható. Csak számjegyek közé helyezhető. Aláhúzásjel nem tehető: ◦ a szám legelejére és legvégére ◦ tizedesvessző mellé közvetlenül ◦ a literál típusát jelző végződés elé 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 60
Java 7 – aláhúzásjel szám literálokban float pi 1 = 3_. 1415 F; // Invalid; cannot put underscores adjacent to a decimal point float pi 2 = 3. _1415 F; // Invalid; cannot put underscores adjacent to a decimal point long social. Security. Number 1 = 999_99_9999_L; // Invalid; cannot put underscores prior to an L suffix int x 1 x 2 x 3 x 4 = = _52; 5_2; 52_; 5_______2; // // This is an identifier, not a numeric literal OK (decimal literal) Invalid; cannot put underscores at the end of a literal OK (decimal literal) int x 5 x 6 x 7 x 8 = = 0_x 52; 0 x_52; 0 x 5_2; 0 x 52_; // // Invalid; cannot OK (hexadecimal Invalid; cannot int x 9 = 0_52; int x 10 = 05_2; int x 11 = 052_; 2020. 11. 02. 19: 24 put underscores in the 0 x radix prefix put underscores at the beginning of a number literal) put underscores at the end of a number // OK (octal literal) // Invalid; cannot put underscores at the end of a number © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 61
Java 7 – switch String típussal import java. util. List; import java. util. Random; public class Switch. With. String { public static void main(String[] args) { List<String> results = List. of("Egyest dobtál", "Kettest dobtál" , "Hármast dobtál" , "Négyest dobtál" , "Ötöst dobtál", "Hatost dobtál"); int random. Index = new Random(). next. Int( results. size()); String result = results. get(random. Index); System. out. println(result); switch (result) { case "Egyest dobtál": System. out. println("A szerencse nem áll melletted. " ); break; case "Kettest dobtál" : System. out. println("Dobtál már jobbat is. " ); break; case "Hármast dobtál" : System. out. println("Nem is rossz. "); break; case "Négyest dobtál" : System. out. println("Ez jó lesz. "); break; case "Ötöst dobtál": System. out. println("Szépen haladsz előre. " ); break; case "Hatost dobtál": System. out. println("Szuper! Mégegyszer dobhatsz!" ); break; } } } 2020. 11. 02. 19: 24 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 62
https: //ak-akademia. hu Köszönöm a = figyelmet()
- Andrs mint
- Andrs bello
- Matta markos luka ve yuhanna
- Matta markos luka ve yuhanna
- Debre markos university departments
- Site:slidetodoc.com
- Java programozási nyelv
- Magyar nyelv rokonsága
- Veliger larva
- Swift programozási nyelv
- Esperanto alfabeto
- Sql nyelv
- Magyar nyelv eredete és rokonsága
- Netflix nyelv szűrés
- Inkorporáló nyelv
- Sql nyelv
- Irodalmi nyelv
- Eschmark fogás
- Orvosi nyelv
- Nyelv receptorai
- Inkorporáló nyelv
- A nyelv társadalmi tagolódása
- Nyelv mirigyei
- I edgar
- Java thread import
- Java bean vs enterprise java bean
- Import java.util.random;
- Java import java.io.*
- Perbedaan awt dan swing
- Import java.util.scanner;
- Import java
- Import java.io.* in java
- Import java.awt.event.*
- Import java.util.*
- Import java.util.scanner;
- Import.java.util.*
- Programming language b
- Import java.awt.* import java.applet.*
- Oracle java se desktop subscription
- Java ear structure
- Void
- Cosmic superclass in java
- Java virtual machine architecture diagram
- The awt toolkit window
- Java method reference
- Java gui fx
- What are stacks
- Ibm eclipse ide
- Java proficiency quiz 1
- Java programming language
- Access specifiers in java
- Spring bean lifecycle
- Terasoluna
- Java thread life cycle
- Cosmic superclass in java
- Interface history
- Inside which html element do we put the
- Inter process communication java
- Osnove java programiranja
- Clases abstractas java
- Java /n
- Dynamic data structure in java
- Java programming
- Parallel arrays