Java лбл геофт бтийрембзб
Бмелубодт Фбтбопч,
Чмбдйнйт Гйыечулйк
1. Ччедеойе
2. Йофетоеф, WWW й Йофтбоеф
3. Java, Joe, NEO
4. Java - същл й феиопмпзйс
4.1. Същл Java
4.1.1. Пв®елфобс нпдемш същлб Java
4.1.2. Ртйнйфйчоще фйрщ дбоощи
4.1.3. Рблефщ
4.1.4. Хртбчмсаэйе лпоуфтхлгйй
4.1.5. Йулмаюйфемшоще уйфхбгйй
4.1.6. Неибойън рпфплпч
4.2. Феиопмпзйс Java
4.2.1. Феиопмпзйюеулйк гйлм пвтбвпфлй Java-ртпзтбнн
4.2.2. Java-нбыйоб
4.2.3. Java й веъпрбуопуфш
4.2.4. Java WorkShop
4.3. Учсъш Java у плтхцеойен: плпоощк йоуфтхнеофбтйк
4.3.1. Пвэйе рпмпцеойс
4.3.2. Йъ юезп уфтпйфус зтбжйюеулйк йофетжеку (лпнрпоеофщ й лпофекоетщ)
4.3.3. Лбл птзбойъпчбфш йофетжеку
4.3.4. Упвщфйс
4.3.5. Нефпдщ лмбууб Component, учсъбооще у пвтбвпфлпк упвщфйк
5. Joe - феиопмпзйс учсъщчбойс Java-ртпзтбнн у пв®елфощнй вйъ-
оеу-ртймпцеойснй
6. Ъблмаюеойе
Лпздб зпчптсф й рйыхф п Java, убнпк рпрхмстопк жтбъпк счмсефус
"нйт упыем у хнб". Декуфчйфемшоп, й улптпуфш, й ибтблфет тбур-
тпуфтбоеойс (фбл й ипюефус чурпнойфш мелуйлпо оедбчоезп ртпымп-
зп й улбъбфш п "рпведопн ыеуфчйй") ое йнеаф бобмпзпч. Ртй рпсч-
меойй бмшжб-четуйй ртпдхлфб чщуфтбйчбефус пюетедш об езп мйгео-
ъйтпчбойе (тйу. 1).
Тйу. 1. Пой ипфсф мйгеоъйтпчбфш феиопмпзйа Java (уойнпл удембо
об пуфтпче Счб).
Вефб-четуйс уфбопчйфус йоуфтхнеофпн тебмйъбгйй йожптнбгйпоощи
уйуфен лтхрощи лпнрбойк. Блгйй лпнрбойк, йнеаэйи ртпюоще рпъй-
гйй ч Йофетоеф, тбуфхф, лбл об дтпццби. Чуе втпуймйуш тебмйъп-
чщчбфш WWW-обчйзбфптщ у рпддетцлпк Java й вптафус ъб ртбчп ре-
тедбфш йи ч веурмбфопе йурпмшъпчбойе лбл нпцоп впмшыенх юйумх
лмйеофпч. Йдеф утбцеойе ъб дпма вхдхэезп тщолб, лпофхтщ лпфптп-
зп рплб фпмшлп обнеюбафус, утбцеойе у ртйнеоеойен утедуфч, лп-
фптще у фпюлй ътеойс "ъдтбчпзп вйъоеуб" йобюе лбл дйлйнй й объ-
чбфш оемшъс.
Ч юен ртйюйоб чуепвэезп рпнеыбфемшуфчб й юфп ьфп ъб ртпдхлф,
плпмдпчбчыйк нйт? Рпрщфбенус упчуен лптпфлп чщулбъбфш оелпфптще
уппвтбцеойс рп ретчпнх чпртпух, рпуме юезп ретекден об юйуфп
феиойюеулйе темшущ й упутедпфпюйнус об прйубойй феиопмпзйй й
същлб Java й буупгййтпчбоощи ртпдхлфпч.
Ретупобмшоще лпнршафетщ удембмй йожптнбгйпооще феиопмпзйй
юбуфша нбуупчпк лхмшфхтщ. Ртй нйммйпоощи фйтбцби дбце едйоуф-
чеоощк "лпнршафетощк ийф" урпупвео ртйоеуфй пюеош впмшыйе деош-
зй. Бчфптщ нопзйи рпдпвощи ийфпч, рпнйнп впзбфуфчб, рпмхюбаф
лпмпуубмшопе чмйсойе об мадек, юфп рп ухэеуфчх счмсефус йуфпю-
ойлпн пзтпнопзп дпрпмойфемшопзп пвпзбэеойс. Й фен ое неоее, хце
дпчпмшоп дмйфемшобс йуфптйс тбъчйфйс ретупобмшощи лпнршафетпч
ое ъобмб ойюезп, рпдпвопзп жеопнеох Java. Юфп йънеоймпуш ч нйте
ч рпумедойе зпдщ, рпюенх ьфпф жеопнео уфбм чпънпцео?
Йънеоймус Йофетоеф. По уфбм дпуфхрео нйммйпобн мадек, дбмелйи
пф феиойюеулйи ртпвмен. Юйумп рпмшъпчбфемек Йофетоеф рп рптсдлх
чемйюйощ хце ое пфмйюбефус пф юйумб рпмшъпчбфемек ретупобмшощи
лпнршафетпч й ртпдпмцбеф чътщчппвтбъоп тбуфй. Пдопчтенеооп Йо-
фетоеф пвеуреюйм фблха улптпуфш тбуртпуфтбоеойс опчйопл йожпт-
нбгйпоощи феиопмпзйк, лпфптха ое нпзмй й ойлпздб ое унпзхф дбфш
фтбдйгйпооще лбобмщ увщфб. Чтенс уртеуупчбмпуш. Ч Йофетоефе,
прпъдбч вхлчбмшоп об деош, лпнршафетобс лпнрбойс, дбце лтхробс,
тйулхеф уетшеъоп пумбвйфш учпй рпъйгйй утбъх чп чуен нйте.
2. Йофетоеф, WWW й Йофтбоеф
Йожптнбгйпооще ретезтхълй - ибтблфетобс юетфб обыезп чтенеой.
Упъдбощ нпэоще неибойънщ, пвеуреюйчбаэйе ртпйъчпдуфчп пзтпнопзп
лпмйюеуфчб йожптнбгйй. Ухэеуфчеооп неошые удембоп дмс пвмезюе-
ойс ее рпмхюеойс й йурпмшъпчбойс.
Фйрйюопк счмсефус уйфхбгйс, лпздб йойгйбфйчб ртйобдмецйф рпу-
фбчэйлх, б ое рпфтевйфема йожптнбгйй. Рпуфбчэйл рп пртедемеооп-
нх рпчпдх упъдбеф йожптнбгйа й обртбчмсеф ее чуен, лфп, рп езп
ноеойа, ч оек охцдбефус (тйу. 2).
Тйу. 2. Дпуфбчлб йожптнбгйй рп йойгйбфйче рпуфбчэйлб
Фбл тбвпфбаф утедуфчб нбуупчпк йожптнбгйй, йъдбфемшуфчб, тел-
мбноще бзеофуфчб. Фбл тбвпфбеф ьмелфтпообс рпюфб. Ч впмшыйоуфче
умхюбеч рпфтевйфема ьфб йожптнбгйс, нпцеф вщфш, й охцоб, оп ое
ч дбоощк нпнеоф, ое уекюбу. Рпфтевйфемш чщохцдео бтийчйтпчбфш
рпмхюеооха йожптнбгйа. Ртй ьфпн ч мхюыен умхюбе чемйлб четпсф-
опуфш, юфп л нпнеофх, лпздб йожптнбгйс декуфчйфемшоп рпобдпвйф-
ус, поб рпфетсеф блфхбмшопуфш. Пвщюоп це х рпфтевйфемс ртпуфп
облбрмйчбафус зптщ нхуптб, ч лпфптпн пфщулбфш оеюфп охцопе рпю-
фй оечпънпцоп.
Юфпвщ йожптнбгйс вщмб блфхбмшопк дмс рпфтевйфемс, поб дпмцоб
дпуфбчмсфшус л оенх рп ъбртпух - ч фпюопуфй фпздб, лпздб ч оек
чпъойлмб оепвипдйнпуфш. Лтпне фпзп, рпуфбчэйл дпмцео упитбосфш
чпънпцопуфш хртбчмеойс йожптнбгйек, по дпмцео ое фпмшлп упъдб-
чбфш ее, оп й чпчтенс пвопчмсфш й хойюфпцбфш.
Геофтбмйъпчбооще лпнршафетоще уйуфенщ, дпнйойтпчбчыйе еэе 10
меф объбд, рпъчпмсмй рпмшъпчбфемсн утбчойфемшоп мезлп обипдйфш
йожптнбгйа ч претбфйчопн тецйне, пдоблп пой ъбфтхдосмй хртбчме-
ойе йожптнбгйек, рпулпмшлх ее йуфпюойлй, лбл ртбчймп, тбъоптпд-
ощ й феттйфптйбмшоп тбъоеуеощ. Еэе пдйо чбцощк оедпуфбфпл геоф-
тбмйъпчбоощи уйуфен - йи умпцопуфш й дптпзпчйъоб (тйу. 3).
Тйу. 3. Чъбйнпдекуфчйе у геофтбмйъпчбоопк лпнршафетопк уйуфенпк
Рпдбчмсаэенх впмшыйоуфчх тпууйкулйи птзбойъбгйк пой ртпуфп ое
рп лбтнбох.
Уефй ретупобмшощи лпнршафетпч ухэеуфчеооп деыечме геофтбмйъп-
чбоощи уйуфен, пой пуфбчмсаф ъб рпуфбчэйлпн оепвипдйнха учпвпдх
хртбчмеойс йожптнбгйек, пдоблп рпфтевйфемсн ртйипдйфус йулбфш
оепвипдйнще дбооще об нопцеуфче нбыйо, утедй впмшыпзп юйумб
ртймпцеойк (тйу. 4).
Тйу. 4. Рпмхюеойе йожптнбгйй йъ уефй ретупобмшощи лпнршафетпч
Тсдпчпнх рпмшъпчбфема тбвпфбфш ч фблпк тбъоптпдопк ртйлмбдопк
утеде лтбкое оехдпвоп.
Урпупв тбътеыеойс хлбъбоощи ртпвмен, л лпфптпнх ртйвезбаф чедх-
эйе лпнрбойй, упуфпйф ч рпуфтпеойй йожптнбгйпоопк уфтхлфхтщ пт-
збойъбгйй рп пвтбъх й рпдпвйа Йофетоеф, у Web-уетчйупн ч лб-
юеуфче лпогерфхбмшопк пуопчщ (тйу. 5).
Тйу. 5. Хойчетубмшощк лмйеоф Web-уетчйуб
Чпънпцопуфш итбоеойс дбоощи тбъмйюощи фйрпч (фелуф, зтбжйлб,
бхдйп, чйдеп) ч упюефбойй у неибойънбнй учсъщчбойс йожптнбгйй,
тбурпмпцеоопк ч тбъощи хъмби лпнршафетопк уефй, рпъчпмсаф тбуу-
тедпфбюйчбфш йожптнбгйа ч уппфчефуфчйй у еуфеуфчеоощн рптсдлпн
ее упъдбойс й рпфтевмеойс, пухэеуфчмсфш едйоппвтбъощк дпуфхр,
пфртбчмссуш пф оевпмшыпзп юйумб йъчеуфощи "лптоек". Фен убнщн
рпуфбчэйл нпцеф ьжжелфйчоп зпфпчйфш й лпофтпмйтпчбфш йожптнб-
гйа, б рпфтевйфемш ч упуфпсойй веъ фтхдб обкфй оепвипдйнще дбо-
още йнеооп фпздб, лпздб пой уфбмй охцощ.
Утедуфчб Web, рпнйнп учсъщчбойс тбуртедемеоощи дбоощи, пух-
эеуфчмсаф еэе пдох пюеош чбцоха жхолгйа. Пой рпъчпмсаф тбуунбф-
тйчбфш йожптнбгйа у охцопк уфереоша дефбмйъбгйй, юфп ухэеуфчео-
оп хртпэбеф бобмйъ впмшыйи пв®енпч дбоощи. Нпцоп вщуфтп пфпв-
тбфш убнпе йофетеуопе, б ъбфен йъхюйфш чщвтбоощк нбфетйбм чп
чуеи рпдтпвопуфси.
Фблйн пвтбъпн, Web-уетчетщ й Web-обчйзбфптщ нпзхф й дпмцощ йу-
рпмшъпчбфшус ое фпмшлп ч "нйтпчпн нбуыфбве". Web - ьфп йожтбуф-
тхлфхтощк уетчйу, оепвипдйнщк лбцдпк птзбойъбгйй уп улпмшлп-ой-
вхдш ъбнефощнй йожптнбгйпоощнй рпфплбнй.
Ч фп це чтенс, Web-уетчйух ртйухэй й пртедемеооще оедпуфбфлй,
чщфелбаэйе йъ пфухфуфчйс упуфпсойк ч HTTP-ртпфплпме. Чп-ретчщи,
лмйеоф рп ухэеуфчх мйыео утедуфч хртбчмеойс чоеыойн ртедуфбчме-
ойен пв®елфпч об ртпунбфтйчбенпк WWW-уфтбойге (едйоуфчеоопе,
юфп по нпцеф удембфш, ьфп унеойфш WWW-обчйзбфпт).
Чп-чфптщи, Web-уфтбойгщ уфбфйюощ. Ртй йурпмшъпчбойй ртпфплпмб
HTTP, об лмйеофулха уйуфенх ретедбафус фпмшлп рбууйчоще дбооще,
оп ое нефпдщ пв®елфпч. Йъ пвэйи уппвтбцеойк пюечйдоб пзтбойюео-
опуфш рпдпвопзп рпдипдб. Дбоощк оедпуфбфпл, тбъхнеефус, учсъбо
у ретчщн. Пв®елф убн дпмцео ъобфш, лбл уевс рплбъщчбфш - фпюоее
зпчптс, по дпмцео ьфп чщсуойфш, ртпбобмйъйтпчбч лмйеофулпе пл-
тхцеойе.
Ч-фтефшйи, Web-уетчйу пвмбдбеф чеушнб пзтбойюеоощнй йофетблфйч-
ощнй чпънпцопуфснй, лпфптще учпдсфус л ъбрпмоеойа рпмшъпчбфемен
юйуфп фелуфпчщи жптн у рпумедхаэек пфртбчлпк об уетчет. Фблбс
жптнб пвэеойс чрпмое хуфтбйчбмб рпмшъпчбфемек фетнйобмпч ЕУ ЬЧН
меф 15 объбд. Уекюбу ее счоп оедпуфбфпюоп.
Java-феиопмпзйс рпъчпмсеф хуфтбойфш чуе пфнеюеооще оедпуфбфлй.
Лбл йнеооп - вхдеф суоп йъ рпумедхаэезп йъмпцеойс. Ч теъхмшфбфе
Web-уетчйу, й веъ фпзп йнечыйк пзтпноха рпрхмстопуфш, рпмхюйм
лбл вщ опчщк йнрхмшу. Ьфпф ьлуртеуу рпоеуус чретед у хдчпеоопк
улптпуфша, хчмелбс ъб упвпк й Java.
Ч хълпн унщуме умпчб Java - ьфп пв®елфоп-птйеофйтпчбоощк същл,
обрпнйобаэйк C++, оп впмее ртпуфпк дмс пучпеойс й йурпмшъпчб-
ойс. Ч впмее ыйтплпн унщуме Java - ьфп гембс феиопмпзйс ртпз-
тбннйтпчбойс, йъобюбмшоп тбууюйфбообс об йофезтбгйа у Web-ует-
чйупн, фп еуфш об йурпмшъпчбойе ч уефечпк утеде, Рпулпмшлх Web-
обчйзбфптщ ухэеуфчхаф ртблфйюеулй дмс чуеи бррбтбфоп-ртпзтбнн-
ощи рмбфжптн, Java-утедб дпмцоб вщфш лбл нпцоп впмее нпвймшопк,
ч йдебме рпмопуфша оеъбчйуйнпк пф рмбфжптнщ.
У гемша теыеойс ретеюйумеоощи ртпвмен вщмй ртйосфщ, рпнйнп йо-
фезтбгйй у Web-обчйзбфптпн, дчб дтхзйи чбцоекыйи рпуфхмбфб.
- Вщмб урегйжйгйтпчбоб чйтфхбмшобс Java-нбыйоб, об лпфптпк
дпмцощ чщрпмосфшус (йофетртефйтпчбфшус) Java-ртпзтбннщ. Пртеде-
меощ бтийфелфхтб, ртедуфбчмеойе ьменеофпч дбоощи й уйуфенб лп-
нбод Java-нбыйощ. Йуипдоще Java-фелуфщ фтбоумйтхафус ч лпдщ
ьфпк нбыйощ. Фен убнщн, ртй рпсчмеойй опчпк бррбтбфоп-ртпзтбнн-
опк рмбфжптнщ ч рптфйтпчбойй вхдеф охцдбфшус фпмшлп Java-нбый-
об; чуе ртпзтбннщ, обрйубооще об Java, рпкдхф веъ йънеоеойк.
- Пртедемеоп, юфп ртй тедблфйтпчбойй чоеыойи учсъек Java-ртпз-
тбннщ й ртй тбвпфе Web-обчйзбфптб ртпътбюощн дмс рпмшъпчбфемс
пвтбъпн нпцеф пухэеуфчмсфшус рпйул оепвипдйнщи пв®елфпч ое
фпмшлп об мплбмшопк нбыйое, оп й об дтхзйи лпнршафетби, дпуфхр-
ощи рп уефй (ч юбуфопуфй, об WWW-уетчете). Обкдеооще пв®елфщ
ъбзтхцбафус, б йи нефпдщ чщрпмосафус ъбфен об нбыйое рпмшъпчб-
фемс.
Оеупноеооп, нецдх дчхнс ужптнхмйтпчбоощнй рпмпцеойснй ухэеуфчх-
еф феуобс учсъш. Ч лпнрймйтхенпк утеде фтхдоп дйуфбогйтпчбфшус
пф бррбтбфощи пупвеоопуфек лпнршафетб, лбл фтхдоп (ипфс й нпц-
оп) тебмйъпчбфш ртпътбюоха дйобнйюеулха ъбзтхълх рп уефй. У
дтхзпк уфптпощ, ртйен пв®елфпч йъчое фтевхеф рпчщыеоопк пуфп-
тпцопуфй ртй тбвпфе у ойнй, б, ъобюйф, й уп чуенй Java-ртпзтбн-
нбнй. Ртйойнбфш оепвипдйнще нетщ веъпрбуопуфй ртпэе чуезп ч йо-
фетртефйтхенпк, б ое лпнрймйтхенпк утеде. Чппвэе, нпвймшопуфш,
дйобнйън й веъпрбуопуфш - урхфойлй йофетртефбфптб, б ое лпнрй-
мсфптб.
Ртйосфще теыеойс удембмй Java-утедх йдебмшощн утедуфчпн тбътб-
впфлй лмйеофулйи лпнрпоеофпч Web-уйуфен. Пупвп пфнефйн ртпътбю-
оха дмс рпмшъпчбфемс дйобнйюеулха ъбзтхълх пв®елфпч рп уефй. Йъ
ьфпзп чщфелбеф фблпе чбцоекыее дпуфпйоуфчп, лбл охмечбс уфпй-
нпуфш бднйойуфтйтпчбойс лмйеофулйи уйуфен, обрйубоощи об Java.
Дпуфбфпюоп пвопчйфш четуйа пв®елфб об уетчете, рпуме юезп лмй-
еоф бчфпнбфйюеулй рпмхюйф йнеооп ее, б ое уфбтщк чбтйбоф. Веъ
ьфпзп тебмшобс тбвпфб у тбъчйфпк уефечпк йожтбуфтхлфхтпк ртбл-
фйюеулй оечпънпцоб. У дтхзпк уфптпощ, ртй обмйюйй дйобнйюеулпк
ъбзтхълй декуфчйфемшоп чпънпцоп рпсчмеойе хуфтпкуфч лмбууб
Java-фетнйобмпч, йъобюбмшоп упдетцбэйи фпмшлп WWW-обчйзбфпт, б
чуе пуфбмшопе (й ртпзтбннщ, й дбооще) рпмхюбаэйи рп уефй.
Ъдеуш хнеуфоп пфнефйфш ъбнеюбфемшоха фпюопуфш ч чщвпте пуопчощи
рпущмпл ртпелфб Java. Йъ нйойнхнб ртедрпмпцеойк чщфелбеф нблуй-
нхн опчщи чпънпцопуфек ртй упитбоеойй ртблфйюопуфй тебмйъбгйй.
Ч фп це чтенс, йофезтбгйс у WWW-обчйзбфптпн й йофетртефйтхенбс
ртйтпдб Java-утедщ уфбчсф чрпмое пртедемеооще тбнлй дмс тебмш-
опзп йурпмшъпчбойс Java-ртпзтбнн (ипфс, лпоеюоп це, същл Java
ое неоее хойчетубмео, юен, улбцен, C++). Обртйнет, йъчеуфоп,
юфп йофетртефбгйс, рп утбчоеойа у ртснщн чщрпмоеойен, ртйнетоп
об рпмфптб рптсдлб недмеооее. Фтхдоп улбъбфш, обулпмшлп нпзхф
хмхюыйфш рпмпцеойе лпнрймсгйс "об мефх" й йурпмшъпчбойе урегйб-
мйъйтпчбоощи Java-ртпгеууптпч, оп рплб йурпмшъпчбойе Java об
уетчетопк уфптпое ртедуфбчмсефус ртпвменбфйюощн.
Дбмее, ипфс феиопмпзйс Йофтбоеф, пуопчбообс об йурпмшъпчбойй
Web-уетчйуб ч лбюеуфче йожптнбгйпоопк пуопчщ птзбойъбгйй, счмс-
ефус пзтпнощн ыбзпн чретед, ухэеуфчхаф й дтхзйе уетчйущ, лбл
хобумедпчбооще, фбл й упчтенеооще (обртйнет, темсгйпооще УХВД),
лпфптще пвсъбфемшоп дпмцощ чипдйфш ч упуфбч лптрптбфйчопк уйу-
фенщ. Еумй чус учсъш нецдх лмйеофбнй й хрпнсохфщнй уетчетбнй
вхдеф пухэеуфчмсфшус юетеъ уетчет WWW, рпумедойк уфбоеф хълйн
неуфпн, б теыеойс Йофтбоеф тйулхаф мйыйфшус фблпзп чбцоекыезп
дпуфпйоуфчб, лбл нбуыфбвйтхенпуфш. Ъобюйф, оепвипдйнб ртснбс
учсъш нецдх лмйеофулйнй уйуфенбнй, обрйубоощнй об същле Java, й
ртпйъчпмшощнй уетчйубнй (тйу. 6).
Тйу. 6. Ртснбс учсъш нецдх Java-лмйеофбнй й лптрптбфйчощнй ует-
четбнй.
Лбл тебмйъпчбфш фблха учсъш?
Ч пвэен чйде пфчеф пюечйдео - охцощ утедуфчб дмс рпмопгеоопк
йофезтбгйй Java ч тбуртедемеооха пв®елфоха утедх. Об уетчетопк
уфптпое лпнрбойс Sun Microsystems йнееф уппфчефуфчхаэха феиоп-
мпзйа - NEO (NEtworked Objects, уефечще пв®елфщ). Феиопмпзйс
NEO хдпчмефчптсеф урегйжйлбгйсн CORBA (Common Object Request
Broker Architecture), счмсаэйнус ртпнщымеоощн уфбодбтфпн. Ртй
тебмйъбгйй лптрптбфйчощи йожптнбгйпоощи уйуфен у йурпмшъпчбойен
NEO обйвпмее еуфеуфчеоощн ртедуфбчмсефус йурпмшъпчбойе фтеих-
тпчоечпк бтийфелфхтщ у уетчетбнй ртймпцеойк, рпуфтпеоощнй об
пв®елфощи ртйогйрби, об чфптпн хтпчое й у вбъпчщнй й хобумедп-
чбоощнй уетчетбнй об фтефшен хтпчое (тйу. 7).
Тйу. 7. Фтеихтпчоечбс бтийфелфхтб лптрптбфйчопк йожптнбгйпоопк
уйуфенщ.
Л упцемеойа, уфпмш пвэйк пфчеф ойлбл ое рпнпзбеф пухэеуфчмсфш
ртснха учсъш нецдх Java-лмйеофпн й NEO-уетчетпн. Лпоеюоп, нпцоп
чпурпмшъпчбфшус уфбодбтфощнй утедуфчбнй ртпзтбннйтпчбойс ч уе-
фечпк утеде (б Java дпрхулбеф йурпмшъпчбойе вйвмйпфел, обрйубо-
ощи об C/C++, тбчоп лбл й чуфбчлх нбыйоощи лпдпч), оп еумй ьфп
вщмп вщ едйоуфчеоопк чпънпцопуфша, Java тйулпчбмб пуфбфшус об
хтпчое "пцйчмсмпл" дмс MS-Windows. Ч лпоге нбтфб 1996 зпдб лпн-
рбойс SunSoft пв®счймб п рпсчмеойй опчпзп ртпдхлфб у йнеоен
Joe, лбл тбъ й ртедобъобюеоопзп дмс ухэеуфчеоопзп пвмезюеойс
чуфтбйчбойс Java-лмйеофпч ч йожптнбгйпооще уйуфенщ Йофтбоеф,
рпуфтпеооще ч фтеихтпчоечпк бтийфелфхте у йурпмшъпчбойен утедщ
NEO (тйу. 8).
Тйу. 8. Тбуртедемеойе тпмек нецдх Java, Joe й NEO.
Фблйн пвтбъпн, умпцймбуш рпмобс й йъхнйфемшоп лтбуйчбс лбтфйоб
птзбойъбгйй упчтенеоощи Йофтбоеф-уйуфен. Ч дбоопк уфбфше нщ
хдемйн пуопчопе чойнбойе феиопмпзйй Java. Дбмее вхдеф лтбфлп
тбуунпфтеощ чпънпцопуфй, ртедпуфбчмсенще уйуфенпк Joe.
4. Java - същл й феиопмпзйс
Ртй прйубойй същлб Java вхдеф ртедрпмбзбфшус, юфп юйфбфемш, ип-
фс вщ ч пвэйи юетфби, ъоблпн у същлпн C++.
4.1.1. Пв®елфобс нпдемш същлб Java
Лпздб зпчптсф пв пв®елфоп-птйеофйтпчбоопн същле ртпзтбннйтпчб-
ойс, ртедрпмбзбаф рпддетцлх фтеи неибойънпч:
- йолбрухмсгйс
- обумедпчбойе
- рпмйнптжйън.
Йолбрухмсгйс й обумедпчбойе ч същле Java тебмйъхафус у рпнпэша
рпосфйс лмбууб.
Рпосфйе лмбууб ч същлби Java й C++ пюеош вмйълй. Лмбуу счмсефус
ыбвмпопн дмс упъдбойс пв®елфпч; по нпцеф упдетцбфш дбооще й не-
фпдщ. Ртйчеден ртйнет лмбууб, прйущчбаэезп фпюлй ч дчхнетопн
ртпуфтбоуфче (ъдеуш й дбмее опнетб уфтпл йурпмшъхафус дмс рпу-
медхаэйи рпсуоеойк й ое счмсафус юбуфша Java-ртпзтбнн).
1 class Point extends Object {
2 private double x;
3 private double y;
4 Point (double x, double y) {
5 this.x = x;
6 this.y = y;
7 }
8 Point () {
9 this (0.0, 0.0);
10 }
11 public void setX (double x) {
12 this.x = x;
13 }
14 public void setY (double y) {
15 this.y = y;
16 }
. . .
17 }
Ч същле Java оемшъс пфтщчбфш пртедемеойе нефпдб (жхолгйй) пф
прйубойс ъбзпмпчлб. Уйофблуйюеулбс лпоуфтхлгйс class рпмопуфша
члмаюбеф ч уевс чуа йожптнбгйа п лмбууе. Ч юбуфопуфй, тебмйъб-
гйй нефпдпч пвсъбощ упдетцбфшус чохфтй ьфпк лпоуфтхлгйй.
Дмс пвпъобюеойс обумедпчбойс йурпмшъхефус лмаюечпе умпчп
extends (уфтплб 1). Лмбуу Object - ьфп лптеош детечб обумедпчб-
ойс. Ч Java ое вщчбеф лмбуупч-"уйтпф": х чуеи лмбуупч, лтпне
Object, еуфш ртедыеуфчеоойл. Рпдтпвоее обумедпчбойе й ртедпрте-
демеооще лмбуущ вхдхф тбуунпфтеощ дбмее.
Тецйнщ дпуфхрб л ьменеофбн лмбууб (private, protected, public)
фе це, юфп й ч C++, ъб пдойн чбцощн йулмаюеойен. Еумй тецйн
дпуфхрб прхэео, ртедрпмбзбефус, юфп уппфчефуфчхаэйк ьменеоф
дпуфхрео ч ртедемби рблефб (ун. дбмее).
Ч уфтпле 9 ртйчедео ртйнет счопзп чщъпчб пдопзп лпоуфтхлфптб йъ
дтхзпзп.
Ртпюйе ртйчедеооще чщые уфтплй ое охцдбафус ч рпсуоеойси лтпне
пдопк - пфухфуфчхаэек. Ч същле Java ое вщчбеф деуфтхлфптпч.
Ртйюйоб ч фпн, юфп хртбчмеойе рбнсфша бчфпнбфйъйтпчбоп (ч жпоп-
чпн тецйне тбвпфбеф увптэйл нхуптб). Дмс чщучпвпцдеойс ртпюйи
теухтупч, буупгййтпчбоощи у пв®елфпн, умхцйф урегйбмшощк нефпд
finalize. Ьфпф нефпд чщъщчбефус увптэйлпн нхуптб ч нпнеоф хфй-
мйъбгйй рбнсфй, ъбойнбчыекус пв®елфпн.
Лмаюечпе умпчп this (ун., обртйнет, уфтплй 5 й 9) йурпмшъхефус
дмс уущмлй об убнпзп уевс. Бобмпзйюоха тпмш рп пфопыеойа л тп-
дйфемшулпнх лмбуух йзтбеф умпчп super:
1 class ThreePoint extends Point {
2 protected double z;
3 ThreePoint () {
4 super ();
5 z = 0.0;
6 }
7 ThreePoint (double x, double y, double z) {
8 super (x, y);
9 this.z = z;
10 }
11 }
Ч уфтплби 4 й 8 чщъщчбафус лпоуфтхлфптщ тпдйфемшулпзп лмбууб.
Ртйчедеооще ртйнетщ рплбъщчбаф, юфп ч същле Java, лбл й C++,
нефпдщ нпзхф вщфш ретезтхцеоощнй, фп еуфш рпд пдойн йнеоен нп-
зхф жйзхтйтпчбфш тбъоще нефпдщ у тбъощн обвптпн рбтбнефтпч.
Лбл й C++, у рпнэша лмаюечпзп умпчб static нпцоп пртедемйфш
дбооще й нефпдщ, лпфптще счмсафус пвэйнй дмс чуеи пв®елфпч
лмбууб. (Пфнефйн рпрхфоп, юфп жхолгйк, ое ртйобдмецбэйи лблпнх-
мйвп лмбуух, ч същле Java ое вщчбеф.) Умедхаэйк ртйнет упдетцйф
жтбзнеофщ уфбодбтфопзп рблефб java.lang.
1 public final
2 class Character extends Object {
3 public static final int MAX_RADIX = 36;
4 static char downCase[];
5 static {
6 char down[] = new char[256];
7 for (int i = 0 ; i < 256 ; i++) {
8 down[i] = (char) i;
9 }
10 for (int lower = 'a' ; lower <= 'z' ; lower++) {
11 int upper = (lower + ('A' - 'a'));
12 down[upper] = (char)lower;
13 }
14 for (int lower = 0xE0; lower <= 0xFE; lower++) {
15 if (lower != 0xF7) { // multiply and divide
16 int upper = (lower + ('A' - 'a'));
17 down[upper] = (char)lower;
18 }
19 }
20 downCase = down;
21 }
22 public static boolean isLowerCase(char ch) {
23 return (upCase[ch] != ch);
24 }
25 }
Ртплпннеофйтхен ьфпф ртйнет у фпюлй ътеойс пфмйюйк Java пф C++.
Уфтплй у 5 рп 21 ртедуфбчмсаф упвпк йойгйбмйъбгйа уфбфйюеулйи
дбоощи лмбууб, лпфптбс пухэеуфчмсефус ч нпнеоф ъбзтхълй лмбууб
ч Java-нбыйох. Рп ухфй ьфпф лпд йзтбеф тпмш лпоуфтхлфптб лмбууб
Character.
Ч уфтплби 1 й 3 чуфтеюбефус лмаюечпе умпчп final. Ч уфтпле 1
ьфп умпчп пвпъобюбеф ъбртеф об обумедпчбойе пф лмбууб
Character. Ч уфтпле 3 езп унщум бобмпзйюео прйубфема const ч
C++.
Еумй умпчп final йурпмшъпчбоп ч ъбзпмпчле нефпдб, фп дбоощк не-
фпд ое нпцеф вщфш ретепртедемео ч лмбууби-обумедойлби.
Лбл й ч C++, ч същле Java лмбуущ нпзхф вщфш бвуфтблфощнй, фп
еуфш ое дп лпогб лполтефйъйтпчбоощнй. Ьфп пъобюбеф, юфп ч лмбу-
уе прйубощ нефпдщ, пртедемеойс лпфптщи пфухфуфчхаф. Фблйе нефп-
дщ (лбл й убн лмбуу) дпмцощ уобвцбфшус прйубфемен abstract.
Бвуфтблфоще нефпдщ дпмцощ лполтефйъйтпчбфшус ч ртпйъчпдощи
лмбууби.
Ч същле Java йнеефус ртедпртедемеообс йетбтийс лмбуупч, упдет-
цбэйиус ч рблефе java.lang. Об тйу. 9 ьфб йетбтийс ртедуфбчмеоб
зтбжйюеулй.
Тйу. 9. Йетбтийс ртедпртедемеоощи лмбуупч същлб Java.
Ч ьфпк йетбтийй оеулпмшлп пупвослпн уфпйф лмбуу Class. Ртпзтбн-
нйуф ое нпцеф упъдбфш пв®елф лмбууб Class (ртбчдб, ухэеуфчхаф й
дтхзйе лмбуущ у ьфйн учпкуфчпн). Уущмлй об пв®лф лмбууб Class
нпцоп рпмхюйфш у рпнпэша нефпдб getClass, пртедемеоопзп дмс пв-
®елфпч лмбууб Object.
Пв®елфщ лмбууб Class йурпмшъхафус дмс рпмхюеойс чп чтенс чщрпм-
оеойе йожптнбгйй п "лмбуупчщи" учпкуфчби пв®елфб. Л пв®елфбн
лмбууб Class, рпнйнп ртпюйи, ртйнеойнщ умедхаэйе нефпдщ:
1 public native String getName();
2 public native Class getSuperclass();
3 public static native Class forName(String className)
throws ClassNotFoundException;
Нефпд forName рпъчпмсеф рпмхюйфш уущмлх об лмбуу рп езп йнеой.
Прйубфемш native учйдефемшуфчхеф п фпн, юфп нефпд тебмйъхефус
утедуфчбнй, чоеыойнй рп пфопыеойа л Java-уйуфене (обртйнет, рй-
ыефус об същле C).
Нпдемш обумедпчбойс ч същле Java ухэеуфчеооп пфмйюбефус пф нп-
демй C++. Чп-ретчщи, ч Java оеф нопцеуфчеоопзп обумедпчбойс.
Чп-чфптщи, ч същле ртедхунпфтеощ утедуфчб дмс ъбртефб дбмшоек-
ыезп обумедпчбойс (лмаюечпе умпчп final ретед пртедемеойен
лмбууб). Ч-фтефшйи, ч същле Java ртйухфуфчхеф опчпе рп пфопые-
ойа л C++ рпосфйе йофетжекуб.
Йофетжеку ртедуфбчмсеф упвпк обвпт прйубойк нефпдпч. Ртйнет:
public interface Verbose {
public void drawOn (Graphics g);
public void printOn (OutputStream os);
}
public class Star extends Polygon implements Verbose {
public void drawOn (Graphics g) {
// Лполтефобс тебмйъбгйс пфтйупчлй
}
public void printOn (OutputStream os) {
// Лполтефобс тебмйъбгйс реюбфй
}
}
public class Text extends StringBuffer implements Verbose {
public void drawOn (Graphics g) {
// Лполтефобс тебмйъбгйс пфтйупчлй
}
public void printOn (OutputStream os) {
// Лполтефобс тебмйъбгйс реюбфй
}
}
public class Blackboard extends Canvas {
public void drawVerbose (Verbose d) {
Graphics g = getGraphics ();
d.drawOn (g);
}
}
Йофетжеку Verbose упдетцйф дчб нефпдб. Ретчщк ртедобъобюео дмс
тйупчбойс ч зтбжйюеулпн лпофелуфе, чфптпк - дмс тбуреюбфлй ч
чщипдопк рпфпл.
Лмбуу Star ртедуфчмсеф упвпк рпдлмбуу нопзпхзпмшойлпч
(Polygon). Рпнйнп ртпюезп, нщ ипфйн тйупчбфш пв®елфщ ьфпзп
лмбууб об дпуле (Blackboard) й чщчпдйфш йи прйубойе ч жбкм.
Дмс пв®елфпч лмбууб Text нщ ипфйн йнефш чпънпцопуфш обюетфбфш
фелуф об дпуле й чщчпдйфш езп ч жбкм.
Лмбуу Blackboard - обумедойл лмбууб Canvas, урегйбмшоп ртедобъ-
обюеоопзп дмс тйупчбойс. Лбл нщ чйдйн, ьфпф лмбуу у рпнпэша
едйоуфчеоопзп нефпдб уртбчмсефус у тйупчбойен пв®елфпч, ое йне-
аэйи пвэезп ртедлб (лтпне лмбууб Object).
Фблйн пвтбъпн, у рпнпэша йофетжекупч нпцоп лпнреоуйтпчбфш пф-
ухфуфчйе нопцеуфчеоопзп обумедпчбойс. Ч лпофелуфе обумедпчбойс
йофетжеку нпцоп тбуунбфтйчбфш лбл бвуфтблфощк лмбуу, ое упдет-
цбэйк дбоощи.
4.1.1.3. Цйъоеоощк гйлм пв®елфб
Пв®елфщ упъдбафус у рпнпэша претбфптб new. Йойгйбмйъбгйс пв®ел-
фб ртпйъчпдйфус у рпнпэша уппфчефуфчхаэезп лпоуфтхлфптб. Ьфй
претбгйй тбъдемйфш оемшъс - ъб new умедхеф лпоуфтхлфпт. Ртйнет.
Point myPoint = new Point ();
Дтхзйи урпупвпч упъдбойс пв®елфпч (лтпне претбфптб new) същл
Java ое ртедпуфбчмсеф.
Пв®елф ухэеуфчхеф дп феи рпт, рплб об оезп еуфш уущмлй (фп еуфш
рплб по ртснп ймй лпучеооп дпуфхрео ипфс вщ йъ пдопк ретенео-
опк). Ч същле пфухфуфчхаф счоще утедуфчб хдбмеойс пв®елфпч.
Рпуме фпзп, лбл пв®елф уфбм оедпуфхрео, по плбъщчбефус лбодйдб-
фпн дмс хфймйъбгйй увптэйлпн нхуптб.
Пв®елф нпцеф уфбфш оедпуфхрощн, еумй итбойчыек езп ретенеоопк
ртйучпеоп опчпе ъобюеойе ймй еумй ьфб ретенеообс ретеуфбмб вщфш
дпуфхропк (ртпйъпыем чщипд йъ вмплб). Ртйнет.
Point p = new Point (100.0, 100.0);
. . .
p = new Point (1.0, 1.0);
// Об фпюлх у лпптдйобфбнй (100, 100) уущмпл впмшые оеф
{
String s = new String ("Local string");
System.out.println (s);
}
// Об уфтплх "Local string" уущмпл впмшые оеф
Ч нпнеоф хфймйъбгйй пв®елфб увптэйлпн нхуптб вхдеф чщъчбо нефпд
finalize. Йъ-ъб фпзп, юфп увптэйл нхуптб тбвпфбеф ч жпопчпн те-
цйне, чщъпч finalize счмсефус буйоитпоощн.
4.1.2. Ртйнйфйчоще фйрщ дбоощи
Ч същле Java ухэеуфчхеф обвпт чуфтпеоощи фйрпч дбоощи, лпфптще
ое счмсафус пв®елфбнй. Йи ое фбл нопзп.
Ртедуфбчмеойе юйуем ч същле Java жйлуйтпчбоп й, фен убнщн, ое
ъбчйуйф пф бррбтбфопк рмбфжптнщ.
- гемще юйумб:
- - byte - 8 вйф,
- - short - 16 вйф,
- - int - 32 вйфб,
- - long - 64 вйфб.
Чуе юйумб уп ъоблпн, урегйжйлбфпт unsigned ч същле пфухфуфчхеф.
- юйумб у рмбчбаэек фпюлпк:
- - float - 32 вйфб,
- - double - 64 вйфб.
Ртедуфбчмеойе дпмцоп уппфчефуфчпчбфш уфбодбтфх IEEE 754.
- char
Ъобюеойе фйрб char еуфш 16-тбътсдопе юйумп веъ ъоблб (дйбрбъпо
0-65535). Лпдйтпчлб уппфчефуфчхеф уфбодбтфх Unicode. Ч теъхмш-
фбфе у убнпзп обюбмб ъблмбдщчбефус ъдптпчбс пуопчб дмс теыеойс
ртпвменщ мплбмйъбгйй Java-ртпзтбнн.
- boolean
Упдетцйф ъобюеойс true й false, лпфптще ое нпзхф вщфш ртепвтб-
ъпчбощ ч дтхзпк фйр.
Ч същле Java, тбъхнеефус, ртйухфуфчхаф нбууйчщ. Ьфй нбууйчщ фй-
рйъйтпчбощ. Делмбтбгйс
Point myPoints[];
прйущчбеф ретенеооха myPoints лбл нбууйч пв®елфпч фйрб Point.
Ъбчеуфй нбууйч пртедемеоопзп тбънетб нпцоп у рпнпэша йоуфтхлгйй
чйдб
myPoints = new Point[10];
Ъобюеойс ьменеофпч нбууйчб ртй ьфпн хуфбобчмйчбафус тбчощнй
урегйбмшопк чемйюйое null.
Тбънет нбууйчб нпцеф вщфш рпмхюео чп чтенс чщрпмоеойс ртпзтбн-
нщ:
howMany = myPoints.length;
Дтхзйи уфтхлфхтощи фйрпч (ое счмсаэйиус пв®елфбнй) ч същле Java
оеф, фп еуфш оеф уфтхлфхт, пв®едйоеойк й ф.р. Оеф ч Java й хлб-
ъбфемек.
Пфнефйн, юфп уфтплй уйнчпмпч счмсафус пв®елфбнй фйрб String
(фелуфпчще лпоуфбофщ) ймй StringBuffer (йънеосенще уфтплй).
Ртйнет,
String hello = "Hello world!";
Лмбуущ ч същле Java пв®едйосафус ч рблефщ. Чуе лмбуущ, чипдсэйе
ч пдйо рблеф, счмсафус дтхцеуфчеоощнй рп пфопыеойа дтхз л дтх-
зх, фп еуфш йнеаф чъбйнощк дпуфхр л ретенеоощн й нефпдбн, еумй
ртпфйчопе ое пзпчптеоп счоп рпутедуфчпн урегйжйлбфптпч private
ймй protected.
Рблефщ тбъзтбойюйчбаф ртпуфтбоуфчб йнео. "Ртпуфп змпвбмшощи"
йнео ч същле Java ое вщчбеф.
Рблеф пжптнмсефус у рпнпэша уйофблуйюеулпк лпоуфтхлгйй чйдб
package my_packages.pack1:
Йоуфтхлгйс package дпмцоб уфпсфш ретчпк ч жбкме у йуипдощн
Java-фелуфпн. Поб декуфчхеф дп лпогб жбкмб.
Рблефщ нпзхф йнрптфйтпчбфшус дтхзйнй рблефбнй рпутедуфчпн йоуф-
тхлгйй import. Ртйнетщ,
import java.util;
import java.util.HashTable;
import java.util.*;
Ретчбс йоуфтхлгйс import рпъчпмсеф пвтбэбфшус л лмбуубн рблефб
util умедхаэйн пвтбъпн:
util.Vector
util.HashTable
. . .
Чфптбс йоуфтхлгйс йнрптфйтхеф мйыш лмбуу HashTable, рпъчпмсс ч
дбмшоекыен пвтбэбфшус л ьфпнх лмбуух рп лптпфлпнх йнеой, веъ
ртежйлуб util.
Фтефшс йоуфтхлгйс import рпъчпмсеф пвтбэбфшус рп лптпфлйн йне-
обн лп чуен лмбуубн рблефб util.
4.1.4. Хртбчмсаэйе лпоуфтхлгйй
Хртбчмсаэйе лпоуфтхлгйй същлб Java чрпмое фтбдйгйпоощ, ъб йул-
маюеойен утедуфч чщипдб йъ чмпцеоощи вмплпч (ч юбуфопуфй, йъ
чмпцеоощи гйлмпч). Ртйнет.
test:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (i > 3) {
break test;
}
}
}
Дмс ретедбюй хртбчмеойс нпцоп ртйнеосфш лбл лпоуфтхлгйа break,
фбл й continue (ретеипд л умедхаэек йфетбгйй гйлмб).
Йоуфтхлгйс goto ч същле Java пфухфуфчхеф.
4.1.5. Йулмаюйфемшоще уйфхбгйй
Дмс пвтбвпфлй йулмаюйфемшощи уйфхбгйк, чпъойлбаэйи чп чтенс чщ-
рпмоеойс ртпзтбннщ, ч същле Java йурпмшъхефус лпоуфтхлгйс try/
catch/finally. Вмпл try упдетцйф йоуфтхлгйй, чщрпмоеойе нпцеф
ртйчеуфй л чпъойлопчеойа йулмаюйфемшощи уйфхбгйк. Умедхаэйе ъб
ойн пдйо ймй оеулпмшлп вмплпч catch ртедобъобюеощ дмс пвтбвпфлй
йулмаюйфемшощи уйфхбгйк. Облпоег, вмпл finally упдетцйф йоуф-
тхлгйй, лпфптще вхдхф чщрпмоеощ оеъбчйуйнп пф чпъойлопчеойс
йулмаюйфемшопк уйфхбгйй ч вмпле try. Ртй чщипде йъ try-юбуфй
рпутедуфчпн йоуфтхлгйк ретедбюй хртбчмеойс (break, return й
ф.р.) вмпл finally фблце вхдеф чщрпмоео.
Дмс ретедбюй йожптнбгйй пв йулмаюйфемшопк уйфхбгйй йурпмшъхафус
пв®елфщ лмбуупч - обумедойлпч лмбууб Throwable. Обртйнет, лмбуу
ArrayIndexOutOfBoundsException пфчеюбеф ъб лпофтпмш чщипдб йо-
делупч ъб зтбойгщ нбууйчпч, лмбуу OutOfMemoryException - ъб те-
блгйа об йуюетрбойе учпвпдопк рбнсфй, лмбуу ClassCastException
- ъб пыйвлй ртй ртепвтбъпчбойй фйрпч, лмбуу
InterruptedException - ъб пвтбвпфлх ртетщчбойс фелхэезп рпфплб
й ф.д. Лпнрпоеофпк чуеи ьфйи лмбуупч счмсефус рпме фйрб String,
ч лпфптпе рпнеэбефус фелуф уппвэеойс пв пыйвле. Нефпд
getMessage чпъчтбэбеф ьфпф фелуф.
Ч рпдпвощи пв®елфби нпцеф упдетцбфшус й дпрпмойфемшобс йожптнб-
гйс. Обртйнет, пв®елфщ лмбууб InterruptedIOException упдетцбф
рпме, ч лпфптпе ъбопуйфус юйумп вбкф, ретедбоощи дп чпъойлопче-
ойс йулмаюйфемшопк уйфхбгйй.
Умедхаэйк жтбзнеоф ртпзтбннщ тбуреюбфщчбеф уппвэеойс йъ нбууйчб
messages. Ртй ьфпн нщ ое рщфбенус чщсуойфш тбънет ьфпзп нбууй-
чб, б ртпуфп рпмбзбенус об неибойън пвтбвпфлй йулмаюйфемшощи
уйфхбгйк. (Лпоеюоп, нщ ое упчефхен рйубфш ртпзтбннщ ч фблпн
уфйме).
try {
for (int i = 0; i < 100; i++) {
System.out.println (messages[i]);
}
}
catch (ArrayOutOfBoundException e) {
System.out.println ("No more messages");
}
catch (Exception e) {
System.out.println ("Unexpected exception");
System.out.println (e.getMessage());
}
finally {
System.out.println ("Work done");
}
Йулпвюйфемшоще уйфхбгйй нпзхф чпъвхцдбфшус ртпзтбнноп ртй рпнп-
эй йоуфтхлгйк чйдб
throw new MyException ("Something's wrong");
Урегйжйлбгйй същлб Java рпдтбъдемсаф йулмаюйфемшоще уйфхбгйй об
дче лбфезптйй. Л ретчпк лбфезптйй (лмбуу Error) пфопусфус уйфх-
бгйй, об лпфптще ртпзтбннб ое пвсъбоб тебзйтпчбфш (ьфп ъбчедпнп
удембеф Java-нбыйоб). Лп чфптпк лбфезптйй (лмбуу Exception) пф-
опусфус уйфхбгйй, лпфптще ртпзтбннб дпмцоб пвтбвбфщчбфш пвсъб-
фемшоп. Еумй ртй чщрпмоеойй нефпдб нпцеф чпъойлбфш йулмаюйфемш-
обс уйфхбгйс чфптпзп фйрб, по дпмцео мйвп пвтбвбфщчбфш ее убн у
рпнпэша лпоуфтхлгйй try/catch/finally, мйвп ч езп пртедемеойй
дпмцоб жйзхтйтпчбфш лпоуфтхлгйс
throws Exception1, Exception2, ...
Ртйнет.
class Foo extends Object {
. . .
public void readFromFile (String fn) throws InvalidFormatException {
FileInputStream fis;
try {
fis = new FileInputStream (fn);
// Юйфбен дбооще йъ жбкмб.
. . .
// Еумй жбкм йнееф оертбчймшощк жптнбф,
// чпцвхцдбен йулмаюйфемшоха уйфхбгйа:
throw new InvalidFormatException ("Wrong format");
. . .
}
catch (FileNotFoundException e) {
// Ртедртйойнбен уппфчефуфчхаэйе декуфчйс
}
finaly {
if (fis != null )
fis.close(); // чуездб ъблтщчбен жбкм, еумй по вщм пфлтщф
}
}
. . .
}
Ч ьфпн ртйнете ч нефпде readFromFile нпзхф чпъойлохфш дче йулм-
юйфемшоще уйфхбгйй. Ретчбс учсъбоб у фен, юфп охцощк жбкм ое-
дпуфхрео. Ьфб уйфхбгйс пвтбвпфщчбефус чохфтй нефпдб
readFromFile. Чфптбс йулмаюйфемшобс уйфхбгйс нпцеф чпъолохфш,
еумй жбкм йнееф оертбчймшощк жптнбф. Ьфб уйфхбгйс ретедбефус
дмс пвтбвпфлй обчети.
Неибойън рпфплпч - пвсъбфемшобс юетфб упчтенеоощи претбгйпоощи
утед. Ъб уюеф рпфплпч пвеуреюйчбефус нбуыфбвйтхенпуфш ртпзтбнн-
ощи уйуфен, прфйнбмшопе йурпмшъпчбойе бррбтбфощи теухтупч, чщ-
уплбс улптпуфш пфлмйлб об ъбртпущ рпмшъпчбфемек. Рпьфпнх оеф
ойюезп хдйчйфемшопзп ч фпн, юфп ч същле Java неибойън рпфплпч
ртедуфбчмео у убнпзп обюбмб й ч рпмопн пв®ене.
Ч същле Java рпфплй ртедуфбчмеощ рпутедуфчпн лмбууб Thread, йо-
фетжекуб Runnable, урегйжйлбфптб нефпдб synchronized й нефпдпч
лмбууб Object wait й notify.
4.1.6.1. Лмбуу Thread й йофетжеку Runnable
Рпфпл (thread) ртедуфбчмсеф упвпк пфдемшощк рпфпл хртбчмеойс ч
ртедемби ртпгеууб. Фблйн пвтбъпн, х лбцдпзп рпфплб еуфш обюбмп,
рпумедпчбфемшопуфш декуфчйк, фелхэее упуфпсойе й лпоег.
Рпфпл ъбрхулбефус у рпнпэша чщъпчб нефпдб start() лмбууб
Thread. Рпумедпчбфемшопуфш декуфчйк, чщрпмосенщи ч тбнлби рпфп-
лб, ъбдбефус ч нефпде run(). Рпдюетлоен, юфп нефпд run() йу-
рпмшъхефус фпмшлп дмс ъбдбойс рпнмедпчбфемшопуфй декуфчйк; счоп
чщъщчбфш езп ое фпмшлп ое охцоп, оп й ртпуфп чтедоп.
Рпфпл ъблбоюйчбефус мйвп ртй ъбчетыеойй чщрпмоеойс нефпдб
run(), мйвп у рпнпэша счощи чщъпчпч нефпдпч лмбууб Thread
stop() ймй destroy(). Чпъпвопчйфш тбвпфх ъбчетыеоопзп рпфплб
оечпънпцоп.
Дмс чтенеоопк ртйпуфбопчлй тбвпфщ рпфплб у рпумедхаэйн чпъпв-
опчмеойен умхцбф нефпдщ suspend(), sleep() й yeild().
Пвщюоп рпфпл, ртйпуфбопчмеоощк у рпнпэша нефпдб suspend, чпъпв-
опчмсеф тбвпфх рпутедуфчпн нефпдб resume().
Чщъпч нефпдб sleep() ртйчпдйф л ртйпуфбопчле рпфплб об ъбдбоопе
юйумп нйммйуелход.
Чщъпч нефпдб yeild() пъобюбеф дпвтпчпмшоха хуфхрлх ртпгеууптб
дтхзпнх рпфплх; ретчпобюбмшощк рпфпл пуфбефус зпфпчщн л чщрпм-
оеойа.
Java-рпфплй пвмбдбаф ртйптйфефбнй. Ч урегйжйлбгйси пзпчбтйчбеф-
ус, юфп Java-нбыйоб тебмйъхеф чщфеуосаэха нопзпрпфплпчпуфш. Ьфп
пъобюбеф, юфп рпфпл у впмшыйн ртйптйфефпн нпцеф ртетчбфш чщрпм-
оеойе неоее ртйптйфефопзп рпфплб. Пдоблп, урегйжйлбгйй ое фте-
вхаф обмйюйс тбъдемеойс чтенеой. Ьфп ъобюйф, юфп дмс ретедбюй
хртбчмеойс рпфплх у фен це ртйптйфефпн, чппвэе зпчптс, фтевхаф-
ус счоще декуфчйс уп уфптпощ ретчпобюбмшопзп рпфплб - чщъпч не-
фпдпч suspend(), sleep() ймй yeild().
Об тйу. 10 ртедуфбчмеоб дйбзтбннб упуфпсойк рпфплпч.
Тйу. 10. Дйбзтбннб упуфпсойк рпфплпч.
Умедхаэйк ртйнет упдетцйф жтбзнеоф пдопзп йъ нопзпюйумеоощи чб-
тйбофпч теыеойс ъбдбюй "ртпйъчпдйфемш/рпфтевйфемш". По ъбйнуф-
чпчбо йъ рйушнб, лпфптпе обрйубм Mark Tillotson ч зтхррх уефе-
чщи опчпуфек comp.lang.java.
class my_producer extends Thread
{
int items_to_do ;
my_buffer the_buffer ;
my_producer (my_buffer buf, int count)
{ super() ;
the_buffer = buf ;
items_to_do = count ;
}
public void run ()
{
while (items_to_do > 0)
{ System.out.println ("producer to_do = " + items_to_do) ;
Integer item = new Integer (items_to_do*items_to_do) ;
the_buffer.insert (item) ;
items_to_do-- ;
}
System.out.println ("producer exiting") ;
}
}
Дбоощк ртпйъчпдйфемш рпнеэбеф ч вхжет лчбдтбфщ гемщи юйуем.
Ч ртйчедеоопн ртпуфпн ртйнете лмбуу my_producer счмсефус обу-
медойлпн лмбууб Thread, юфп дембеф езп рпфплпн у рпумедпчбфемш-
опуфша декуфчйк, ъбдбоопк нефпдпн run(). Ч тебмшощи ртпзтбннби,
лбл ртбчймп, пв®елф дпмцео обумедпчбфш х лблпзп-мйвп ртедыеуф-
чеоойлб упдетцбфемшоще учпкуфчб, б чпънпцопуфш рбтбмеммшопзп
чщрпмоеойс енх ртедпуфбчмсефус йофетжекупн Runnable. Ьфпф йо-
фетжеку упдетцйф едйоуфчеоощк нефпд - run(). Ртйнет.
1 class SomethingToRun extends BaseRunner implements Runnable {
2 private Thread aThread;
3 public void run () {
// чщрпмосенще декуфчйс
. . .
4 }
5 SomethingToRun () {
6 aThread = new Thread (this);
7 aTread.start ();
8 }
9 }
Ч уфтпле 6 упъдбефус опчщк рпфпл. Бтзхнеофпн лпоуфтхлфптб счмс-
ефус пвелф лмбууб SomethingToRun, б, ъобюйф, рпумедпчбфемшопуфш
чщрпмосенщи декуфчйк рпфплб вхдеф пртедемсфшус нефпдпн run()
ьфпзп лмбууб. Чщъпч нефпдб start() ч уфтпле 7 уфбчйф рпфпл ч
пюетедш зпфпчщи дмс чщрпмоеойс.
4.1.6.2. Утедуфчб уйоитпойъбгйй рпфплпч
Лбл й чп чуслпк нопзпртпгеууопк ймй нопзпрпфплпчпк утеде, ч
Java ухэеуфчхеф ртпвменб уйоитпойъбгйй дпуфхрб л тбъдемсенщн
теухтубн. Ртйнетпн фблпзп теухтуб счмсефус вхжет ч ъбдбюе "ртп-
йъчпдйфемш/рпфтевйфемш".
Дмс прщфощи ртпзтбннйуфпч пфнефйн, юфп нпдемш уйоитпойъбгйй,
ртйосфбс ч същле Java, прйтбефус об лпогергйа нпойфптб, ртедмп-
цеооха ч 70-е зпдщ Втйол-Ибоуеопн.
Ч Java-ртпзтбннби нпцоп чщдемсфш лтйфйюеулйе йофетчбмщ, лпфптще
пвпъобюбафус лмаюечщн умпчпн synchronized. Еумй лтйфйюеулйн йо-
фетчбмпн счмсефус нефпд, урегйжйлбфпт synchronized рпнеэбефус ч
езп (нефпдб) ъбзпмпчпл. Дмс ртечтбэеойс ртпйъчпмшопк йоуфтхлгйй
(пвщюоп ьфп вмпл) ч лтйфйюеулйк йофетчбм умхцйф лпоуфтхлгйс
synchronized (чщтбцеойе) йоуфтхлгйс;
зде теъхмшфбфпн чщтбцеойс дпмцео вщфш пв®елф ймй нбууйч.
Чщрпмоеойе лтйфйюеулпзп йофетчбмб обюйобефус фпмшлп рпуме рпмх-
юеойс рпфплпн нпопрпмшопзп дпуфхрб л уппфчефуфчхаэенх пв®елфх.
Дп обуфхрмеойс ьфпзп нпнеофб рпфпл вмплйтхефус.
Чщъпч wait() чохфтй лтйфйюеулпзп йофетчбмб ртйчпдйф л фпнх, юфп
фелхэйк рпфпл хуфхрбеф нпопрпмшопе ртбчп об лтйфйюеулйк йофет-
чбм й ртйпуфбобчмйчбефус дп феи рпт, рплб йъ лблпзп-мйвп дтхзп-
зп рпфплб ое вхдеф удембо чщъпч notify() ймй notifyAll(). Иптп-
ыек йммауфтбгйек йурпмшъпчбойс утедуфч уйоитпойъбгйй рпфплпч
счмсефус хрпнйобчыбсус чщые ртпзтбннб Нбтлб Фйммпфупоб.
class my_buffer
{
Object [] vec = new Object [8] ;
int ip = 0 ;
int ep = 0 ;
synchronized void insert (Object item)
{
do
{
if (ip-ep < 8)
{ vec [(ip++) & 7] = item ;
if (ip-ep == 1) notify () ; // Хчедпнйфш, еумй вхжет вщм рхуф
return ;
}
try wait () ; catch (InterruptedException e) ;
} while (true) ;
}
synchronized Object extract ()
{
do
{
if (ip > ep)
{ Object result = vec [(ep++) & 7] ;
if (ip-ep == 7) notify(); // Хчедпнйфш, еумй вхжет вщм рпмпо
return result ;
}
try wait () ; catch (InterruptedException e) ;
} while (true) ;
}
}
class my_producer extends Thread
{
int items_to_do ;
my_buffer the_buffer ;
my_producer (my_buffer buf, int count)
{ super() ;
the_buffer = buf ;
items_to_do = count ;
}
public void run ()
{
while (items_to_do > 0)
{ System.out.println ("producer to_do = " + items_to_do) ;
Integer item = new Integer (items_to_do*items_to_do) ;
the_buffer.insert (item) ;
items_to_do-- ;
}
System.out.println ("Ртпйъчпдйфемш ъблбоюйчбеф тбвпфх") ;
}
}
class my_consumer extends Thread
{
int items_to_do ;
my_buffer the_buffer ;
my_consumer (my_buffer buf, int count)
{ super() ;
the_buffer = buf ;
items_to_do = count ;
}
public void run ()
{
while (items_to_do > 0)
{ System.out.println ("consumer to_do = " + items_to_do) ;
Object item = the_buffer.extract () ;
System.out.println ("consumer got " + item) ;
items_to_do-- ;
}
System.out.println ("Рпфтевйфемш ъблбоюйчбеф тбвпфх") ;
synchronized (this){
notify () ; // Рпущмбен хчедпнмеойе п ъбчетыеойй тбвпфщ
// (ун. con.wait() ч main())
}
}
}
public class threaded3
{
public static void main (String [] args) throws InterruptedException
{
my_buffer the_buffer = new my_buffer () ;
my_producer prod = new my_producer (the_buffer, 40) ;
my_consumer con = new my_consumer (the_buffer, 40) ;
Thread.currentThread().setPriority (5) ;
prod.setPriority (4) ; // Ртпйъчпдйфемш рпмхюбеф впмее чщуплйк ртйптйфеф
con.setPriority (3) ; // рп утбчоеойа у рпфтевйфемен
prod.start() ;
con.start() ;
synchronized (con)
{
con.wait() ; // Цден хчедпнмеойс пф ртпйъчпдйфемс пв плпоюбойй
// езп тбвпфщ
}
System.out.println ("Ртпйъчпдйфемш й рпфтевйфемш ъблпоюймй тбвпфх") ;
}
}
Ртйчедеообс ртпзтбннб обрйубоб ч пюеош иптпыен, рпосфопн уфйме.
Нщ ртплпннеофйтхен мйыш пдйо нпнеоф. Ч нефпдби insert() й
extract() лмбууб my_buffer чщъпч wait() упдетцйфус чохфтй веу-
лпоеюопзп гйлмб. Демп ч фпн, юфп чщъпч notify() пфопуйфус л пв-
®елфх ч гемпн. "Тбъвхцеоощк" пв®елф дпмцео ртпбобмйъйтпчбфш
учпе упуфпсойе й теыйфш, юфп дембфш дбмшые. Фбл, еумй "ъбуохм"
нефпд insert(), фп рпуме чпъпвопчмеойс тбвпфщ оепвипдйнп ртпче-
тйфш, юфп вхжет хце ое рпмпо й дпвбчмеойе опчпзп ьменеофб уфбмп
чпънпцощн. Еумй ьфп ое фбл, нефпд insert() ъбуоеф чопчш.
4.2.1. Феиопмпзйюеулйк гйлм пвтбвпфлй Java-ртпзтбнн
Ч ртйогйре, феиопмпзйюеулйк гйлм рпдзпфпчлй, фтбоумсгйй, тедбл-
фйтпчбойс чоеыойи учсъек, феуфйтпчбойс, пфмбдлй й чщрпмоеойс
Java-ртпзтбнн фпф це, юфп й дмс дтхзйи йофетртефйтхенщи същлпч
ртпзтбннйтпчбойс, оп у пдойн ухэеуфчеоощн пфмйюйен - ртй тедбл-
фйтпчбойй чоеыойи учсъек фтевхенще лпнрпоеофщ нпзхф дпуфбчмсфш-
ус рп уефй (тйу. xxx).
Тйу. xxx. Феиопмпзйюеулйк гйлм Java-ртпзтбннщ
Чбцоп пфнефйфш, пдоблп, юфп Java-ртпзтбннщ нпзхф ртедуфбчбфш
лбл вщ ч дчхи йрпуфбуси - лбл убнпуфпсфемшопе ртймпцеойе й лбл
брмеф, фп еуфш упчплхропуфш пв®елфпч, чщрпмосаэйиус ч утеде
WWW-обчйзбфптб.
У фпюлй ътеойс ртпзтбннйуфб, брмеф й ртймпцеойе пфмйюбафус ч
ретчха пюетедш фпюлбнй чипдб й цйъоеоощн гйлмпн.
Ртймпцеойе ч лбюеуфче фпюлй чипдб йнееф нефпд
public static void main (String args[]);
ьфпф нефпд дпмцео вщфш пртедемео ч фпн public-лмбууе, лпфптщк упдетцйфус ч
жбкме, чщрпмосенпн чйтфхбмшопк Java-нбыйопк.
Ч рбтбнефт args ретедбефус нбууйч уфтпл - рбтбнефтпч лпнбодопк уфтплй.
Ртйнет: ртпзтбннб, реюбфбаэбс учпй бтзхнеофщ
public class myTop {
public static void main (String args[]){
int argc = args.length;
for (int i = 0; i < argc; i++)
System.out.println (argc[i]);
}
}
Брмеф чщрпмосефус ч лпофелуфе обчйзбфптб й езп цйъоеоощк гйлм
пртедемсефус умедхаэйнй нефпдбнй лмбууб Applet:
public void init () чщъщчбефус обчйзбфптпн ртй ъбзтхълб брмефб;
public void start (); чщъщчбефус обчйзбфптпн ртй рплбъе уфтбойгщ;
public void stop (); чщъщчбефус обчйзбфптпн, лпздб фпф хипдйф у Web-уфтбойгщ;
public void destroy (); ьфпф нефпд ртедобъобюео дмс пучпвпцдеос
теухтупч; бобмпз деуфтхлфптб, оп ое чщъщчбефус бчфпнбфйюеулй; чуездб
чщъщчбеф stop(); чуездб чщъщчбефус ртй чщипде йъ обчйзбфптб й ртй
ретеъбзтхъле брмефб.
Ртпуфекыйк брмеф чщзмсдйф фбл:
1 import java.awt.Graphics;
2 import java.applet.Applet;
3 class SimpleApplet extends Applet {
4 public void paint (Graphics g) {
5 g.drawString ("Hello world!", 10, 10);
6 }
7 }
Нефпд public void paint (Graphics g) (уфтплй 4-6) пртедемсеф,
лбл брмеф рететйупчщчбеф уевс ч фпф нпнеоф, лпздб плпоощк не-
оедцет рпущмбеф WWW-обчйзбфптх ъбртпу об рететйупчлх.
Члмаюеойе брмефб ч WWW-уфтбойгх ртпйъчпдйфус умедхаэйн пвтбъпн.
Ч същле HTML 2.0 ртедхунпфтеощ урегйбмшоще лпоуфтхлгйй