Пештар, versionҳои нави Java хеле кам ва бо таъхир пайдо мешуданд. Ҳоло Oracle бомуваффақият ритми мустақor "Java-и навро ҳар шаш моҳ" нигоҳ медорад. Ҳамин тавр, чанд рӯз пеш, ба таври қатъӣ тибқи ҷадвал, мо ниҳоят Java SE 11 ва татбиқи JDK (Java Development Kit) гирифтем. Чун ҳамеша, versionи нав бо versionҳои кӯҳна мувофиқ хоҳад буд ва дастгирии Java 11 на пештар аз декабри соли 2026 ба охир мерасад.
Хусусиятҳои нав дар Java SE 11 (ба таҳиягарон намоён)
Ёдовар мешавем, ки дар Java тағирот тавассути татбиқи JEP "Пешниҳоди такмилдиҳии JDK" анҷом дода мешавад. JEP пешниҳод барои такмил додани OpenJDK аст ва метавонад тасдиқ, таъхир ё рад карда шавад. Яъне, аслан маҷмӯи JEPҳо стратегияи рушд барои OpenJDK мебошад. Дар қавсҳои мураббаъ пеш аз "хусусият" мо рақами JEP-и мувофиқро нишон медиҳем. [323] Синтаксиси маҳаллӣ-тағйирёбанда барои параметрҳои Ламбда - синтаксиси var барои параметрҳои лямбда Java 10 калимаи калидии varро ҷорӣ кард, ки имкон дод, ки навъи тағирёбандаи маҳаллӣ ба таври возеҳ муайян карда нашавад. Ин codeро содда кард. JEP 323 истифодаи ин синтаксисро бо ифодаҳои лямбда васеъ мекунад. Мисоли оддӣ:list.stream ()
.map ((var s) -> s.toLowerCase ())
.collect (Collectors.toList ());
Тавре Саймон Риттер , як воҳиди маъруфи Java, менависад, як барномасози ботаҷрибаи Java қайд мекунад, ки истифодаи var дар ин ҳолат метавонад нолозим бошад, зеро рамзи дар боло зикршударо бо зерин иваз кардан мумкин аст:
list.stream ()
.map (s -> s.toLowerCase ())
.collect (Collectors.toList ());
Пас чаро var destek? Танҳо як ҳолати махсус вуҷуд дорад - вақте ки шумо мехоҳед ба параметри ламбда эзоҳ илова кунед. Инро бе ягон намуди ҷалб кардан ғайриимкон аст ва барои пешгирӣ кардани истифодаи навъи возеҳ, мо метавонем ҳама чизро бо истифода аз var содда кунем:
list.stream ()
.map ((@ Notnull var s) -> s.toLowerCase ())
.collect (Collectors.toList ());
[330] Оғози барномаҳои ягонаи файли codeи сарчашма Такмor оғозкунандаи Java барои оғоз кардани барнома ҳамчун файли ягона бо codeи сарчашмаи Java Java аксар вақт барои синтаксиси муфассал ва "маросими" чандқадамонаи оғози ҳатто як барномаи ночиз танқид карда мешавад. Баъзан ин навоваронро метарсонад. Барои навиштани замима, ки танҳо чопи " Салом Ҷаҳон! " ", шумо бояд синфро бо void
усули асосии статикии оммавӣ нависед ва System.out.println
. Пас аз анҷом додани ин, шумо бояд codeро бо истифода аз javac тартиб диҳед . Ниҳоят, пас аз ин, шумо метавонед барномаеро оғоз кунед, ки саломи бадбахтро нишон медиҳад (албатта, муҳити ҳамгирошудаи рушд, ҳам IDEA ва ҳам дар JavaRush сохташуда , ин "сеҳри оғози барнома" -ро мустақилона иҷро мекунад - ёддошти муҳаррир ). Биёед ростқавл бошем: дар аксари забонҳои барномасозӣ, скрипти воқеии иҷро кардани барномаҳо хеле соддатар менамояд. JEP 330 зарурати тартиб додани як замимаи як файлро аз байн мебарад, аз ин рӯ ҳоло агар шумо сатри фармонро истифода баред, танҳо нависед
java HelloWorld.java
Оғозкунандаи Java муайян мекунад, ки файл рамзи сарчашмаи Java-ро дар бар мегирад ва пеш аз иҷрои он codeро ба файли синфӣ тартиб медиҳад. Шумо метавонед параметрҳоро пас аз ё пеш аз номи файли codeи сарчашма ҷойгир кунед. Онҳое, ки пас аз ном гузошта шудаанд, ҳангоми иҷрои барнома ҳамчун параметрҳо интиқол дода мешаванд. Онҳое, ки пеш аз ном гузошта шудаанд, пас аз тартиб додани code ҳамчун параметр ба оғозкунандаи Java интиқол дода мешаванд. Вариантҳои мушаххаси компилятор (масалан, classpath) инчунин барои тартиб додан ба javac интиқол дода мешаванд . Мисол. Хат:
java -classpath / home / foo / java Hello.java Bonjour
ба ин сатрҳо баробар хоҳад буд:
javac -classpath / home / foo / java Hello.java
java -classpath / home / foo / java Hello Bonjour
[321] HTTP Client (Стандарт) - Дастгирии API-и HTTP Client стандартизатсия шудааст JDK 9 API-и навро барои дастгирии протоколи Client HTTP (JEP 110) муаррифӣ кард . Азбаски JDK 9 инчунин Системаи Java Platform Module (JPMS) -ро муаррифӣ кард, ин API ҳамчун модули инкубатор дохил карда шуд (инҳо модулҳо мебошанд, ки ба таҳиягарон бо API-ҳои нав, ки ҳанӯз дар Java SE стандартӣ нашудаанд, дар ҳоле ки API-ҳои "зинда" мавҷуданд. барои нест кардан омода шудааст - таҳиягарон метавонанд API-ҳои навро санҷанд ва кӯшиш кунанд, ки фикру мулоҳизаҳои худро пешниҳод кунанд). Пас аз ворид кардани тағйироти зарурӣ (ин API дар JDK 10 нав карда шудааст), API метавонад як қисми стандарт гардад. Ҳамин тавр, HTTP Client API ҳоло расман ба Java SE 11 дохил карда шудааст . Ин модул ва бастаи навро барои JDK, java.net.http муаррифӣ мекунад . Навъҳои асосии нав инҳоянд: HttpClient HttpRequest HttpResponse WebSocket Ин API-ро метавон ба таври синхронӣ ё асинхронӣ истифода бурд. Дар ҳолати асинхронӣ, CompletionFutures
ва истифода мешаванд CompletionStages
. [320] Хориҷ Модулҳои Java EE ва CORBA Бо ҷорӣ намудани Java Platform Module System (JPMS) дар versionи нӯҳуми Java, имкон пайдо шуд, ки файли монолитии rt.jar ба якчанд модул тақсим карда шавад. Илова бар ин, JPMS ба шумо имкон медиҳад, ки муҳити кории Java-ро эҷод кунед, ки танҳо модулҳои ба барномаи шумо лозимиро дар бар мегирад ва андозаи онро хеле кам мекунад. Бо сарҳадҳои шаффоф муайяншудаи модул тоза кардани қисмҳои кӯҳнашудаи Java API хеле осонтар аст - ин корро JEP 320 мекунад. Метамодули java.se.ee шаш модулро дар бар мегирад, ки қисми стандарти Java SE 11 нестанд ва дохил карда намешаванд дар JDK:
- корба
- муомилот
- фаъолсозӣ
- xml.bind
- xml.ws
- xml.ws.annotation
API-ҳои нав
Шумораи зиёди API-ҳои нав дар JDK 11 ба шарофати ворид кардани модулҳои HTTP Client ва Flight Recorder ба стандарти забон пайдо шуданд . Барои рӯйхати пурраи APIҳо, ба муқоисаи ҳамаҷонибаи зерини versionҳои гуногуни JDK нигаред , ки аз ҷониби Гуннар Морлинг тартиб дода шудааст. Ва дар ин ёддошт мо баъзе усулҳои навро номбар мекунем, ки ба модулҳои java.net.http , jdk.jfr ва java.security дохил карда нашудаанд . java.lang.String Эҳтимол яке аз муҳимтарин тағирот ба String дар JDK 11 API, якчанд усулҳои нави муфид мавҷуданд.boolean isBlank ()
: ҳақиқӣ бар мегардонад, агар сатр холӣ бошад ё танҳо фосила дошта бошад, дар акси ҳол нодуруст аст.Stream lines()
: Ҷараёни сатрҳои аз ин сатр истихроҷшударо, ки бо терминаторҳои сатр ҷудо шудаанд, бармегардонад.String repeat (int)
: Сатреро бармегардонад, ки арзиши он пайвастагии ин сатр аст, ки дар инт маротиба такрор мешавад.String strip ()
: Сатрро бо ҳамаи фосилаҳо пеш аз ё баъд аз аломати аввалини ғайрифазо хориҷ карда бармегардонад.String stripLeading ()
: Сатрро бо ҳамаи фосилаҳо то аломати аввалини фосилаи хориҷшуда бармегардонад.String stripTrainling ()
: Сатрро бо ҳамаи фосилаҳое бармегардонад, ки пас аз хориҷ кардани аломати охирини фосилавӣ рух медиҳанд.
strip()
Усул аллакай як чизи шабеҳро иҷро кардааст trim ()
, аммо аз рӯи фосила ин усулҳо чизҳои гуногунро доранд. Дар ҳолате, ки trim()
танҳо фосилаҳо бурида мешаванд ва дар strip()
- инчунин аломатҳои махсус, ба монанди ҷадвалҳо. java.lang.StringBuffer java.lang.StringBuilder Ҳардуи ин синфҳо усули наверо дар бар мегиранд compareTo ()
, ки StringBuffer
/ қабул мекунанд StringBuilder
ва бармегардонанд int
. Усули мукоисаи лугавй ба усули нав монанд аст compareTo() CharSequence
. java.io.ByteArrayOutputStream
void writeBytes (byte [])
: ҳамаи byteҳои параметрро ба ҷараёни баромади java.io.FileReader менависад
Charset
. java.io.FileWriter Чор созандаҳои нав, ки ба шумо имкон медиҳанд, ки Charse
т. java.io.InputStream
io.InputStream nullInputStream ()
: бар мегардонадInputStream
, ки ягон byteро намехонад. Ин усулро чӣ тавр истифода бурдан мумкин аст? Шумо метавонед онро ҳамчун чизе монанди /dev/null барои партофтани баромади ба шумо лозим нест ё ворид кардани вуруде, ки ҳамеша byteҳои сифрро бармегардонад, фикр кунед.
io.OutputStream nullOutputStream ()
io.Reader nullReader ()
io.Writer nullWriter ()
String toString (int)
: Ин изофабори усули мавҷуда аст, аммо ба ҷои char int -ро истифода мебарад.
int compare (CharSequence, CharSequence)
: лексикографӣ ду мисолро муқоиса мекунадCharSequence
. Қимати манфӣ, сифр ё арзиши мусбатро бармегардонад, агар пайдарпаии аввал мутаносибан аз ҷиҳати лексикографӣ камтар, ба баробар ё бузургтар аз дуюм бошад.
lang.Object clone ()
: Инҷor Java Саймон Риттер иқрор мешавад, ки ин усул ӯро ошуфтааст. Синф
Reference
интерфейсро амалӣ намекунад
Cloneable
ва ин усул ҳамеша истисноро мегузорад
CloneNotSupportedException
. Бо вуҷуди ин, коршинос пешниҳод мекунад, ки ин усул дар оянда барои чизе муфид хоҳад буд.
runFinalizersOnExit ()
аз ҳардуи ин синфҳо хориҷ карда шудааст, ки метавонад боиси мушкилоти мутобиқат гардад. java.lang.Thread Ягон усулҳои иловагӣ, мо танҳо зикр мекунем, ки destroy ()
онҳо stop (Throwable)
хориҷ карда шудаанд. Бо вуҷуди ин stop ()
, ки ҳеҷ далеле надорад, то ҳол дастрас аст. Лутфан инро дар хотир нигоҳ доред, зеро метавонад мушкилоти мутобиқат вуҷуд дошта бошад. java.nio.ByteBuffer java.nio.CharBuffer java.nio.DoubleBuffer java.nio.FloatBuffer java.nio.LongBuffer java.nio.ShortBuffer Дар ҳамаи ин синфҳо, таҳиягарони забон усулеро илова карданд mismatch ()
, ки шохиси нисбии онро пайдо ва бармегардонад. номувофиқатии аввал байни ин буфер ва буфери додашуда. java.nio.channels.SelectionKey
int interestOpsAnd (int)
int interestOpsOr (int)
int select (java.util.function.Consumer, long)
: Интихоб ва иҷро кардани амал дар калидҳое, ки каналҳои мувофиқи онҳо барои амалиёти воридотӣ омодаанд. Параметри тӯлонӣ вақти фарогири вақт аст.int select (java.util.function.Consumer)
: мисли усули дар боло зикршуда кор мекунад, аммо бидуни мӯҳлат.int selectNow (java.util.function.Consumer)
: мисли усули боло кор мекунад, танҳо он баста намешавад.
String readString (Path)
: Тамоми мундариҷаро аз файл ба сатр мехонад, byteҳоро ба аломатҳо бо истифода аз рамзгузории UTF-8 рамзкушоӣ мекунад .String readString (Path, Charset)
: Монанди усули дар боло зикршуда кор мекунад, аммо byteҳоро ба аломатҳо бо истифода азCharset
.Path writeString (Path, CharSequence, java.nio.file. OpenOption [])
: Агар шумо пайдарпайии аломатҳороCharSequence
ба файл нависед, он аломатҳо ба byteҳо рамзгузорӣ карда мешаванд (бо истифода аз UTF-8 ).Path writeString (Path, CharSequence, java.nio.file. Charset, OpenOption [])
: мисли усули дар боло буда кор мекунад, танҳо аломатҳо бо истифода аз byteҳо рамзгузорӣ карда мешавандCharset
.
- Path(String, String[]): Роҳро бармегардонад, сатри роҳ ё пайдарпаии сатрҳоро табдил медиҳад, ки ҳангоми муттаҳидшавӣ хати роҳро ташкил медиҳанд.
- Роҳ (net.URI): Роҳро тавассути табдил додани URI бармегардонад.
Object [] toArray (java.util.function.IntFunction)
: Массиви дорои ҳамаи унсурҳои ин коллексияро бар мегардонад, бо истифода аз функсияи генератори додашуда барои паҳн кардани массиви баргардонидашуда.
void forEach (java.util.function.Consumer)
: Амали муайяншударо дар ҳар як унсури такроршаванда иҷро мекунад , то он даме, ки ҳамаи элементҳо коркард шаванд ё амал истисноро ба вуҷуд меорад.boolean removeAll (java.util.Collection)
: Ҳама унсурҳои ин коллексияро, ки дар маҷмӯаи муайяншуда низ мавҷуданд, хориҷ мекунад (амали ихтиёрӣ).boolean removeIf (java.util.function.Predicate)
: Ҳама унсурҳои ин коллексияро, ки предикати додашударо қонеъ мекунанд, хориҷ мекунад.boolean retainAll (java.util.Collection)
: Танҳо унсурҳои дар ин коллексия мавҷудбударо нигоҳ медорад (амали ихтиёрӣ).
long convert (java.time.Duration)
: Давомнокии додашудаи вақтро ба ин воҳид табдил медиҳад.
Predicate not(Predicate)
: предикатеро бармегардонад, ки инкори предикати додашуда мебошад.
lines.stream ()
.filter (s ->! s.isBlank ())
ба ин табдил додан мумкин аст:
lines.stream ()
.filter (Predicate.not (String :: ISBLANK))
ва агар мо воридоти статикиро истифода барем, пас он чизест, ки мо мегирем:
lines.stream ()
.filter (not(String :: ISBLANK))
java.util.Optional java.util.OptionalInt java.util.OptionalDouble java.util.OptionalLong
boolean isEmpty ()
: Агар арзиш надошта бошад , ҳақиқӣ , дар акси ҳол нодуруст бар мегардонад .
Predicate asMatchPredicate ()
: Коршиноси Java Саймон Риттер бовар дорад, ки шояд дар ин ҷо гавҳари воқеии JDK 11 API пинҳон бошад.Ин усул предикат эҷод мекунад, ки оё ин намуна ба сатри вуруди додашуда мувофиқат мекунад ё на.
int deflate (ByteBuffer)
: Маълумоти воридшударо фишурда мекунад ва буфери муайяншударо бо маълумоти фишурда пур мекунад.int deflate (ByteBuffer, int)
: Маълумоти воридшударо фишурда мекунад ва буфери муайяншударо бо маълумоти фишурда пур мекунад. Миқдори воқеии маълумоти фишурдашударо бармегардонад.void setDictionary (ByteBuffer)
: Луғати додашударо барои фишурда шудан ба byteҳо дар буфери додашуда муқаррар мекунад. Ин изофабори усули мавҷуда аст, ки акнун метавонадByteBuffer
на массиви byteро қабул кунад.void setInput (ByteBuffer)
: Маълумоти воридшударо барои фишурда таъин мекунад. Он инчунин як изофабори усули мавҷуда аст.
int inflate (ByteBuffer)
: Байтро ба буфери муайяншуда мекушояд. Шумораи воқеии byteҳои фишурнашударо бармегардонад.void setDictionary (ByteBuffer)
: Луғати додашударо ба byteҳои дар буфери додашуда муқаррар мекунад. Шакли изофабори усули мавҷуда аст.void setInput (ByteBuffer)
: Маълумоти вурудиро барои декомпрессия муқаррар мекунад. Шакли изофабори усули мавҷуда.
void addAll (Collection)
: Ҳама унсурҳои дар коллексия мавҷудбударо илова мекунад.void addAll (int, Collection)
: Ҳама унсурҳои дар маҷмӯа мавҷудбударо аз индекси муайяншуда илова мекунад.
int [] getSelectedIndices ()
: Массиви ҳамаи индексҳои интихобшударо дар модели интихобшуда бо тартиби афзоиш бармегардонад.int getSelectedItemsCount ()
: Шумораи ҷузъҳои интихобшударо бармегардонад.
shell.JShellException getCause ()
: Сабаби партофташавандаро дар муштарии иҷро, ки аз ҷониби ин EvalException пешниҳод шудааст, бармегардонад ё агар сабаб вуҷуд надошта бошад ё номаълум бошад.
Хусусиятҳои таҳиякунандаи Java 11
[181] Назорати дастрасӣ дар асоси Nest Java ва забонҳои дигар синфҳои дохorро тавассути синфҳои дохилӣ дастгирӣ мекунанд. Барои ин кор, компилятор бояд ҳиллаҳои муайянро иҷро кунад. Барои намуна:public class Outer {
private int outerInt;
class Inner {
public void printOuterInt() {
System.out.println("Outer int = " + outerInt);
}
}
}
Компилятор онро тағир медиҳад, то пеш аз тартиб додан чизе монанди зеринро тавлид кунад:
public class Outer {
private int outerInt;
public int access$000() {
return outerInt;
}
}
class Inner$Outer {
Outer outer;
public void printOuterInt() {
System.out.println("Outer int = " + outer.access$000());
}
}
Гарчанде ки мантиқӣ синфи дохилӣ як қисми codeи синфи берунӣ аст, он ҳамчун синфи алоҳида тартиб дода мешавад. Аз ин рӯ, ин амалиёт усули пайвасти синтетикиро талаб мекунад, ки бояд аз ҷониби компилятор барои таъмини дастрасӣ ба майдони хусусии синфи берунӣ эҷод карда шавад. Ин JEP мафҳуми лонаҳоро муаррифӣ мекунад, ки дар он ду узви як лона (берунӣ ва дарунӣ дар мисоли мо) дӯстони лона мебошанд. Барои формати файли синф ду атрибутҳои нав муайян карда шудаанд: NestHost ва NestMembers . Ин тағирот барои забонҳои дигаре, ки синфҳои дохилӣ ва bytecodeро дастгирӣ мекунанд, муфид аст. Ин функсия се усули навро барои java.lang.Class муаррифӣ мекунад : Синфи getNestHost () Синф [] getNestMembers () boolean isNestmateOf (Класс) [309] Доимии Синфи файли динамикӣ Ин JEP тамдиди формати файли синфро барои дастгирии формати нав тавсиф мекунад. шакли ҳавзи доимӣ CONSTANT_Dynamic. Идеяи доимии динамикӣ ба оксиморон монанд аст, аммо аслан шумо метавонед онро ҳамчун арзиши ниҳоӣ дар Java 11 тасаввур кунед. Қимати константаҳои ҷамъкунӣ дар вақти компиляция муқаррар карда намешавад (бар хилофи дигар константҳо), балки боркуниро истифода мебарад. усули муайян кардани арзиш дар вақти интиқол. Аз ин рӯ, арзиш динамикӣ аст, аммо азбаски арзиши он танҳо як маротиба муқаррар карда мешавад, он низ доимӣ аст. Ин хусусият пеш аз ҳама ба одамоне нигаронида шудааст, ки забонҳо ва компиляторҳои навро таҳия мекунанд, ки bytecodeҳо ва файлҳои синфро ҳамчун натиҷа барои кор дар JVM тавлид мекунанд. [315] Такмor Aarch64 Intrinsics Ин JEP аз ҷониби ҷомеаи Red Hat пешниҳод шудааст. JVM акнун метавонад дастурҳои махсусгардонидашудаи дар маҷмӯи дастурҳои Arm 64 мавҷудбударо истифода барад.Аз ҷумла, ин кори , методҳо sin ()
ва cos ()
синфи java.lang.Mathlog ()
-ро беҳтар мекунад . [318] Epsilon: Ҷамъоварии партовҳои No-Op Мисли JEP 315 , шумо метавонед ба Red Hat барои ҷорӣ кардани коллектори партовҳои Epsilon ташаккур кунед. Эпсилон ғайриоддӣ аст, ки он воқеан партовҳоро ҷамъ намекунад! Ҳангоми сохтани an objectҳои нав, он дар ҳолати зарурӣ хотира ҷудо мекунад, аммо фазои ишғолкардаи an objectҳои сабтнашударо барқарор намекунад. « Гап дар чист? ", - мепурсед. Маълум мешавад, ки ин «ҷамъоварии партов» ду мақсад дорад:
- Пеш аз ҳама, ин коллектори партовҳо барои таъмини он тарҳрезӣ шудааст, ки алгоритмҳои нави GC аз рӯи таъсири иҷрои онҳо арзёбӣ карда шаванд. Идеяи он аст, ки як барномаи намунавӣ бо Epsilon иҷро карда шавад ва маҷмӯи ченакҳо тавлид шавад. Алгоритми нави ҷамъоварии ахлот фаъол карда мешавад, ҳамон санҷишҳо гузаронида мешаванд ва сипас натиҷаҳо муқоиса карда мешаванд.
- Барои вазифаҳои хеле кӯтоҳ (фикр кунед, ки вазифаҳои бе server дар абр), ки дар он шумо кафолат дода метавонед, ки хотираи ба теппа ҷудошуда зиёд нахоҳед шуд. Ин метавонад иҷроишро тавассути бартараф кардани хароҷоти изофӣ (аз ҷумла ҷамъоварии омори зарурӣ барои қарор додани кор кардани коллектор) дар codeи барнома беҳтар кунад. Агар фазои тӯда тамом шавад, JVM метавонад бо яке аз се роҳ нодуруст танзим карда шавад:
- муқаррарӣ номида мешавад
OutOfMemoryError
. - Аз нав танзимкунии теппаро иҷро кунед
- Диски сахти JVM ноком шуд ва шояд вазифаи дигарро иҷро кунад (масалан, оғоз кардани ислоҳкунанда).
- муқаррарӣ номида мешавад
- API-ро барои тавлид ва истеъмоли маълумот ҳамчун рӯйдодҳо таъмин мекунад
- Механизми буферӣ ва формати дуии маълумотро таъмин мекунад
- Мутобиқсозӣ ва филтр кардани рӯйдодҳоро иҷозат медиҳад
- Таъмин кардани чорабиниҳо барои китобхонаҳои OS, JVM HotSpot ва JDK
GO TO FULL VERSION