prominent java 8 features with code examples
Свеобухватна листа и објашњење свих истакнутих карактеристика представљених у издању Јава 8 са примерима:
Издање Јава 8 из Орацле-а било је револуционарно издање 1. светске развојне платформе. Обухватала је велику надоградњу Јава програмског модела у целини, заједно са развојем ЈВМ-а, Јава језика и библиотека на координисан начин.
Ово издање је укључивало неколико карактеристика за једноставност употребе, продуктивност, побољшано програмирање полиглота, сигурност и свеукупно побољшане перформансе.
Шта ћете научити:
- Карактеристике додате у издање Јава 8
- Функционални интерфејси и Ламбда изрази
- метода форЕацх () у итерабле интерфејсу
- Факултативни час
- Подразумеване и статичке методе у интерфејсима
- Референце литературе
- Јава Стреам АПИ за скупне операције података на колекцијама
- Јава Дате Тиме АПИ
- ЈаваСцрипт мотор Рхиноцерос
- Басе64 кодирање декодирања
- Побољшања АПИ-ја колекције
- Измене / побољшања АПИ-ја за истовремени рад
- Побољшања Јава ИО-а
- Разна основна побољшања АПИ-ја
- Закључак
Карактеристике додате у издање Јава 8
Међу главним променама, следеће су значајне функције које су додате овом издању.
- Функционални интерфејси и Ламбда изрази
- метода форЕацх () у интерфејсу Итерабле
- Факултативни час,
- подразумеване и статичке методе у интерфејсима
- Референце о методама
- Јава Стреам АПИ за групне операције података на колекцијама
- Јава Дате Тиме АПИ
- Побољшања АПИ-ја колекције
- Побољшања АПИ-ја за паралелност
- Јава ИО побољшања
- ЈаваСцрипт мотор Рхиноцерос
- Басе64 кодирање декодирања
- Разна побољшања основног АПИ-ја
У овом упутству ћемо кратко размотрити сваку од ових карактеристика и покушати да објаснимо сваку од њих уз помоћ једноставних и лаких примера.
Функционални интерфејси и Ламбда изрази
Јава 8 уводи напомену познату као @ФунцтионалИнтерфаце која је обично за грешке на нивоу компајлера. Обично се користи када интерфејс који користите крши уговоре о функционалном интерфејсу.
Алтернативно, можете назвати функционални интерфејс као САМ интерфејс или интерфејс Сингле Абстрацт Метход. Функционални интерфејс омогућава тачно један „апстрактни метод“ као свог члана.
Испод је дат пример функционалног интерфејса:
@FunctionalInterface public interface MyFirstFunctionalInterface { public void firstWork(); }
Можете изоставити напомену, @ФунцтионалИнтерфаце и ваш функционални интерфејс ће и даље бити важећи. Ову напомену користимо само да бисмо обавестили компајлер да ће интерфејс имати једну апстрактну методу.
Белешка: По дефиницији, подразумеване методе су апстрактне и у функционални интерфејс можете додати онолико задатих метода колико желите.
Друго, ако интерфејс има апстрактну методу која замењује једну од јавних метода „јава.ланг.објецт“, тада се не сматра апстрактном методом интерфејса.
Доље је дат валидан пример функционалног интерфејса.
@FunctionalInterface public interface FunctionalInterface_one { public void firstInt_method(); @Override public String toString(); //Overridden from Object class @Override public boolean equals(Object obj); //Overridden from Object class }
Ламбда израз (или функција) може се дефинисати као анонимна функција (функција без имена и идентификатора). Ламбда изрази су дефинисани тачно на месту где су потребни, обично као параметар неке друге функције.
Из друге перспективе, Ламбда изрази изражавају примере Функционални интерфејси (описано горе). Ламбда изрази имплементирају једину апстрактну функцију присутну у функционалном интерфејсу и тако имплементирају функционалне интерфејсе.
Основна синтакса Ламбда израза је:
Основни пример Ламбда израза је:
Горњи израз узима два параметра к и и и враћа његов збир к + и. На основу типа података к и и, метода се може користити више пута на различитим местима. Тако ће се параметри к и и подударати са инт или Интегер и низом, а на основу контекста ће додати две целобројне вредности (када су параметри инт) или конкатирати два низа (када су параметри низ).
Применимо програм који демонстрира Ламбда изразе.
interface MyInterface { void abstract_func(int x,int y); default void default_Fun() { System.out.println('This is default method'); } } class Main { public static void main(String args()) { //lambda expression MyInterface fobj = (int x, int y)->System.out.println(x+y); System.out.print('The result = '); fobj.abstract_func(5,5); fobj.default_Fun(); } }
Излаз:
Горњи програм приказује употребу Ламбда Екпрессион за додавање параметара и приказује њихов збир. Затим користимо ово за примену апстрактне методе „абстрацт_фун“ коју смо декларисали у дефиницији интерфејса. Резултат позива функције „абстрацт_фун“ је збир два цела броја прослеђена као параметри током позива функције.
Више о Ламбда изразима сазнаћемо касније у водичу.
метода форЕацх () у итерабле интерфејсу
Јава 8 је увела методу „форЕацх“ у интерфејс јава.ланг.Итерабле који може прелазити преко елемената у колекцији. „ФорЕацх“ је задата метода дефинисана у интерфејсу Итерабле. Користе га класе Цоллецтион које проширују интерфејс Итерабле на итерацију елемената.
Метода „форЕацх“ узима Функционални интерфејс као један параметар, тј. Као аргумент можете проследити Ламбда израз.
Пример форЕацх () методе.
importjava.util.ArrayList; importjava.util.List; public class Main { public static void main(String() args) { List subList = new ArrayList(); subList.add('Maths'); subList.add('English'); subList.add('French'); subList.add('Sanskrit'); subList.add('Abacus'); System.out.println('------------Subject List--------------'); subList.forEach(sub -> System.out.println(sub)); } }
Излаз:
Дакле, имамо колекцију предмета, тј. Подлисту. Садржај подлисте приказујемо методом форЕацх која узима Ламбда Екпрессион за штампање сваког елемента.
Факултативни час
Јава 8 је увела опционалну класу у пакету „јава.утил“. „Опционално“ је јавна завршна класа и користи се за бављење НуллПоинтерЕкцептион у Јава апликацији. Користећи опционално, можете одредити алтернативни код или вредности које ће се покретати. Коришћењем опционалног не морате да користите превише нулл провера да бисте избегли нуллПоинтерЕкцептион.
Можете користити класу Оптионал да бисте избегли абнормални прекид програма и спречили пад програма. Необавезна класа пружа методе које се користе за проверу присуства вредности за одређену променљиву.
Следећи програм демонстрира употребу класе Необвезно.
import java.util.Optional; public class Main{ public static void main(String() args) { String() str = new String(10); OptionalcheckNull = Optional.ofNullable(str(5)); if (checkNull.isPresent()) { String word = str(5).toLowerCase(); System.out.print(str); } else System.out.println('string is null'); } }
Излаз:
како да постанем испитивач производа
У овом програму користимо својство “офНуллабле” класе Оптионал да бисмо проверили да ли је низ нулл. Ако јесте, кориснику се одштампа одговарајућа порука.
Подразумеване и статичке методе у интерфејсима
У Јави 8 у интерфејс можете додати методе које нису апстрактне, тј. Можете имати интерфејсе са имплементацијом метода. Кључну реч Дефаулт и Статиц можете користити за креирање интерфејса са имплементацијом методе. Подразумеване методе углавном омогућавају функционалност Ламбда Екпрессион.
Користећи подразумеване методе, можете да додате нову функционалност својим интерфејсима у библиотекама. Ово ће осигурати да је код написан за старије верзије компатибилан са тим интерфејсима (бинарна компатибилност).
Да разумемо подразумевани метод на примеру:
import java.util.Optional; interface interface_default { default void default_method(){ System.out.println('I am default method of interface'); } } class derived_class implements interface_default{ } class Main{ public static void main(String() args){ derived_class obj1 = new derived_class(); obj1.default_method(); } }
Излаз:
Имамо интерфејс под називом „интерфаце_дефаулт“ са методом дефаулт_метход () са подразумеваном имплементацијом. Даље, дефинишемо класу „изведена_класа“ која имплементира интерфејс „интерфаце_дефаулт“.
Имајте на уму да у овој класи нисмо применили ниједан метод интерфејса. Затим у главној функцији креирамо објекат класе „дерива_цласс“ и директно позивамо „дефаулт_метход“ интерфејса без потребе да га дефинишемо у класи.
Ово је употреба задатих и статичких метода у интерфејсу. Међутим, ако класа жели да прилагоди подразумевану методу, можете да обезбедите њену сопствену имплементацију заменом методе.
Референце литературе
Референтна карактеристика методе представљена у Јави 8 скраћени је запис за Ламбда Екпрессионс да позива метод функционалног интерфејса. Дакле, сваки пут када користите Ламбда израз за упућивање на методу, свој Ламбда израз можете заменити референцом методе.
Пример референце методе.
import java.util.Optional; interface interface_default { void display(); } class derived_class{ public void classMethod(){ System.out.println('Derived class Method'); } } class Main{ public static void main(String() args){ derived_class obj1 = new derived_class(); interface_default ref = obj1::classMethod; ref.display(); } }
Излаз:
У овом програму имамо интерфејс „интерфаце_дефаулт“ са апстрактном методом „дисплаи ()“. Даље, постоји класа „изведена_класа“ која има јавну методу „цлассМетход“ која исписује поруку.
У главној функцији имамо објекат за класу, а затим имамо референцу на интерфејс који се позива на метод класе „цлассМетход“ кроз обј1 (објект класе). Сада, када је приказ апстрактне методе позван референцом интерфејса, тада се приказује садржај цлассМетход.
Јава Стреам АПИ за скупне операције података на колекцијама
Стреам АПИ је још једна велика промена уведена у Јави 8. Стреам АПИ се користи за обраду колекције објеката и подржава другачији тип итерације. Стреам је низ објеката (елемената) који вам омогућава да припремите различите методе како бисте произвели жељене резултате.
Стреам није структура података и свој унос прима из колекција, низова или других канала. Можемо припремити разне посредне операције помоћу Стреамова и терминалне операције враћају резултат. Детаљније ћемо размотрити АПИ протока у одвојеном упутству за Јава.
Јава Дате Тиме АПИ
Јава 8 представља нови АПИ за датум и време под пакетом јава.тиме.
Најважније класе међу њима су:
- Локално: Поједностављени АПИ за датум и време без сложености руковања временском зоном.
- Зонирано: Специјализовани АПИ за датум и време за бављење разним временским зонама.
Датуми
Класа датума је застарела у Јави 8.
Следе нови уведени часови:
- Класа ЛоцалДате дефинише датум. Нема репрезентацију за време или временску зону.
- ЛоцалТиме класа дефинише време. Нема репрезентацију за датум или временску зону.
- Класа ЛоцалДатеТиме дефинише датум и време. Не представља временску зону.
Да бисте укључили информације о временској зони са функцијом датума, можете да користите Ламбда који пружа 3 класе, тј. ОффсетДате, ОффсетТиме и ОффсетДатеТиме. Овде се померање временске зоне представља помоћу друге класе - „ЗонеИд“. Ову тему ћемо детаљно обрадити у каснијим деловима ове Јава серије.
ЈаваСцрипт мотор Рхиноцерос
Јава 8 је увела знатно побољшани мотор за ЈаваСцрипт, тј. Насхорн који замењује постојећег Рхино-а. Насхорн директно компајлира код у меморији, а затим прослеђује бајт код ЈВМ-у, побољшавајући тако перформансе за 10 пута.
Насхорн представља нови алат за командну линију - јјс који извршава ЈаваСцрипт код на конзоли.
Креирајмо ЈаваСцрипт датотеку „сампле.јс“ која садржи следећи код.
print (‘Hello, World!!’);
Дајте следећу команду у конзоли:
Ц: Јава јјс сампле.јс
Излаз: Здраво Свете!!
Такође можемо покретати ЈаваСцрипт програме у интерактивном режиму и такође пружати аргументе програмима.
Басе64 кодирање декодирања
У Јави 8 постоји уграђено кодирање и декодирање за Басе64 кодирање. Класа за Басе64 кодирање је јава.утил.Басе64.
Ова класа пружа три Басе64 кода и декодере:
- Основно: У овоме се излаз пресликава на скуп знакова између А-За-з0-9 + /. Кодер на излаз не додаје додавање линије и декодер одбацује било који знак осим горе наведеног.
- УРЛ: Овде је излаз УРЛ, а назив датотеке се пресликава на скуп знакова између А-За-з0-9 + /.
- МИМЕ: У овој врсти кодера, излаз се пресликава у МИМЕ формат.
Побољшања АПИ-ја колекције
Јава 8 је додала следеће нове методе у АПИ за прикупљање:
- форЕацхРемаининг (Потрошачка акција): Ово је задата метода и служи за Итератор. Изводи „акцију“ за сваки од преосталих елемената све док се сви елементи не обраде или „акција“ избаци изузетак.
- Подразумевани метод за колекцију ремовеИф (филтер предиката): Ово уклања све елементе у колекцији који задовољавају задати „филтер“.
- Сплитератор (): Ово је метода прикупљања и враћа инстанцу сплитератора коју можете користити за прелазак елемената било у низу или у паралели.
- Збирка мапа има методе реплацеАлл (), цомпуте () и мерге ().
- Класа ХасхМап са сударима кључева побољшана је како би побољшала перформансе.
Измене / побољшања АПИ-ја за истовремени рад
Следе важна побољшања у истовременом АПИ-ју:
- ЦонцуррентХасхМап је побољшан следећим методама:
- цомпуте (),
- за сваки (),
- форЕацхЕнтри (),
- форЕацхКеи (),
- форЕацхВалуе (),
- го (),
- смањити () и
- Претрага ()
- Метода „невВоркСтеалингПоол ()“ за извршитеље ствара спрему нити крађе рада. Доступне процесоре користи као свој циљни ниво паралелизма.
- Метод „цомплетаблеФутуре“ је онај који можемо изричито извршити (постављањем његове вредности и статуса).
Побољшања Јава ИО-а
ИО побољшања урађена у Јави 8 укључују:
- Филес.лист (режија путање): Ово враћа јлазили насељен ток, чији је сваки елемент унос у директоријум.
- Филес.линес (путања пута): Чита све редове из стрима.
- Филес.финд (): Потражите датотеке у стаблу датотека укорењене у датој почетној датотеци и враћају ток попуњен стазом.
- БуффередРеадер.линес (): Враћа ток са свим својим елементима док се редови читају из БуффередРеадер-а.
Разна основна побољшања АПИ-ја
Имамо следећа побољшања АПИ-ја:
- Статичка метода витхИнитиал (добављач добављача) ТхреадЛоцал-а за лако стварање инстанце.
- Интерфејс „Цомпаратор“ проширен је подразумеваним и статичким методама за природно наручивање обрнутог редоследа итд.
- Класе целих, дугих и двоструких омотача имају методе мин (), мак () и сум ().
- Логичка класа је побољшана методама логицАнд (), логицОр () и логицКсор ().
- Неколико корисних метода је представљено у класи Матх.
- Уклоњен је мост ЈДБЦ-ОДБЦ.
- Уклоњен је простор меморије ПермГен.
Закључак
У овом упутству смо разговарали о главним карактеристикама које су додате издању Јава 8. Како је Јава 8 главно издање с Јаве, важно је да знате све функције и побољшања која су урађена као део овог издања.
Иако је најновија Јава верзија 13, ипак је добра идеја да се упознате са функцијама Јава 8. Све функције о којима се говори у овом упутству и даље су присутне у најновијој верзији Јаве, а ми ћемо их размотрити као појединачне теме касније у овој серији.
Надамо се да вам је овај водич помогао да научите о разним функцијама Јава 8 !!
Препоручено читање
- Водич за дужину Јава низа са примерима кода
- Јава 'тхис' кључна реч: Водич са примерима кода
- Јава интерфејс и лекција са апстрактним часовима са примерима
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича
- Примена Јава-а: Стварање и извршавање Јава ЈАР датотеке
- Ц ++ Вс Јава: 30 најбољих разлика између Ц ++ и Јаве са примерима
- МонгоДБ метода сортирања () са примерима
- Истражите основе Јаве у селену са примерима