Scopul, caracteristicile și beneficiile Eclipse

Eclipse este un IDE extensibil (mediu de dezvoltare integrat). Un IDE este un set organizat convenabil de instrumente necesare pentru a lucra la un proiect software.

Eclipse este o platformă versatilă care poate fi utilizată pentru a dezvolta aplicații în orice limbaj de programare (de exemplu, puteți utiliza limbaj Python după instalarea conexiunii Pydev (), dar inițial „nativ” pentru Eclipse este Java (care, de altfel, Eclipse în sine este scris).

Vă sugerăm să utilizați o sintaxă a etichetei țintă care să califice aceste semnale. Cu toate acestea, în acest caz, trebuie să utilizați o convenție de denumire mai globală. Marginile pot fi trasate între nodurile care promovează un semnal ca mesaj și nodurile care promovează un semnal ca eveniment.

Ce știi cu adevărat?

Ambiguitate de tip generalizată a metaprogramelor bazate pe tipuri cu o sintaxă obiect specifică. Anja Helen Bagge, Martin Bravenboer, Karl Trygve Kallberg, Cohen Muilwijk și Eelko Visser. Reutilizarea codului receptiv pe aspect, clonare și redenumire. Învățarea internetului oferă informații pentru începători și introduce elementele de bază ale programării și ale internetului.

  • Katz, Martin Bravenboer și Elko Visser.
  • Sursă de amestecare și cod bytec.
  • Martin Bravenboer, Rob Vermaas, Jurgen Wingju și Eelko Visser.
  • Martin Bravenboer și Elko Visser.
  • Sintaxă specifică pentru obiecte.
  • Introducerea limbajului și asimilarea acestuia fără restricții.
  • Înțelegerea generală a internetului și a World Wide Web.
  • Cunoaștere bună a limbajului de marcare hipertext.
  • O experiență de programare.
Este un limbaj mic și ușor.

Cele mai importante caracteristici ale Eclipsei sunt:

  1. Cross-platform. Eclipse rulează pe toate platformele comune: Windows, Linux și MacOS X. Mai important, funcționalitatea sa este aceeași pe fiecare dintre aceste platforme.
  2. Versatilitate și extensibilitate. Eclipse oferă posibilitatea de a utiliza o varietate de instrumente terță parte.
  3. Deschidere și gratuit. Eclipse este un proiect OpenSource (adică al său coduri sursă disponibil oricui și oricine se poate alătura dezvoltării acestui instrument). Eclipse are o comunitate activă care lucrează constant pentru a îmbunătăți programul și a-și extinde capacitățile.

Spațiul de lucru Eclipse

Primul lucru pe care îl vedeți când porniți Eclipse este o casetă de dialog care vă permite să alegeți unde să plasați spațiu de lucru... Spațiul de lucru este directorul în care lucrarea dvs. va fi salvată.

De exemplu, extensiile de pe server permit unei aplicații să interacționeze cu o bază de date, oferind continuitate a informațiilor de la un apel la o altă aplicație sau efectuând operații de fișiere pe server. Modelul bazat pe prototip oferă moștenire dinamică; adică ceea ce este moștenit se poate schimba pentru obiecte individuale. Funcțiile pot fi proprietăți ale unui obiect, rulate ca metode. Nu trebuie să vă faceți griji că metodele sunt publice, private sau protejate și nu trebuie să implementați interfețe.

După selectarea unui spațiu de lucru, se va afișa ecranul pagină de start, cu sugestii pentru a vedea tutoriale, exemple etc. Selectați Workbench și veți fi dus la fereastră mediu de lucru (Workbench), în care va avea loc munca dvs. ulterioară.

Principalele componente ale unui spațiu de lucru sunt vizualizările, editorii și perspectivele.

Tipuri de date Java

Variabilele, parametrii și tipul de returnare nu sunt specificate în mod explicit. Aceste limbaje de scriptare oferă instrumente de programare pentru mai multe audienta larga datorită sintaxei lor mai simple, funcțiilor specializate încorporate și cerințe minime pentru a crea un obiect.

În secțiunea „Informații despre model de obiect". Tot ce aveți nevoie este un browser web modern. Programele acestor cursuri pot fi adaptate nevoilor cursanților. Nu ezitați să ne contactați dacă aveți întrebări sau nevoi specifice. Acest tutorial este destinat dezvoltatorilor care folosesc deja limbajul de programare.

Reprezentare Este o secțiune mică din spațiul de lucru care este utilizată pentru a naviga printr-o anumită categorie de obiecte (cum ar fi resurse sau pachete), pentru a deschide editori și pentru a afișa proprietățile editorilor activi. De exemplu, vizualizarea Navigator afișează proiecte și alte resurse, în timp ce vizualizarea Marcaje afișează toate marcajele din Workbench, împreună cu numele fișierelor cu care sunt asociate aceste marcaje. Figura arată colțul din dreapta sus al spațiului de lucru cu vizualizarea contur activă.

Există mai multe valori în lumea reală care nu se vor schimba niciodată. Când scrieți un program, este logic să le reprezentați în același mod - ca valori care nu vor fi modificate după ce sunt atribuite unei variabile. Aceste variabile sunt cunoscute sub numele de constante.

Declararea unei variabile ca constantă

Știm că această valoare nu se va schimba niciodată în lumea reală, așa că nu vom face acest lucru în program. Acest lucru se face prin adăugarea unei finale. Acest lucru face mult mai ușor să definiți variabilele în codul dvs. Ca și în cazul variabilelor obișnuite, doriți să restricționați utilizarea acestora. Dacă valoarea constantă este necesară numai în metodă, atunci declarați-o acolo.

Orice modificare adusă vizualizărilor este salvată imediat.

Un alt tip de componente vizuale ale Workbench este editoricare sunt folosite pentru vizualizarea și editarea unor resurse (de exemplu, codul programului). Când selectați o resursă, apare un editor adecvat. De exemplu, deschideți orice document text (cu extensia .txt) folosind comanda Fișier -\u003e Deschidere fișier ... și veți vedea editorul de text simplu încorporat. Dacă introduceți ceva în acest editor, va apărea un asterisc în fila acestuia, unde este scris numele fișierului. Înseamnă că editorul conține modificări nesalvate. Acestea vor fi salvate dacă apăsați Ctrl + S sau selectați comanda Fișier -\u003e Salvare.

Utilizarea cuvântului cheie final cu obiecte

Dacă este utilizat de mai multe metode, declarați-l în partea de sus a definiției clasei. Aceasta înseamnă că o constantă poate fi utilizată doar de clasa sa, dar la fel de ușor o puteți face constantă publică dacă doriți ca alte clase să o acceseze. Deoarece fiecare obiect creat are aceeași valoare, ar trebui să aibă o singură instanță. Nu poate fi modificat pentru a se referi la un alt obiect. Cu toate acestea, acest lucru nu înseamnă că conținutul obiectului nu se poate modifica.

Există multe vizualizări utile care pot fi adăugate la fereastra spațiului de lucru cu comanda Window -\u003e Show View. Cu toate acestea, în loc să le adăugați pe rând, este mai convenabil să schimbați perspectiva. Proiecție (sau perspectivă) Este o colecție de vizualizări și editori special concepute pentru a îndeplini o sarcină. După lansare în Eclipse, se deschide perspectiva Java, configurată pentru a scrie efectiv programul. Proiecția Debug este adesea utilizată pentru a depana un program. Puteți schimba perspectiva folosind comanda Window -\u003e Open Perspective. Numele proiecției curente este afișat în colțul din dreapta sus al mediului de lucru (vezi figura).

Nu se folosește cu constante, de fapt nu se folosește deloc. Porniți navigarea capitolului. Sfârșitul secțiunii casetei de navigare. Utilizarea acestor instrucțiuni este similară cu cea găsită în echivalentele lor în alte limbi. Notă: Acest tip de buclă este utilizat atunci când nu se știe în prealabil de câte ori ar trebui executată bucla, mai ales atunci când se utilizează parametrii definiți de utilizator în timpul executării programului.

Particularitatea lor constă în faptul că starea este verificată după prima execuție a buclei. Codul este executat atâta timp cât condiția este îndeplinită și se execută cel puțin o dată. Notă: Pentru bucle, este cel mai des folosit atunci când știți cât de des doriți să executați o bucată de cod asociată buclei.

Primul program Java

Înainte de a începe programarea, trebuie să creați un proiect în care Eclipse să stocheze toate resursele legate de programul dvs.

Pentru a crea un proiect, executați comanda Fișier -\u003e Nou -\u003e Proiect. În fereastra care apare, selectați Java Project și faceți clic pe Următorul. Furnizați un nume pentru proiectul dvs. Vă rugăm să rețineți că un director cu numele proiectului dvs. va fi creat în directorul pe care l-ați specificat ca spațiu de lucru (cu excepția cazului în care, desigur, modificați setările din această fereastră, ceea ce nu vom face pentru prima dată). Faceți clic pe butonul Finalizare.

Noțiunile de bază ale sintaxei Java

Condițiile folosesc date booleene, adevărate sau false. Ei verifică dacă condiția este îndeplinită. Dacă da, execută cod predefinit, în caz contrar execută alt cod predefinit sau sunt transmise direct restului programului. În acest caz, dacă condiția este îndeplinită, codul în acolade va fi executat, altfel nu va fi executat și programul va trece după cod.

De fapt, acestea sunt mai rapide de scris. Puteți instala mufe. Acest lucru vă permite să părăsiți o buclă sau o ramură. Folosit în toate comenzile și fluxul. Întreruperea și continuitatea se pot face cu blocuri numite. Puteți specifica o etichetă pentru a indica punctul de returnare la sfârșitul procesării declanșat de pauză.

Proiectul dvs. se află acum în vizualizarea PackageExplorer din partea stângă a spațiului de lucru. Îl puteți șterge oricând făcând clic pe numele acestuia click dreapta mouse-ul și selectând Ștergere. După aceea, Eclipse vă va întreba dacă să distrugeți simultan folderul cu fișierele proiectului (dacă este necesar, îl puteți distruge și).

Dacă nu ați șters proiectul, puteți adăuga fișiere și foldere la acesta folosind comenzile din meniul contextual Nou -\u003e Fișier și Nou -\u003e Dosar respectiv. Dacă proiectul este mare, atunci are nevoie de o structură de dosare imbricate. Dar, în cazul unui proiect Java, lucrurile stau puțin diferit. Ideea este că fragmentele programului Java sunt grupate în pacheteși se creează un folder separat pentru fiecare pachet. Pachetul este creat de comanda Nou -\u003e Pachet. De asemenea, trebuie să veniți cu un nume pentru pachet. Ca urmare, în folderul proiectului va fi creat dosar nou cu acest nume. Poti sa verifici.

O etichetă este un nume urmat de unul din cele două puncte care identifică începutul unei declarații. Variabila \u003d? instrucțiunea 1: instrucțiunea 2. Dacă condiția este adevărată, aceasta este instrucțiunea 1 după ce punctul de votare este executat; dacă este falsă, este instrucțiunea 2 după executarea a două puncte. Condiția trebuie să fie între paranteze.

Identificatori Java

Astfel: numărul este 1 dacă condiția este adevărată, la 2 dacă condiția este falsă. De asemenea, este posibil să se consolideze condițiile ternare. Cu toate acestea, nu se recomandă utilizarea acestei condiții prea sistematic, care este prea puțin lizibilă. Designerii de limbi străine caută modalități de a face codul mai ușor de creat și de întreținut. O tehnică frecvent utilizată este structurarea limbajului prin „proceduri”, care sunt blocuri de cod care efectuează o acțiune specifică asupra datelor programului. Aceste rutine pot fi grupate în biblioteci care pot fi utilizate de alți programatori.

Poate fi mai ușor să răsfoiți resursele proiectului utilizând vizualizarea Navigator. Deschideți-o cu comanda Window -\u003e Show View. Veți vedea că, pe lângă directorele de proiecte și pachete, Eclipse a creat două fișiere auxiliare, .classpath și .project. Ele pot fi deschise cu ușurință în editor, dar nu ne interesează în mod special acum.

Un program Java constă întotdeauna dintr-unul sau mai multe clase... Puteți crea o clasă folosind comanda Nouă -\u003e Clasă din meniul contextual Vizualizările Navigatorului (sau Package Explorer, nu contează). Când creați o clasă, trebuie să selectați pachetul căruia îi va aparține (selectați pachetul pe care tocmai l-ați creat) și să veniți cu un nume pentru acesta. Este o practică obișnuită să începeți numele claselor cu litere mari. Dacă nu respectați această regulă de formă bună, Eclipse va emite un avertisment, dar nu se va întâmpla nimic rău.

Acest lucru este eficient, dar are dezavantajul de a separa codul și datele și sensibilitatea la efectele de margine. Limbajele obiectelor se referă la gruparea datelor și a codului în aceeași entitate entitate. Această colecție de coduri de date se numește „încapsulare”. Unele definiții ale clasei.

- Expresie lambda

Clasa: Aceasta este forma care permite producerea de obiecte. Obiect: Aceasta este o implementare concretă și utilă a unei clase. În jargonul obiectelor, se numește „instanță” a unei clase. Acestea sunt proceduri care efectuează acțiuni care pot fi efectuate asupra unui obiect. Mesaj: Acesta este un apel de metodă pe un obiect.

În scopurile noastre, este util să bifăm caseta de sub „Ce metode doriți să creați în clasa dvs.?” opțiune opusă public static main main (String args)... Ca urmare, main () metoda (funcția) va fi generată în corpul clasei. Java necesită ca cel puțin una dintre clasele de programe să aibă o metodă cu un astfel de antet. El va fi executat la începutul programului.

Vom ilustra descrierea orelor cu un exemplu simplu. Vom crea o clasă de dreptunghi care afișează și manipulează dreptunghiuri. Sintaxa declarației de clasă. Variabilele celor două obiecte sunt diferite din punct de vedere fizic: ocupă locații de memorie diferite. Pentru a defini un dreptunghi, trebuie să cunoașteți poziția vârfurilor lățimii și înălțimii sale.

Afirmație condițională if

Metodele definesc comportamentul obiectelor dreptunghiulare. Sintaxa pentru declararea unei metode.

  • Sunt necesare chiar paranteze goale.
  • Modul de transmitere a argumentelor metodei este indicat în notă.
  • Un bloc de instrucțiuni care este o metodă.
Prima metodă calculează suprafața dreptunghiului.

Ca urmare a acțiunilor noastre, un fișier va fi creat în folderul pachetului cu numele clasei noastre și extensia .java. Eclipse va deschide un editor de cod care afișează conținutul acestui fișier. Va fi ceva de genul următor (pachetele și numele clasei, desigur, pot diferi):

pachet mainPack; public class MyClass (/ ** * @param args * / public static void main (String args) ())

Comenzile care alcătuiesc corpul funcției pot fi scrise în locul comentariului generat automat // TODO Metoda generată automat... Vom scrie o singură comandă care va imprima linia clasică „Bună ziua, lume!” Pe ecran:

Spațiul de lucru Eclipse

Al doilea desenează un dreptunghi în negru. Această metodă ar trebui să poarte numele clasei. Constructorii sunt opționali în clasă. Iată codul complet pentru clasa noastră dreptunghiulară. Invocarea metodei se realizează prin specificarea numelui instanței, apoi a uneia dintre metode și specificarea argumentelor pentru aceasta.

Dacă lista de argumente este goală, parantezele sunt încă obligatorii. Pentru a putea utiliza clasa dreptunghiului, vom crea un applet, ale cărui detalii vor fi descrise mai jos. Acest program este o clasă care nu are un constructor și două metode care se găsesc în toate applet-urile.

System.out.println ("Bună ziua, lume!");

Rămâne să rulați programul. Pentru aceasta, executați comanda Run -\u003e Run și obțineți o casetă de dialog cu setări de lansare non-banale. În partea stângă a acestei ferestre, selectați Aplicația Java ( aplicație Java). După un pic de gândire, Eclipse va găsi clasa noastră care conține metoda main () și va oferi să începeți să rulați programul de pe acesta (numele proiectului nostru și ale clasei noastre ar trebui să apară în partea dreaptă a ferestrei din fila Main). În plus, alte câteva file sunt oferite în atenția programatorului. De exemplu, pe al doilea dintre ele - Argumente - se propune introducerea parametrilor linie de comanda (dacă programul este conceput pentru a fi apelat din linia de comandă cu parametri). Pentru programul nostru simplu, nu trebuie să specificați altceva. Doar faceți clic pe butonul Run.

Proiectantul clasei dreptunghiului înțelege că, pe lângă dreptunghiuri, va trebui să manipuleze dreptunghiuri pline de culori diferite, va avea același nume ca și constructorul original, dar trebuie să difere de acesta fie prin numărul argumentelor sale, fie prin tipul lor. Iată o posibilă formă pentru acest nou constructor.

De asemenea, este posibil să se schimbe metoda suprafeței astfel încât să afișeze valoarea suprafeței sale într-un dreptunghi. În unele cazuri, poate exista ambiguitate cu privire la instanța care trebuie luată în considerare. Variabilele de instanță pot fi accesate direct prin toate metodele clasei. Pentru a respecta încapsularea, datele obiectului nu pot fi modificate direct din exterior. Pentru a realiza acest lucru, domeniul variabilelor de clasă poate fi limitat folosind modificatori. În acest caz, modificatorii utilizați sunt privați, ceea ce limitează domeniul variabilelor la clasă și publicație, care o extinde la toate clasele.

Ca rezultat al activității programului, datele sunt trimise către așa-numita consolă. ÎN sistem de operare Consola MS DOS era întregul ecran al monitorului. Eclipse ne deschide vizualizarea Consolei, în care (dacă totul este făcut corect) șirul „Bună ziua, lume!” este rezultatul programului nostru.

Acum, pentru a reporni programul (de exemplu, dacă am decis să-i facem unele modificări sau trebuie să-l arătăm profesorului), puteți merge mai ușor - executați comanda Run -\u003e Run Last Launched (rulați aplicația anterioară din nou) sau pur și simplu apăsați Ctrl + F11.

O variabilă publică declarată a unei clase este accesibilă din afara clasei, prefixându-i numele obiectului. În mod implicit, variabilele și metodele sunt publice. La fel cum puteți defini mai mulți constructori, puteți defini două metode care au același nume, cu condiția ca numărul lor de argumente sau tipuri diferite argumente. Această caracteristică se numește supraîncărcare a metodei. Exemplu. Pentru a crea o siguranță, putem supraîncărca metoda.

Această variabilă va avea aceeași valoare pentru toate instanțele clasei. În toate cazurile, este inutil să-l dublezi. Acest lucru se realizează prin declararea acestei variabile statice. Variabilele de clasă sunt inițializate odată pentru totdeauna când se încarcă clasa. Ele pot fi utilizate direct în toate metodele clasei. Ele pot fi folosite și din afara clasei, iar numele lor trebuie să fie prefixat cu numele clasei.

Elementele de bază ale sintaxei Java

Definiții

Operand este valoarea implicată în operație.

Metoda (funcția) este o parte a unui program care are propriul său nume. Acest nume poate fi folosit în program ca o comandă (o astfel de comandă se numește apel de metodă). Când se apelează o metodă, se execută comenzile din care constă. O metodă, similară unei operații, poate returna o valoare a rezultatului.

Descărcați și continuați declarațiile

Acestea sunt metode de lucru cu o clasă, nu cu instanțe. Pentru a accesa o metodă statică din afara clasei, trebuie să prefixați numele metodei cu numele clasei sau numele instanței clasei. Pentru a îmbunătăți lizibilitatea codului dvs., se recomandă să prefixați numele metodei cu numele clasei. Vom folosi această intrare mai târziu.

Următorul exemplu oferă modalitate posibilă implementări de clasă pentru tratarea numerelor complexe. Pentru a utiliza această clasă, putem scrie de ex. Note. Metodele sunt publice în mod implicit. După executarea următorului cod pentru litere. Când se lucrează cu literale, orice declarație variabilă rezervă o zonă de memorie de dimensiuni adecvate pentru acel literal. Este diferit de obiecte. După executarea următorului cod.

O expresie este o secvență de operații și apeluri de metodă executate într-o ordine specifică (în funcție de prioritatea operațiilor, ținând cont de paranteze), care dă o anumită valoare în timpul calculului.

Variabila este o zonă denumită a memoriei computerului în care un program poate stoca date de un anumit tip (numit valoare variabilă) și accesați aceste date folosind numele variabilei.

Concepte de programe și algoritmi (repetare)

Programare oricare program de calculator - transformarea datelor de intrare în date de ieșire. Algoritmul programului determină modul în care datele de intrare sunt convertite în date de ieșire.


Datele de intrare pot proveni dintr-o varietate de surse. ÎN proiecte educaționale aceste date sunt introduse cel mai adesea în timp ce programul rulează folosind tastatura și mouse-ul. În programele reale, ele pot fi obținute și din fișiere, baze de date, rețea, provin direct de la diferiți senzori etc.

Datele de ieșire (rezultatul muncii programului) sunt afișate cel mai adesea pe ecran, dar pot fi, de asemenea, salvate într-un fișier sau bază de date, trimise în rețea. Programele încorporate generează secvențe de evacuare speciale ca ieșire care determină ca dispozitivul la care este asociat programul să efectueze o acțiune.

Când începeți să scrieți un program, TREBUIE să înțelegeți:

  1. Pentru ce este deloc acest program (ce face, în termeni generali)?
  2. Ce date de intrare are acest program (și de unde provine)?
  3. Care este rezultatul acestui program (și unde să îl trimiteți)?
  4. Cum ar trebui convertite datele de intrare în ieșire (algoritm)? Aceasta este cea mai dificilă parte a gândirii unui programator, dar, deși nu există un răspuns la cele trei întrebări anterioare, nu are sens să o porniți.

Când scrieți un program simplu, trebuie să:

  1. Obțineți informații.
  2. Implementați un algoritm pentru transformarea datelor de intrare în ieșiri.
  3. Afișați rezultatul programului (date de ieșire): afișați-l, transmiteți-l prin rețea etc.

Când lucrați cu proiecte software complexe, este necesar să efectuați o analiză detaliată a cerințelor pentru program (care poate necesita multă comunicare cu clientul), să efectuați proiectarea (pentru a determina din ce părți va consta programul, modul în care aceste părți vor interacționa între ele, afișează diferite aspecte ale structurii și comportamentului programului sub formă de diagrame etc.). Dar, în orice caz, începeți programarea fără a înțelege datele de intrare și ieșire și fără a înțelege, în termeni generali, esența algoritmului fără sens... Și gândiți-vă cel puțin în termeni generali la esența algoritmului, fără a cunoaște datele de intrare și ieșire imposibil.

Prin urmare, începeți întotdeauna exercițiile definind intrările și ieșirile. Dacă aveți dificultăți în această chestiune, contactați profesorul.

Literatură pe această temă:

Construcții de bază ale algoritmului (repetare)

Atenţie! În acest stadiu de instruire, ar trebui să aveți deja cunoștințe despre acest subiect.Dacă nu sunt acolo, iar materialele pentru repetare sunt de neînțeles sau insuficiente, nu veți face față sarcinilor! Este urgent să consultați literatura pe această temă.

Deci, un algoritm este o secvență de acțiuni pentru conversia datelor de intrare în ieșire.

Algoritmul poate fi scris în trei moduri principale:

Etapele individuale ale algoritmului (indiferent de modul în care este scris) sunt legate între ele folosind trei construcții standard care sunt implementate în absolut toate limbajele de programare:

    Execuție secvențială. Pașii se execută unul după altul.

    Ramificare. În funcție de îndeplinirea unei anumite condiții (în exemplul considerat, este x\u003e y?), Se execută una sau altă ramură a programului.

    Cicluri. Secvența de pași a programului este executată de mai multe ori. De fapt, bucla se bazează pe ramificare (condiția pentru ieșirea din buclă este verificată), dar dacă această condiție nu este îndeplinită, controlul este transferat la începutul buclei (înapoi la pasul deja finalizat).

Luați în considerare o problemă: afișați toate numerele pare mai mici de 10. Pentru această problemă, puteți utiliza un algoritm bazat pe pași secvențiali și un algoritm folosind o buclă. Diagramele pentru ambele opțiuni sunt prezentate în figură:

Prima diagramă pare mai clară, dar în cazul în care este necesar să se afișeze nu 5 numere, ci 100, diagrama (și programul corespunzător acestui algoritm) vor crește de 20 de ori, iar în programul corespunzător celui de-al doilea algoritm, se va schimba un singur loc: 10 se va schimba la 100 De aceea acțiunile repetitive sunt concepute sub formă de cicluri, deși în multe cazuri puteți face fără ele.

Amintiți-vă: algoritmul ar trebui să fie construit doar din trei construcții numite!

Literatură pe această temă:

1. Manual școlar de informatică.

Noțiunile de bază ale sintaxei Java

  1. Limbajul Java face distincție între litere mari și mici. Aceasta înseamnă că numele tuturor funcțiilor și cuvintelor cheie ar trebui să fie scrise exact așa cum apar în exemplele și cărțile de referință.
  2. Fiecare comandă (operator) din limbajul Java trebuie să se încheie cu punct și virgulă.
  3. Un program Java constă din unul sau mai multe clase... Absolut întreaga parte funcțională a programului (adică ce face) ar trebui să fie plasată în metode anumite clase. (Clasa și metoda, ca concept de programare orientată pe obiecte, vor fi tratate în Lecția 3. Sintaxa clasei va fi, de asemenea, acoperită. În primele exerciții, utilizați clasele pe care Eclipse le generează în mod implicit.)
  4. Clasele sunt grupate în pachete.
  5. Cel puțin una dintre clase trebuie să aibă o metodă main (), exact la fel ca în exemplul nostru. (La început, înțelegeți sau încercați să vă amintiți scrierea corectă Această metodă este opțională - Eclipse va genera totul în sine dacă bifați caseta.) Această metodă va fi executată mai întâi.

În cel mai simplu caz, un program poate consta dintr-un pachet (sau chiar niciunul), o clasă într-un pachet și o singură metodă main () în cadrul unei clase. Comenzile programului vor fi scrise între rânduri

public static main main (String args) (

și o bretele de închidere) care indică sfârșitul corpului metodei. Această abordare trebuie urmată atunci când efectuați cele mai simple exerciții.

Comentarii

Comentariile sunt etichete explicative pe care programatorii le folosesc pentru a îmbunătăți înțelegerea codului. La compilarea unui program, comentariile sunt ignorate, deci orice poate fi scris în ele. Principalul lucru este să arătăm că această inscripție este un comentariu și nu trebuie interpretată ca comenzi de program. În Java, acest lucru se face într-unul din următoarele moduri:

  1. Se introduc două bare oblice //. De acum înainte până la sfârșitul rândului, puteți scrie orice doriți - Java îl va trata ca pe un comentariu.
  2. La începutul unui comentariu, sunt plasate caractere / *, iar la sfârșit - * /. În acest caz, comentariul poate ocupa orice număr de linii.
  3. A sublinia comentarii pentru documentarecare sunt plasate între markeri / ** și * /. Utilizarea lor va fi discutată mai târziu.

Reguli de scriere literală

despre diferite forme de scris literale

Numerele întregi (literele întregi) în Java pot fi scrise în mod obișnuit în formă zecimală: 12345, +4, -11.

În plus, puteți scrie numere întregi în formă octală, începând de la zero (0777, -056) și în formă hexazecimală, începând de la zero și litera latină x (0xFFFF, 0x14, 0xA1BC).

Literalele valide sunt scrise către sistem zecimal calculând, întreaga parte este separată de punctul zecimal.

Se poate scrie un număr real punctul de plutire, de exemplu: 5.4e19, 17E-11, -123e + 4. Partea numărului care vine înainte de litera e se numește mantisă, iar partea care vine după litera e se numește ordinea. Scrierea înseamnă următoarele: trebuie să ridicați 10 la puterea ordinii și să înmulțiți cu mantisa. Uneori este mai convenabil să scrieți 1e-9 decât 0,000000001.

Caracterele individuale sunt scrise în apostrofe, de exemplu, „a”, „D”, „@”.

Există câteva caractere speciale și de control care sunt scrise folosind o secvență specială de evadare. Cele mai frecvente sunt enumerate în tabel:

Secvențele de evadare sunt, de asemenea, închise în apostrofe.

Prima linie a tabelului spune că orice caracter poate fi specificat folosind codul său (cu codificare zecimală de la 0 la 255), scriind acest cod în sistemul de număr octal. De exemplu, litera „g” din codificarea CP1251 va fi scrisă cu secvența de evacuare „\\ 346”

Dacă este necesar, puteți specifica codul oricărui caracter din codificarea Unicode - după bară inversă și litera latină u - în patru caractere hexazecimale. De exemplu, „\\ u0055” este litera U.

Șirurile de caractere sunt cuprinse între ghilimele. Ghilimelele de deschidere și de închidere trebuie să fie pe aceeași linie de cod.

Pentru șiruri, este definită operația de concatenare +, care vă permite să colectați mai multe șiruri într-una („atribuindu-le” una la alta).

Dacă o constantă de șir este prea lungă și este puțin percepută în codul programului atunci când o scrieți pe o singură linie, o puteți scrie în mai multe rânduri, concatenându-le folosind operația de concatenare a șirurilor. De exemplu:

„Aceasta este o constantă de șir foarte lungă notată” + „pe două linii de sursă”

Caracterele și codurile de control sunt scrise într-un șir în același mod cu o bară inversă (dar fără apostrofe).

Literalele booleene sunt adevărate și false.

Identificatori

despre regulile stilului bun

La programare, este o nevoie constantă de a veni cu identificatori pentru denumirea obiectelor.

Identificatorul poate consta din litere, cifre, subliniere _ și semn de dolar $ (acesta din urmă nu este recomandat, Java îl folosește pentru propriile nevoi). Identificatorul nu poate începe cu o cifră. Cuvinte cheie Java (nici literale adevarat fals și nul).

Așa cum sa arătat mai sus, limbajul Java face distincție între litere simple și litere mici... Aceasta înseamnă că myAge, myage și MyAge sunt nume de obiecte complet diferite. Aveți grijă: o eroare de registru este un caz foarte frecvent!

Numele clasei încep cu o literă mare; dacă numele este format din mai multe cuvinte, atunci fiecare cuvânt începe cu o literă mare. De exemplu: MyClass, Book.

Numele metodei și variabilelor încep cu litere mici (litere mici); dacă numele conține mai multe cuvinte, atunci fiecare cuvânt următor începe cu o literă mare. De exemplu, myVar, x, y, newBigCounter.

Numele constante sunt scrise cu majuscule; dacă numele conține mai multe cuvinte, între ele se plasează un subliniat. De exemplu PI, COUNT_OF_MONTHS.

Utilizarea acestor linii directoare oferă multe avantaje. Una dintre ele este că veți ști exact cum să plasați litere mari și mici atunci când utilizați bibliotecile Java standard ai căror dezvoltatori au urmat instrucțiunile.

Tipuri de date

despre tipurile de date Java

Tipul int este cel mai frecvent utilizat pentru a stoca numere întregi în Java.

În general, există patru tipuri întregi în limbajul Java: octet, scurt, int, lung. Acestea diferă în cantitatea de memorie care va fi alocată pentru variabilă și, în consecință, în intervalul de valori care pot fi stocate în această variabilă. Cel mai frecvent utilizat tip int ocupă 4 octeți în memorie și este potrivit pentru stocarea numerelor de la -2147483648 la 2147483647. Tipul de octeți consumă cea mai mică memorie și este potrivit pentru lucrul cu numere mici (de la -128 la 127). Tipurile scurte și lungi sunt de 2 și respectiv 8 octeți.

Tipul dublu este potrivit pentru numerele reale.

Numerele reale (reale) (sau numerele cu virgulă mobilă) sunt reprezentate de două tipuri: float și dublu. Tipul float ocupă 4 octeți de memorie și nu oferă un grad ridicat de precizie atunci când este vorba de numere foarte mari sau foarte mici. Se recomandă utilizarea acestuia atunci când este necesară partea fracționată, dar nu este necesară o precizie ridicată (de exemplu, pentru măsurarea distanțelor în metri, dar luând în considerare centimetri și milimetri sau măsurarea prețurilor în ruble, ținând cont de copeici). Dacă sunt necesare calcule mai precise, se recomandă să operați cu valori de tip dublu (de exemplu, o astfel de variabilă poate stoca valoarea sinusului unui unghi).

Litere valide precum 5.3, 8.0, 2e-3 sunt considerate de Java ca fiind duble. Dacă vor fi folosite ca flotante într-un program, acestea trebuie să se termine cu litera f: 5.3f, 8.0f, 2e-3f.

Tipul de caracter este utilizat pentru a stoca caractere unice. Java consideră că este un fel de tip întreg (deoarece fiecare caracter este specificat de propriul cod Unicode), deci toate operațiunile întregi se aplică char.

Valorile booleene (fie adevărate, fie false) sunt reprezentate de tipul boolean.

Astfel, Java definește opt tipuri simple, ale căror caracteristici sunt prezentate în masa:

Declarație variabilă

În Java (ca în multe alte limbi), trebuie să-l descrieți înainte de al utiliza. A descrie o variabilă înseamnă a-i da un nume și a-i defini tipul.

Când declarați o variabilă, este indicat mai întâi tipul (care poate fi unul dintre tipurile simple, numele unei clase sau interfețe), apoi numele variabilei. Dacă este necesară o variabilă a initializa (atribuiți valoarea inițială), valoarea inițială este specificată după nume prin semnul egal. Mai multe variabile de același tip pot fi declarate separate prin virgule.

Exemple de declarații variabile:

int x; // Declarați o variabilă întreagă x dublu a, b; // Declararea a două variabile reale a și b litera char \u003d "Z"; // Declarați o literă variabilă de caractere, inițializată cu valoarea inițială „Z” boolean b1 \u003d adevărat, b2, b3 \u003d fals; // Declarați trei variabile booleene, prima va fi adevărată, ultima va fi falsă

Operații de limbaj de bază

Variabile și pot participa (din care, la rândul lor, pot fi construite complexe). Să luăm în considerare cele mai simple operații limbaj Java.

Operații matematice

Operații de comparație, rezultatul este o valoare booleană: adevărat sau fals

Operații logice

despre operațiile Java

&& și || diferă prin faptul că valoarea celui de-al doilea nu este neapărat calculată. De exemplu, && evaluează valoarea primului operand și, dacă este fals, returnează imediat fals, în timp ce || revine imediat dacă vede că primul operand este adevărat. Java are operațiuni similare & și | , calculează valorile ambilor operanzi înainte de a le efectua o operație.

Operații de schimbare

(funcționează cu reprezentarea pe biți a primului operand)

Operații bit-bit

(funcționează cu reprezentarea pe biți a operanzilor)

Operațiune?:

Operație?: Ternar, adică are trei operanzi. Primul operand este o condiție, o expresie booleană. Al doilea și al treilea operand sunt expresii de orice alt tip. Operația funcționează după cum urmează: dacă condiția este adevărată, returnează al doilea operand ca rezultat și, dacă este falsă, atunci al treilea.

De exemplu, expresia (5\u003e 3)? 7 + 1: 2 * 2 ar fi 8, dar expresia (5 \u003d\u003d 3)? 7 + 1: 2 * 2 - valoarea 4. Această notație nu arată foarte descriptivă, dar programatorii o folosesc adesea pentru a-și scurta codul. Deci, în loc de o succesiune de comenzi:

dacă (x\u003e 0) y \u003d 45 + a * 2; // dacă declarația este discutată mai jos altfel y \u003d 45 - b * 3;

poti sa scrii:

Y \u003d 45 + ((x\u003e 0)? A * 2: -b * 3);

Operator de misiune

După ce variabila este descrisă, puteți lucra cu ea în program. În special, i se poate atribui o valoare de tipul corespunzător. Apoi, în viitor, atunci când utilizați această variabilă în orice expresie, această valoare curentă va fi înlocuită automat pentru ea.

Valoarea este asociată cu o variabilă utilizând o atribuire. În Java, este scris cu un semn egal egal:

Variabilă \u003d expresie;

O variabilă este întotdeauna specificată în stânga operatorului de atribuire. din dreapta trebuie să corespundă variabilei după tip. Poate fi simplu (de exemplu, un număr sau un simbol):

X \u003d 7; // variabilei x i se atribuie valoarea 7 litera \u003d "Q"; // litera este setată la „Q”

În general, o expresie poate fi calculată (de exemplu, rezultatul unei operații matematice sau rezultatul returnat de o metodă):

A \u003d 7,5 + 2,4; // variabilei a i se atribuie 9,9 ca urmare a calculelor

În plus față de litere, alte variabile pot participa la o expresie. Valoarea lor actuală le este substituită. Ca urmare a comenzii:

B \u003d a + 1;

variabila b va fi setată la 10.9.

Deci, operatorul de atribuire funcționează după cum urmează. În primul rând, valoarea expresiei din partea dreaptă este evaluată, iar apoi rezultatul este atribuit variabilei specificate în partea stângă. Chiar și următoarea situație este posibilă:

X \u003d x + 4;

Această comandă mărește valoarea curentă a variabilei întregi x cu 4.

Și următoarele comenzi sunt scrise incorect și nu vor funcționa:

5 \u003d x + 7; // ar trebui să existe o variabilă în stânga x + 3 \u003d 14; // doar o variabilă ar trebui să fie în stânga x \u003d 4,5; // variabila x poate lua doar valori întregi

Eclipse va încerca să indice eroarea din aceste linii înainte de a rula programul, plasând semne de avertizare în marginea editorului de cod. Puteți vedea cum o face.

despre turnarea de tip

Când unei variabile de un tip i se atribuie o valoare de alt tip, aceasta este utilizată turnare (conversie) de tipuri... Pentru tipurile numerice (octet, scurt, int, lung, float, dublu, caracter) se întâmplă automat dacă tipul variabilei care se schimbă poate „găzdui” o valoare de alt tip.

De exemplu, dacă unei variabile de tip int i se atribuie o valoare de octet de tip, va avea loc automat conversia de la octet de tip la tip int. În mod similar, tipul plutitor poate fi turnat la tipul dublu etc.

Dacă încercați să atribuiți unei variabile de tip mai puțin precis (de exemplu, octet) o valoare de tip mai precis (de exemplu, int), compilatorul va genera un mesaj de eroare.

Pentru turnarea de tip, puteți utiliza operator de distribuție - înainte de expresia pentru care dorim să realizăm conversia de tip, parantezele sunt plasate cu tipul la care se efectuează conversia, în paranteze. Când se aruncă un tip întreg de precizie mai mare la un tip întreg de precizie mai mică, diviziunea modulo poate fi efectuată de intervalul admisibil al tipului la care se efectuează turnarea, iar atunci când se aruncă o expresie dublă la o expresie float, precizia expresiei va fi redusă.

lung j \u003d (lung) 1,0; // folosiți operatorul de turnare la lungime, j \u003d 1 char ch \u003d (char) 1001; // utilizați distribuitorul pentru a încărca operatorul, ch \u003d "d" octet b2 \u003d (octet) (100); // utilizați operatorul de turnare de la int la octet, b2 \u003d 100 octet b3 \u003d (octet) (100 * 2); //Atenţie! se produce divizarea modulo, b3 \u003d -56

Eroarea de nepotrivire de tip apare adesea atunci când este aplicată literelor valide. De exemplu, nu puteți efectua atribuirea a \u003d 7,5 + 2,4; dacă variabila a este de tip float, deoarece literele 7.5 și 2.4 sunt considerate a fi duble. Pentru a evita o eroare, trebuie să utilizați castingul de tip:

A \u003d (float) (7,5 + 2,4);

sau pentru a indica faptul că literele sunt, de asemenea, plutitoare:

A \u003d 7,5f + 2,4f; // aceasta este și o comandă validă

Pentru aproape fiecare operație binară, există un alt tip de operator de atribuire. De exemplu, pentru operatorul de adăugare +, există un operator de atribuire unar + \u003d, care mărește valoarea operandului cu o anumită sumă:

X + \u003d 8; // la fel ca x \u003d x + 8 (x crește cu 8)

În mod similar pentru alte operații: operatori * \u003d, - \u003d, / \u003d,% \u003d, & \u003d ^ \u003d, etc:

X * \u003d 3; // la fel ca x \u003d x * 3 (x crește de 3 ori) b1 ^ \u003d b2; // la fel ca b1 \u003d b1 ^ b2

Exercitiul 1

Declarați două variabile întregi, atribuiți-le orice valori. Produceți suma și produsul lor.

Prompt: puteți utiliza proiectul deja creat în Eclipse inserând comenzile necesare după comandă pentru a afișa linia „Bună ziua, lume!” sau în locul ei.

Operatori de creștere și descreștere

despre operatorii de creștere și descreștere

Operatorii de creștere și descreștere ++ și –– crește și descrește valoarea operandului cu unul. Este mult mai convenabil să folosiți comanda x ++; în loc de comanda x \u003d x + 1;

De asemenea, operatorii de creștere și descreștere returnează o valoare. Aceasta înseamnă că este legal să executați comanda

Y \u003d 7 * x ++;

Ca rezultat, variabila x va crește cu 1, iar variabila y va lua o valoare de șapte ori mai mare decât valoarea veche a lui x. De asemenea, puteți rula această comandă:

Y \u003d 7 * ++ x;

Ca rezultat, variabila x va crește cu 1, iar variabila y va lua o valoare de șapte ori noua valoare a lui x.

Afirmație condițională if

Cea mai simplă formă de scriere a unui operator condiționat este:

comanda if (condition)

Condiția dintre paranteze este expresie booleană, adică poate fi adevărat sau fals. Dacă condiția se dovedește a fi adevărată, comanda va fi executată, altfel nu se va întâmpla nimic. De exemplu:

dacă (x // dacă valoarea variabilei x este mai mică de 17, atribuiți x lui 17

Dacă este necesar ca în cazul în care condiția este falsă, se execută o altă comandă, utilizați forma extinsă a instrucțiunii if:

if (condition) command1 else command2

despre celălalt dacă construcție

În exemplul de mai sus, am putea dori să atribuim variabila x la 5 dacă condiția x nu este executat (de ce avem nevoie de el, o altă întrebare).

if (x else x \u003d 5;

Dacă trebuie utilizate mai multe condiții care se exclud reciproc, acestea pot fi scrise după cum urmează:

if (condition1) command1 else if (condition2) command2 else if (condition3) command3 ... else comandaN

Exercițiul 2

Declarați două variabile întregi, atribuiți-le orice valori. Utilizați o instrucțiune if pentru a găsi și a afișa maximul acestora.

Prompt: algoritmul pentru găsirea maximului a fost luat în considerare în timp ce se repetă construcțiile de bază ale algoritmului.

Comenzi compuse

Mai multe comenzi în limbaj Java pot fi combinate într-o singură comandă compusă folosind acolade (). De exemplu, puteți scrie:

(a \u003d 12; litera \u003d "D";)

Comenzile compuse pot fi utilizate oriunde sunt comenzi obișnuite. De exemplu, într-o instrucțiune if, dacă mai multe acțiuni trebuie efectuate atunci când este îndeplinită o condiție:

if (x "S";) else (x \u003d 5;)

Construcția bretelei este, de asemenea, numită bloc de comenziiar aparatele dentare sunt blocarea limitelor.

Rețineți că notația utilizată în exemplu (atunci când limitele blocurilor sunt plasate pe linii separate, iar conținutul blocului sunt scrise indentate de la limitele sale) este opțională. Este doar o regulă de stil pentru a face programele mai ușor de înțeles și pentru a nu vă confunda de acoladele, care sunt adesea folosite într-un program Java.

despre declarația de selecție a comutatorului

Declarație de selecție de comutare

Adesea, alegerea comenzii de executat depinde de valoarea unei variabile (sau a unei expresii). De exemplu, utilizatorul este solicitat să introducă un semn de operație și, în funcție de caracterul introdus, este necesar să afișeze rezultatul adunării, scăderii etc. sau, dacă este introdus un caracter incorect, un mesaj de eroare. În acest caz, este convenabil să folosiți declarația de selecție a comutatorului, care are următoarea notație:

comutator (expresie) (valoarea cazului 1: secvența de comandă 1 pauză; valoarea cazului 2: secvența de comandă 2 pauză; ... implicit: secvența de comandă implicită)

Valoare1, valoare2 etc. sunt constante sau expresii care implică numai constante. Expresie între paranteze după cuvânt cheie comutatorul poate conține variabile. Această expresie este evaluată și apoi rezultatul este comparat cu una dintre valorile după cuvântul cheie de caz. Dacă se găsește o astfel de potrivire, atunci se execută întreaga secvență de comenzi situate între două puncte și cea mai apropiată comandă de rupere. Dacă nu se găsește nicio potrivire, se execută secvența implicită de comenzi după cuvântul cheie implicit. De exemplu:

char oper; // Semnul operației, utilizatorul îl va alege ... // Să presupunem că în acest moment utilizatorul a selectat semnul switch (oper) (case "+": System.out.println (a + b); break; case "-": System.out.println (a - b); break; case "*": System.out. println (a * b); break; implicit: System.out.println ( „Semn de tranzacție nevalid”); }

Puteți omite secțiunea implicită. În acest caz, dacă nu se găsește nicio potrivire, nu va fi executată nicio comandă.

În timp ce declarația buclă

Bucla while are următoarea formă:

comanda while (condition)

Dacă condiția parantezată (reprezentând o expresie booleană) este adevărată, comanda va fi executată - bucla corpului (poate fi o comandă simplă sau o succesiune de comenzi în acolade), după care programul va reveni la executarea acestei instrucțiuni și va repeta aceasta până când condiția este falsă.

Prin urmare, astfel încât programul să nu intre într-o buclă infinită și să nu se blocheze, corpul buclei trebuie să prevadă o opțiune de ieșire, adică, de exemplu, comenzile din corpul buclei trebuie să afecteze cumva variabilele incluse în condiție.

De exemplu, următorul fragment de cod afișează numere pare de la 2 la 10:

int x \u003d 2; în timp ce (x<= 10){ System.out.println(x); x += 2; }

bucla despre while cu postcondiție

Există un alt mod de a scrie o buclă while:

face comanda în timp ce (condiție)

Atunci când utilizați această opțiune, comanda este executată mai întâi, apoi starea este verificată. Ambele opțiuni funcționează la fel, dar în al doilea caz, corpul buclei (comanda) va fi executat cel puțin o dată, chiar dacă condiția este inițial falsă.

Exercițiul nr. 3

Utilizați o buclă de timp pentru a imprima toate numerele impare de la 1 la 10.

Prompt: schimbați ușor algoritmul pentru afișarea numerelor pare.

Pentru operator buclă

Bucla for este de obicei utilizată atunci când se știe în prealabil de câte ori trebuie repetată o comandă (sau o secvență de comenzi). Are următoarea formă:

for (comanda init; conditie; comanda jump) loop-body

Comanda de inițializare este executată înainte de începerea buclei. Apoi se verifică starea de salt (care este o expresie booleană). Dacă această condiție este adevărată, comanda (sau blocul de comenzi în acolade) care alcătuiește corpul buclei este executată. Apoi comanda jump este executată și totul începe de la capăt. Instrucțiunea de salt modifică de obicei variabila care afectează adevărul stării, iar instrucțiunea de inițializare este descrierea acestei variabile.

De obicei, o buclă for este utilizată astfel:

pentru (int i \u003d 1; i<= 10; i++) тело_цикла;

În acest exemplu, loop_body va fi executat exact de 10 ori. În acest caz, la fiecare iterație, variabila i va fi disponibilă (se numește variabila buclă), care parcurge secvențial valorile de la 1 la 10. Următorul fragment de program afișează numere pare de la 2 la 10 (similar cu exemplul buclei while):

pentru (int i \u003d 1; i<= 5; i++) System.out.println(i*2);

Exercițiul 4

Utilizați o buclă for pentru a imprima toate numerele impare de la 1 la 10.

Descărcați și continuați declarațiile

Când corpul buclei (pentru sau în timp) constă din mai multe comenzi, poate apărea o situație în care nu este nevoie să le executăm pe toate la următoarea iterație. În acest caz, declarațiile break și continue sunt utile.

Instrucțiunea break pune capăt execuției buclei curente, indiferent dacă este îndeplinită condiția de terminare a acesteia.

Instrucțiunea continue pune capăt execuției iterației curente a buclei. Adică, dacă acest operator este întâlnit în corpul buclei, atunci restul următoarelor comenzi sunt omise și începe o nouă iterație (repetare) a buclei.

Concluzie

În ciuda faptului că materialul primei lecții este destul de extins, nu ar trebui să cauzeze dificultăți elevilor care sunt deja familiarizați cu cel puțin un limbaj de programare, deoarece construcțiile din toate limbile sunt aceleași și este necesar doar să stăpânești regulile pentru scrierea lor (sintaxă). Dacă cunoștința cu alte limbaje de programare a fost slabă, aveți nevoie de mai multe teme pentru manual și soluția sarcinilor suplimentare. Cea mai bună opțiune în acest caz este să citiți capitolele recomandate din literatură înainte de următoarea lecție.

literatură suplimentară

1. Vyazovik N.A. Programare Java. (capitolele 1 - 4, 7, 10)

2. Khabibullin I.Sh. Java Self Tutorial 2. (Capitolul 1)

Acordați o atenție specială tipurilor de date Java și regulilor de turnare, care nu sunt tratate în detaliu în acest tutorial. Un programator profesionist ar trebui să controleze întotdeauna în programele sale posibilitatea unei valori variabile care să depășească intervalul permis pentru tipul său. Erorile de tipografiere sunt una dintre cele mai frecvente și dificil de detectat. Capitolele 4 și 7 din prima carte sunt foarte recomandate pentru toți elevii care solicită o notă excelentă.

De la inventarea Java până la actualizarea sintaxei și funcțiilor, există câteva etape importante de remarcat:

  • Java 1.0: Începutul unui limbaj de programare.
  • Java 1.1, 1.2, 1.3, 1.4nu multe schimbări în sintaxă și funcție.
  • Java 1.5 (Sau Java 5) au existat schimbări mari împreună cu adăugarea unor concepte noi.
    • Generic
    • Autoboxing / Unboxing
    • Actualizare funcție ciclu pentru ("pentru fiecare").
    • Tipuri de transfer. (Enumerări sigure de tip).
    • Varargs (Argumente variabile)
    • Import static
    • Metadate
  • Java 6.7 nu există schimbări mari în limbă.
  • Java 8 a existat o mare schimbare în limbă, împreună cu adăugarea unor concepte și funcții noi:
    • Metode de interfață implicite
    • Expresii Lambda
    • Metode de referință
    • Adnotări repetabile
    • Curent

În acest articol, vă voi prezenta funcțiile și sintaxele Java 8.

2- Metode implicite de interfață

Java 8 vă permite să adăugați o metodă non-vizuală la interfață utilizând cuvântul cheie mod implicit... Aceste metode sunt înțelese ca metode avansate... Acesta este primul dvs. exemplu:

Pachetul org.o7planning.tutorial.j8.itf; interfață publică Formula (// Declarați o metodă abstractă. double calculate (int a); // Declarați o metodă non-abstractă. // Utilizați cuvântul cheie implicit. // (Funcția calculează rădăcina pătrată a unui număr). implicit sqrt dublu (int a) (return Math .sqrt (a);))

Și clasa FormulaImplimplementează interfața Formulă .

FormulaImpl.java

Pachetul org.o7planning.tutorial.j8.itf; // Clasa execută interfața Formula. public class FormulaImpl implementează Formula (// Trebuie doar să executați metoda abstractă Formula. @Override public double calculate (int a) (returnează a * a - a;))

FormulaTest.java

Pachetul org.o7planning.tutorial.j8.itf; public class FormulaTest (public static void main (String args) (Formula formula \u003d new FormulaImpl (); // \u003d\u003d\u003e 5 double value1 \u003d formula.sqrt (25); System.out.println ("Value1 \u003d" + value1) ; // \u003d\u003d\u003e 600 valoare dublă2 \u003d formula.calculate (25); System.out.println ("Valoare2 \u003d" + valoare2);))

3- Interfață funcțională

Java8 crede că interfețele au o metodă abstractă - aceasta este Interfață funcțională (interfață funcțională). Puteți utiliza adnotarea @FuctionalInterfacepentru a marca interfața dvs. ca o interfață funcțională, aceasta este opțională. Cu toate acestea, compilatorul (complier) Javavă va notifica o eroare dacă adăugați accidental o altă metodă abstractă la interfața marcată cu această adnotare.

Mai jos sunt câteva exemple practice cu @FunctionalInterface:

Exemplul de mai jos este valid FunctionalInterface deoarece are o singură metodă abstractă.

Pachetul org.o7planning.tutorial.j8.funcitf; @FunctionalInterface public interface Foo (void something (); default void defaultMethod () (System.out.println ("..");))

Invalid:



Într-adevăr:



Invalid:



Într-adevăr:



4- Expresie Lambda

Mai întâi ne uităm la modul în care se organizează Java înainte de versiunea 8 Colectie .

Vezi si:

SortBefore8Example.java

Pachetul org.o7planning.tutorial.j8.lambda; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; public class SortBefore8Example (public static void main (String args) (// Lista fructelor. Lista fruits \u003d Arrays.asList ("Grapefruit", "Apple", "Durian", "Cherry"); // Utilizați metoda utilitarului Colecții // pentru a redistribui colecția. // Furnizați un comparator. Collections.sort (fructe, noul comparator () (@Override public int compare (String o1, String o2) (return o1.compareTo (o2);))); for (String fruit: fruits) (System.out.println (fruit);)))

Rezultatul executării exemplului de mai sus:



Java 8 consideră că interfețele au o singură metodă, care este o interfață funcțională ( Interfață funcțională). În consecință, atunci când implementați o interfață, trebuie doar să scrieți o metodă care implementează această metodă abstractă unică. Comparator este o interfață care are o singură metodă abstractă și este o interfață funcțională ( Interfață funcțională). Puteți rescrie exemplul de mai sus cu sintaxa Lambda Java 8:

SortJava8Example.java

Pachetul org.o7planning.tutorial.j8.lambda; import java.util.Arrays; import java.util.Collections; import java.util.List; public class SortJava8Example (public static void main (String args) (// Lista fructelor. Lista fruits \u003d Arrays.asList ("Grapefruit", "Apple", "Durian", "Cherry"); // Utilizați metoda utilitarului Colecții pentru a redistribui lista de mai sus. // Furnizați un comparator pentru al doilea parametru al metodei. // Deoarece Comparator este o interfață cu o singură metodă. // \u003d\u003d\u003e Poate fi abreviat cu expresia Lambda. // Nu trebuie să scrieți numele interfeței, // Nu trebuie să scrieți numele metodei. Collections.sort (fructe, (String o1, String o2) -\u003e (returnează o1.compareTo (o2);)); for (String fruit: fruits) (System.out.println (fruit);)))

Într-un bloc de comandă, dacă există o singură comandă, puteți elimina () și puteți scrie această secțiune de cod într-un mod mai concis.

Collections.sort (fructe, (String o1, String o2) -\u003e o1.compareTo (o2));

Chiar și compilatorul (compilatorul) Javasuficient de inteligent pentru a-ți da seama ce fel de articole trebuie să organizezi, în acest exemplu este vizualizarea Şir... Astfel, comparatorul ( Comparator ) înseamnă cu siguranță compararea tipurilor de date Şir... Îl poți scrie mai succint.

Collections.sort (fructe, (o1, o2) -\u003e o1.compareTo (o2));

Alte exemple cu expresie Lambda.

Pachetul org.o7planning.tutorial.j8.lambda; Convertor de interfață publică @FunctionalInterface (Converti T (F din);)

Utilizați interfața Convertor ca Java înainte de versiunea 8 (ceea ce înseamnă că nu utilizați Lambda).

ConverterBefore8Example.java

Pachetul org.o7planning.tutorial.j8.lambda; public class ConverterBefore8Example (public static void main (String args) (// Inițializați convertorul. Obiectul Converter convertor \u003d convertor nou () (@Override public Integer convert (String from) (return Integer.parseInt (from);)); // \u003d\u003d\u003e 100 Integer value \u003d converter.convert ("0100"); System.out.println ("Valoare \u003d" (! LANG: + valoare);))

Utilizarea expresiei Lambda pe Java 8:

ConveterJava8Example.java

Pachetul org.o7planning.tutorial.j8.lambda; public class ConveterJava8Example (public static void main (String args) (// Convertorul este FunctionalInterface // Utilizați sintaxa Java 8 (Lambda) // În caz: Creați obiect direct din FunctionalInterface. Convertor converter1 \u003d (Șir din) -\u003e (returnează Număr întreg.parseInt (din);); // \u003d\u003d\u003e 100 Integer value1 \u003d converter1.convert ("0100"); System.out.println("Value1 = " + value1); // Или проще: Converter!} converter2 \u003d (din) -\u003e Număr întreg .parseInt (din); // \u003d\u003d\u003e 200 Integer value2 \u003d converter2.convert ("00200"); System.out.println ("Value2 \u003d" + value2); // Dacă metoda are un singur parametru, puteți sări peste (). Convertor converter3 \u003d from -\u003e Integer .parseInt (from); // \u003d\u003d\u003e 300 Integer value3 \u003d converter3.convert ("00300"); System.out.println ("Value3 \u003d" + value3); )))

5- API de interfață funcțională

5.1- java.util.function.Consumer

Consumator (Consumator) Java 8... Are o singură metodă abstractă care ia un parametru de intrare, iar această metodă nu returnează nimic.

Pachet java.util.function; import java.util.Objects; Interfață publică @FunctionalInterface Consumer (// Metoda ia un parametru de intrare și returnează nimic.void accept (T t);)

Utilizarea metodei List.forEach (Consumer) :

// java.util.List extinde java.util.Collection (extinde Iterable) // Interfață java.util.Iterable: implicit void forEach (Consumer action) (Objects.requireNonNull (action); for (T t: this) (action.accept (t);))

ConsumerExample.java

Pachetul org.o7planning.tutorial.j8.api; import java.util.Arrays; import java.util.List; import java.util.function.Consumer; public class ConsumerExample (// Utilizați metoda List.forEach (Consumer) cu sintaxă Java< 8. // Напечатать список элементов List. public static void beforeJ8() { List list \u003d Arrays.asList ("a", "b", "c", "a1", "a2"); list.forEach (nou consumator () (@Override public void accept (String t) (System.out.println (t);))); ) // Utilizați metoda List.forEach (Consumer) cu sintaxa în Java 8. // Folosind o expresie Lambda. public static void java8Consumer () (List list \u003d Arrays.asList ("a", "b", "c", "a1", "a2"); list.forEach ((String t) -\u003e (System.out.println (t);)); ) // Utilizați metoda List.forEach (Consumer) cu sintaxa în Java 8. // Folosind o expresie Lambda. // (Simpler) public static void java8ConsumerMoreSimple () (List list \u003d Arrays.asList ("a", "b", "c", "a1", "a2"); list.forEach ((String t) -\u003e System.out.println (t)); )))

5.2- java.util.function.Predicate

Predicat este o interfață funcțională accesibilă Java 8... Are o singură metodă abstractă care ia un parametru de intrare și metoda returnează o valoare boolean (adevarat fals). Această metodă este utilizată pentru a evalua dacă un parametru de intrare este potrivit pentru ceva boolean sau nu.

Pachet java.util.function; import java.util.Objects; @FunctionalInterface interfață publică Predicat (// Evaluează parametrul de intrare și returnează adevărat sau fals. Test boolean (T t);)

În exemplul următor, vom filtra lista numerelor întregi impare folosind Predicatluând forma Java8 și versiunile anterioare.

PredicateExample.java

Pachetul org.o7planning.tutorial.j8.api; import java.util.Arrays; import java.util.List; import java.util.function.Predicate; import java.util.stream.Stream; public class PredicateExample (// Utilizați Stream.filter (Predicate ) prin sintaxă în Java< 8. // Отфильтровать список целых чисел и напечатать нечетные числа. public static void beforeJ8() { List stream2 \u003d stream.filter (nou Predicat () (@Override public boolean test (Integer t) (returnează t% 2 \u003d\u003d 1;))); ) // Utilizați metoda Stream.filter (Predicat ) prin sintaxa Java\u003e \u003d 8. // Filtrează lista numerelor întregi și tipărește numere impare. // Utilizarea unei expresii Lambda. public static void java8Predicate () (List list \u003d Arrays.asList (1, 4, 5, 1, 7, 8); // Fluxul conține elementele listei de mai sus. Curent stream \u003d list.stream (); // Noul flux conține doar numere impare. Curent stream2 \u003d stream.filter (t -\u003e (returnează t% 2 \u003d\u003d 1;)); // Stream.forEach (Consumer ) stream2.forEach (t -\u003e System.out.println (t)); ) // Chiar mai simplu și mai scurt. public static void java8ConsumerMoreSimple () (List list \u003d Arrays.asList (1, 4, 5, 1, 7, 8); // Fluxul conține elementele listei de mai sus. Curent stream \u003d list.stream (); stream.filter (t -\u003e t% 2 \u003d\u003d 1) .forEach (t -\u003e System.out.println (t)); )))

5.3- java.util.function.Function

Funcţie este o interfață funcțională accesibilă Java 8... Are o singură metodă abstractă care ia un parametru de intrare, iar metoda returnează un alt obiect.

Pachet java.util.function; import java.util.Objects; Interfață publică @FunctionalInterface Funcție (// Această metodă ia un parametru. // Returnează o valoare R aplicată (T t);)

Exemplu: dat o listă Şir, imprimare Şir într-o listă cu litere mari

FunctionExample.java

Pachetul org.o7planning.tutorial.j8.api; import java.util.Arrays; import java.util.List; import java.util.function.Function; import java.util.stream.Stream; public class FunctionExample (// Utilizați metoda Stream.map (Function) cu sintaxa Java< 8. // Напечатать список элементов List. public static void beforeJ8() { List stream \u003d list.stream (); // Stream.map (Funcție): // Curent hartă (Funcția cartograf); // Returnează un flux nou, cu elemente modificate. Curent streamUpper \u003d stream.map (funcție nouă () (@Override public String apply (String t) (return t \u003d\u003d null? Null: t.toUpperCase ();))); streamUpper.forEach (t -\u003e System.out.println (t)); ) public static void java8Function () (List list \u003d Arrays.asList ("a", "c", "B", "e", "g"); // Fluxul conține elemente de listă. Curent stream \u003d list.stream (); stream.map (t -\u003e t \u003d\u003d null? null: t.toUpperCase ()). forEach (t -\u003e System.out.println (t)); ) public static void main (String args) (beforeJ8 (); java8Function ();))

Interfețe funcționale similare:

  • java.util.function.IntFunction
  • java.util.function.DoubleFunction
  • java.util.function.LongFunction

@FunctionalInterface interfață publică IntFunction (R se aplică (valoarea int);) Interfață publică @FunctionalInterface LongFunction (Se aplică R (valoare lungă);) @FunctionalInterface interfață publică DoubleFunction (Se aplică R (valoare dublă);)

5.4- java.util.function.Supplier

Furnizor este o interfață funcțională accesibilă Java 8... Are o singură metodă abstractă fără parametru, iar metoda returnează un obiect.

Pachet java.util.function; @FunctionalInterface Furnizor de interfață publică (// Această metodă nu are parametri. // Dar returnează un rezultat. T get ();)

SupplierExample.java

Pachetul org.o7planning.tutorial.j8.api; import java.util.function.Supplier; public class SupplierExample (// Metoda cu parametrul Furnizor ... afișare publică statică nulă (Furnizor supp) (System.out.println (supp.get ());) // Nu se utilizează expresia Lambda. public static void beforeJ8 () (display (nou furnizor () (@Override public String get () (returnează "Bună ziua";))); display (nou furnizor () (@Override public String get () (returnează „Lumea”;))); ) // Utilizarea expresiei Lambda. public static void java8Supplier () (display (() -\u003e (return "Hello";)); display (() -\u003e (return "World";));) // Folosind expresia Lambda. // (Și mai scurt). public static void java8SupplierShortest () (display (() -\u003e "Hello"); display (() -\u003e "World");) public static void main (String args) (beforeJ8 (); System.out.println (" ----------- "); java8SupplierShortest ();))

Int a și b și returnează valoarea int.

MyFunction.java

Pachetul org.o7planning.tutorial.j8.mref; @FunctionalInterface public interface MyFunction (// Această metodă are 2 parametri a, b și returnează int.public int doSomething (int a, int b);)

MyMathUtils este o clasă cu două metode statice utilizate pentru a calcula suma și diferența a două numere int.

MyMathUtils.java

Pachetul org.o7planning.tutorial.j8.mref; public class MyMathUtils (// Această metodă are 2 parametri a, b și returnează int. // Această metodă are un nume diferit, // dar structura este similară cu MyFunction.doSomething (int, int). public static int sum (int a, int b) (returnează a + b;) public static int minus (int a, int b) (returnează a - b;))

MethodReferenceExample.java

Pachetul org.o7planning.tutorial.j8.mref; public class MethodReferenceExample (// Al treilea parametru al acestei metode este MyFunction (Interfață funcțională). // Când utilizați această metodă: // Puteți trece o referință de metodă pentru al treilea parametru. // (Metodele trebuie să fie de același tip ca MyFunction). public static int action (int a, int b, MyFunction func) (return func.doSomething (a, b);) public static void main (String args) (int a \u003d 100; int b \u003d 30; // Pass method reference MyMathUtils.sum . int c \u003d acțiune (a, b, MyMathUtils :: sum); // \u003d\u003d\u003e 130. System.out.println ("c \u003d" + c); // Treceți referința metodei la MyMathUtils.minus. int d \u003d action (a, b, MyMathUtils :: minus); // \u003d\u003d\u003e 70 System.out.println ("d \u003d" + d); // Treceți o referință la metoda Math.subtractExact. int e \u003d acțiune (a, b, Math :: subtractExact); // \u003d\u003d\u003e 70 System.out.println ("e \u003d" + e); // Treceți referința metodei Math.min. int f \u003d acțiune (a, b, Math :: min); / / \u003d\u003d\u003e 30 System.out.println ("f \u003d" + f);))

Urmând exemplul de mai sus, puteți vedea utilizarea cuvântului cheie :: pentru a trece referința metodei. Dacă apelezi o metodă și această metodă are un argument Interfață funcțională, puteți trece o metodă de referință cu o structură similară cu metoda de definiție din Interfață funcțională.