Počítače Okna Internet

Podmíněné konstrukce. Stránka serveru Java. Syntaxe stránky JSP

Stránky JSP mají kombinovanou syntaxi: kombinaci standardní syntaxe, jak je definována specifikací HTML, a syntaxe JSP, jak je definována specifikací Java Server Stránky. Syntaxe JSP definuje pravidla pro psaní stránek JSP složených ze standardních značek HTML a značek JSP.

Stránky JSP kromě značek HTML obsahují značky JSP následujících kategorií:

Směrnice JSP

Směrnice JSP poskytnout globální informace týkající se konkrétních požadavků odeslaných na server a poskytnout informace potřebné ve fázi překladu. Směrnice jsou vždy umístěny na začátek stránky JSP před všechny ostatní značky, takže analyzátor(analyzátor) JSP při analýze textu na úplném začátku zvýraznil globální pokyny. JSP Engine (JSP runtime) tedy analyzuje kód a vytvoří servlet z JSP. Směrnice jsou zprávy do kontejneru JSP.

Syntax Směrnice JSP jak následuje:

<%@ директива имяАтрибута="значение" %>

Syntaxe úkolu směrnic v XML:

Směrnice JSP může mít více atributů. V tomto případě lze směrnici opakovat pro každý z atributů. Přitom páry "Název atributu = hodnota" může být umístěn pod jednou směrnicí s mezerou jako oddělovač.

Existují tři typy směrnic:

  • stránka (stránka)
  • taglib (knihovna tagů)
  • zahrnout (zahrnout)

Směrnice stránky JSP

Směrnice stránky JSP definuje vlastnosti stránky JSP, které ovlivňují překladač. Pořadí atributů ve směrnici strana nevadí. Porušení syntaxe nebo přítomnost nerozpoznaných atributů má za následek chybu překladu. Příklad směrnice strana může sloužit následující kód:

<%@ page buffer="none" isThreadSafe="yes" errorPage="/error.jsp" %>

Směrnice stránky to deklaruje tato stránka JSP nepoužívá ukládání do vyrovnávací paměti, což umožňuje současný přístup k danému Stránka JSP mnoho uživatelů, a to chybová stránka se jménem error.jsp.

Směrnice stránky JSP může obsahovat informace o stránce:

<%@ page info = "JSP Sample 1" %>

Seznam možných atributů direktivy strana uvedené v tabulce.

Název atributuVýznam Popis
Jazyk Čára Určuje jazyk používaný v skriptech, výrazech nebo v souborech JSP, včetně těla přeloženého kódu. Výchozí hodnota je "java"
rozšiřuje Čára Určuje nadtřídu pro generovaný servlet. Tento atribut by měl být používán s velkou opatrností, protože je možné, že server již používá nadtřídu.
import Čára Definice balíků k importu, například:
<%@ page import="java.util.* %>
Zasedání pravda nebo lež Význam skutečný(výchozí) označuje předdefinovanou proměnnou zasedání(typ HttpSession) musí být svázán s existující relací, pokud existuje, jinak je vytvořena nová relace a je k ní vázáno. Význam Nepravdivé určuje, že relace nebudou použity, a pokusí se získat přístup k proměnné zasedání způsobí chybu při překladu stránky JSP na servlet
Vyrovnávací paměť žádný nebo velikost vyrovnávací paměti v kB. Nastaví velikost vyrovnávací paměti pro JspWriter. Výchozí hodnota závisí na nastavení serveru a neměla by překročit 8 kB. Pokud je hodnota žádný výstup jde přímo k objektu ServletResponse
autoFlush pravda nebo lež Určuje, zda má být vyrovnávací paměť automaticky vyprázdněna, když přeteče, nebo dojde k chybě. Výchozí hodnota skutečný
isThreadSafe pravda nebo lež Význam skutečný(výchozí) určuje normální režim spouštění servletu, kde je zpracováváno více požadavků souběžně pomocí jediné instance servletu, za předpokladu, že autor má synchronizovaný přístup k proměnným této instance. Falešná hodnota signalizuje, že by servlet měl dědit Model s jedním vláknem(model s jedním vláknem), kde jsou sekvenční nebo souběžné požadavky zpracovávány samostatnými instancemi servletu
informace Čára Definuje řetězec informací o stránce JSP, ke které se bude přistupovat pomocí metody Servlet.getServletInfo ()
errorPage Čára Hodnota atributu je adresa URL stránky, která by se měla zobrazit v případě možných chyb, které způsobují výjimky
jeErrorPage pravda nebo lež Signalizuje, zda lze tuto stránku použít ke zpracování chyb pro jiné stránky JSP. Výchozí hodnota je Nepravdivé
typ obsahu Čára Určuje kódování stránky a odpovědi JSP a typ MIME odpovědi JSP. Výchozí hodnota typu obsahu je text / html, kódování - ISO-8859-1. Například:
contentType = "text / html; charset = ISO-8859-1"
stránka Kódování Čára Určuje kódování znaků stránky JSP. Výchozí hodnota je znaková sada z atributu typ obsahu pokud je to tam definováno. Pokud hodnota znaková sada v atributu typ obsahu nedefinováno, hodnota stránka Kódování je nastavena na stejnou hodnotu ISO-8859-1

JSP taglib směrnice

Směrnice JSP taglib prohlašuje, že daná stránka JSP používá knihovnu značek, jednoznačně ji identifikuje pomocí identifikátoru URI a mapuje předponu značky, podle které lze s knihovnou jednat. Pokud kontejner nemůže najít knihovnu značek, dojde k závažné chybě překladu.

Směrnice taglib má následující syntaxi:

<%@ taglib uri="URI zahrnuté knihovny značek"prefix =" název předpony" %>

Předpona " název předpony"se používá při odkazování na knihovnu. Příklad použití knihovny značek." mytags:

<%@ taglib uri="http://www.taglib/mytags" prefix="customs" %> . . .

V tomto případě má knihovna značek identifikátor URI "http: //www.taglib/mytags", řetězec je přiřazen jako předpona celní který se používá na stránce JSP při přístupu k prvkům knihovny značek.

JSP zahrnout směrnici

Směrnice JSP zahrnout umožňuje vložit text nebo kód při překladu stránky JSP do servletu. Syntaxe směrnice zahrnout vypadá takto:

<%@ include file="Relativní URI stránky, kterou chcete zahrnout" %>

Směrnice zahrnout má jeden atribut - soubor... Obsahuje text zadaného zdroje v souboru JSP. Tuto směrnici lze použít k umístění standardní hlavičky autorských práv na každou stránku JSP:

<%@ include file="copyright.html" %>

Kontejner JSP přistupuje k souboru pro zahrnutí. Pokud se soubor zahrnutí změnil, kontejner může znovu zkompilovat stránku JSP. Směrnice zahrnout považuje zdroj, jako je stránka JSP, za statický objekt.

Daný URI je obvykle interpretován relativně k JSP stránky, na které je odkaz umístěn, ale jako u každého jiného relativního URI můžete systému sdělit pozici zdroje zájmu vzhledem k domovskému adresáři WEB serveru podle prefix URI se znakem "/". Obsah souboru include je považován za prostý text JSP, a proto může obsahovat prvky, jako je statický HTML, prvky skriptu, směrnice a akce.

Mnoho webů používá na každé stránce malý navigační panel. Kvůli problémům s používáním rámců HTML je tento úkol často vyřešen umístěním malé tabulky na začátek nebo do levé poloviny stránky, jejíž kód HTML se pro každou stránku webu mnohokrát opakuje. Směrnice zahrnout- toto je nejpřirozenější způsob, jak tento problém vyřešit, ušetřit vývojáře před noční můrou rutiny kopírování HTML do každého samostatného souboru.

Od směrnice zahrnout zahrnuje soubory během překladu stránky, poté je po provedení změn na navigačním panelu vyžadován opětovný překlad všech stránek JSP, které jej používají. Pokud se připojené soubory poměrně často mění, můžete akci použít jsp: zahrnout který spojuje soubor při přístupu na stránku JSP.

Směrnice deklarace JSP

Směrnice JSP prohlášení jsou určeny k definování proměnných a metod ve skriptovacím jazyce, které jsou později použity na stránce JSP. Syntax prohlášení vypadá takto:

<%! код Java %>

prohlášení jsou umístěny v deklaračním bloku a jsou volány v expresním bloku stránky JSP. Kód v deklaračním bloku je obvykle napsán v Javě, ale aplikační servery mohou používat syntaxi jiných skriptů. reklamy se někdy používají k přidání dalších funkcí při práci s dynamickými daty získanými z vlastností komponent JavaBeans. Příklady reklamy jsou uvedeny v tabulce.

Prohlášení může obsahovat více řádků, například v níže uvedeném kódu pro výpočet hodnoty funkce fakt (int n), která by se měla rovnat 1, když n je menší než 2 a n! s kladnou hodnotou n;

<%! public static int fact (int n) { if (n <= 1) return 1; else return n * fact (n - 1); } %>

prohlášení neprodukujte žádný výstup na standardní výstup ven... Proměnné a metody deklarované v deklaracích jsou inicializovány a zpřístupněny skriptletům a dalším reklamy v době inicializace stránky JSP.

Skriptlety skriptlety

skriptlety obsahovat různé části kódu napsané ve skriptovacím jazyce definovaném ve směrnici Jazyk... Fragmenty kódu musí vyhovovat syntaktickým konstrukcím jazyka skriptlety, tj. obvykle syntaxe jazyka Java. skriptlety mít následující syntaxi:

<% текст скриптлета %>

Ekvivalent syntaxe skriptlet pro XML je:

text skriptů

Pokud v textu skriptlet je nutné použít posloupnost znaků%> přesně jako kombinaci znaků, a ne jako značku - znak konce skriptlet, místo posloupnosti%> použijte následující kombinaci znaků% \>.

Specifikace JSP poskytuje jednoduchý a přímý příklad skriptlet který dynamicky mění obsah stránky JSP po celý den.

<% if (Calendar.getInstance ().get (Calendar.AM_PM) == Calendar.AM) {%>Dobré ráno<% } else { %>Dobré odpoledne<% } %>

Je třeba poznamenat, že kód uvnitř skriptlet vložen jako napsaný a veškerý statický text HTML (text šablony) před nebo za skriptlet převedeny pomocí operátoru tisk... To znamená, že skripty nemusí obsahovat dokončené bloky Java a že ponechané otevřené bloky mohou ovlivnit statický HTML mimo skriptlet.

Skripty mít přístup ke stejným automaticky definovaným proměnným jako výrazy. Proto například pokud je na stránce potřeba zobrazit jakékoli informace, musíte použít proměnnou ven.

<% String queryData = request.getQueryString (); out.println ("Дополнительные данные запроса: " + queryData); %>

Výrazy výrazy

Výrazy výrazy na stránce JSP spustitelný výraz napsaný ve skriptovacím jazyce uvedeném v deklaraci jazyka (obvykle Java). Výsledek výrazy JSP, který je požadovaného typu String, je odeslán do standardního výstupního proudu ven pomocí aktuálního objektu JspWriter... Pokud je výsledek výrazy nelze obsadit Tětiva, buď dojde k chybě překladu, pokud byl problém zjištěn ve fázi překladu, nebo je vyvolána výjimka ClassCastException pokud byla při provádění požadavku zjištěna nesrovnalost. Výraz má následující syntaxi:

<%= текст выражения %>

alternativní syntaxe pro JSP výrazy při použití XML:

výrazový text

Exekuční příkaz výrazy na stránce JSP zleva doprava. Li výraz se objevuje ve více než jednom atributu run-time, poté v této značce běží zleva doprava. Výraz musí být úplný výraz v konkrétním skriptu (obvykle Java).

výrazy jsou prováděny za běhu protokolu HTTP. Hodnota výrazu je převedena na řetězec a zahrnuta na příslušném místě v souboru JSP.

Výrazy se běžně používají k výpočtu a zobrazení řetězcové reprezentace proměnných a metod definovaných v bloku deklarace stránky JSP nebo odvozených z JavaBeans, které jsou přístupné z JSP. Následující kód výrazy slouží k zobrazení data a času požadavku na stránku:

Aktuální čas:<%= new java.util.Date () %>

Aby se to zjednodušilo výrazy existuje několik předdefinovaných proměnných, které můžete použít. Nejčastěji používané proměnné jsou:

  • požadavek, HttpServletRequest;
  • odpověď, HttpServletResponse;
  • relace, HttpSession - související s žádostí, pokud existuje;
  • ven, PrintWriter - vyrovnávací verze typu JspWriter pro odesílání dat klientovi.

Jedním ze základních prvků mnoha programovacích jazyků je podmíněné stavby... Tyto konstrukce vám umožňují směrovat práci programu po jedné z cest, v závislosti na určitých podmínkách.

Jazyk Java používá následující podmínky: if..else and switch..case

If / else konstruovat

Výraz if / else zkontroluje pravdivost určité podmínky a v závislosti na výsledcích testu provede určitý kód:

Int num1 = 6; int num2 = 4; if (num1> num2) (System.out.println („První číslo je větší než druhé“);)

Za klíčové slovo if je umístěna podmínka. A pokud je tato podmínka splněna, spustí se kód, který je umístěn dále v bloku if po složených závorkách. Operace porovnávání dvou čísel funguje jako podmínka.

Protože v tomto případě je první číslo větší než druhé, výraz num1> num2 je true a vrací true. V důsledku toho řízení po složených závorkách přejde do bloku kódu a začne vykonávat tam obsažené pokyny, konkrétně metodu System.out.println („První číslo je větší než druhé“); ... Pokud by první číslo bylo menší nebo rovno druhému, pak by příkazy v bloku if nebyly provedeny.

Ale co když chceme, aby byla provedena nějaká akce, pokud podmínka není splněna? V tomto případě můžeme přidat jiný blok:

Int num1 = 6; int num2 = 4; if (num1> num2) (System.out.println ("První číslo je větší než druhé");) else (System.out.println ("První číslo je menší než druhé");

Int num1 = 6; int num2 = 8; if (num1> num2) (System.out.println ("První číslo je větší než druhé");) else if (num1

Můžeme také kombinovat několik podmínek najednou pomocí logických operátorů:

Int num1 = 8; int num2 = 6; if (num1> num2 && num1> 7) (System.out.println ("První číslo je větší než druhé a větší než 7");)

Zde bude proveden blok if, pokud num1> num2 je true a současně num1> 7 je true.

Přepnout konstrukci

Design vypínač / pouzdro je podobná konstrukci if / else, protože vám umožňuje zpracovat několik podmínek najednou:

Int num = 8; switch (num) (case 1: System.out.println ("number is 1"); break; case 8: System.out.println ("number is 8"); num ++; break; case 9: System. out. println ("číslo je 9"); zlom; výchozí: System.out.println ("číslo není 1, 8, 9");)

Porovnávaný výraz následuje za klíčovým slovem switch v závorkách. Hodnota tohoto výrazu se postupně porovnává s hodnotami za operátorem případu. A pokud je nalezena shoda, bude proveden konkrétní blok případů.

Příkaz break je umístěn na konec bloku případů, aby se zabránilo provádění dalších bloků. Pokud byl například příkaz break odebrán v následujícím případě:

Případ 8: System.out.println ("číslo je 8"); num ++; případ 9: System.out.println ("číslo je 9"); přestávka;

pak protože naše proměnná num se rovná 8, pak by byl proveden blok případu 8, ale protože v tomto bloku je proměnná num zvýšena o jednu, neexistuje žádný příkaz break, pak by se začal spouštět blok case 9.

Pokud chceme také zvládnout situaci, když není nalezena shoda, můžeme přidat výchozí blok, jako v příkladu výše. Výchozí blok je však volitelný.

Počínaje JDK 7 ve výrazu switch..case můžete kromě primitivních typů použít také řetězce:

Balíček první aplikace; import java.util.Scanner; public class FirstApp (public static void main (String args) (Scanner in = new Scanner (System.in); System.out.println ("Enter Y or N:"); String input = in.nextLine (); switch ( vstup) (případ „Y“: System.out.println („Stiskli jste písmeno Y“); zlom; případ „N“: System.out.println („Stiskli jste písmeno N“); konec; výchozí: Systém .out .println („Stiskli jste neznámé písmeno“);)))

Ternární operace

Ternární operace má následující syntaxi: [první operand je podmínka]? [druhý operand]: [třetí operand]. Do této operace jsou tedy zapojeni tři operandi najednou. V závislosti na podmínce vrátí ternární operace druhý nebo třetí operand: pokud je podmínka pravdivá, vrátí se druhý operand; pokud je podmínka nepravdivá, pak třetí. Například:

Int x = 3; int y = 2; int z = x

Zde je výsledkem ternární operace proměnná z. Za prvé, podmínka x

Když vezmeme v úvahu java program, může být definován jako kolekce objektů, které interagují voláním metod navzájem. Nyní to krátce pochopíme Syntaxe Java co znamenají proměnné třídy, objektu, metod a instancí.

Objekt- objekty mají stav a chování. Například: pes může mít stav - barvu, jméno i chování - kývnout, běhat, štěkat, jíst. Objekt je instancí třídy.

Třída- lze definovat jako šablonu, která popisuje chování objektu.

Metoda- je především chování. Třída může obsahovat více metod. Logicky zaznamenaná data jsou manipulována a prováděna v metodách.

Proměnné instance- každý objekt má svou vlastní jedinečnou sadu proměnných instance. Stav objektu je generován hodnotami přiřazenými těmto instančním proměnným.

První program a znalost syntaxe jazyka

Podívejme se na jednoduchý kód, který zobrazí slova „Hello world!“ A pro jednoho syntaxe Java.

Veřejná třída MyFirstJavaProgram (public static void main (String args) ( / * Toto je můj první java program. Provedení zobrazí „Hello world!“ * / System.out.println („Hello world!“); / / Zobrazení zprávy na obrazovce))

  • Otevřete poznámkový blok a přidejte kód výše.
  • Uložte soubor jako „MyFirstJavaProgram.java“. Níže se podíváme na syntaxi Javy a zjistíme, proč pod tímto názvem.
  • Otevřete okno příkazového řádku a přejděte do adresáře, kam byl soubor uložen. Předpokládejme, že je to „C: \“.
  • Zadejte „Javac MyFirstJavaProgram.java“ a stisknutím klávesy Enter zkompilujte kód. Pokud v kódu není žádná chyba, příkazový řádek vás přenese na následující řádek: (Předpoklad: Je nastavena proměnná cesty).
  • Nyní spusťte program „java MyFirstJavaProgram“.
  • V okně se nyní zobrazí „Hello World!“.
C:> javac MyFirstJavaProgram.java C:> java MyFirstJavaProgram Ahoj světe!

Základy syntaxe Javy

Je velmi důležité znát a pamatovat si následující body syntaxe:

  • Rozlišování malých a velkých písmen - Java rozlišuje velká a malá písmena, což znamená, že Hello a hello mají různé významy.
  • Názvy tříd - u všech musí být první písmeno velké.
  • Pokud je k vytvoření názvu třídy použito více slov, musí být první písmeno každého vnitřního slova velká, například „MyJavaClass“.
  • Názvy metod - V syntaxi Javy musí všechny názvy metod začínat malým písmenem.
  • Pokud je k vytvoření názvu metody použito více slov, pak musí být první písmeno každého vnitřního slova velké, například „public void myMethodName ()“.
  • Název souboru programu - název souboru programu musí přesně odpovídat s názvem třídy.
  • Při ukládání souboru jej musíte uložit pomocí názvu třídy (pamatujte na rozlišování malých a velkých písmen) a na konec názvu přidat „.java“ (pokud se názvy neshodují, váš program nebude kompilovat), například „ MyJavaProgram "je název třídy, pak by měl být soubor uložen jako„ MyJavaProgram.java ".
  • public static void main (String args) - zpracování programu začíná metodou Main (), která je povinnou součástí každého programu.

Java identifikátory

Identifikátory- názvy používané pro třídy, proměnné a metody. Všechny komponenty Java vyžadují názvy.

Existuje několik pravidel v syntaxi Java, která je třeba mít na paměti ohledně identifikátoru. Jsou následující:

  • Každý identifikátor musí začínat „A“ až „Z“ nebo „a“ až „z“, „$“ nebo „_“.
  • Za prvním znakem může být jakákoli kombinace znaků.
  • Klíčové slovo nelze použít jako identifikátor.
  • Nejdůležitější je, že identifikátor v Javě rozlišuje velká a malá písmena.
  • Správný příklad pravopisu: věk, $ plat, _hodnota, __1_hodnota.
  • Příklad překlepu: 123abc, -salary.

Výčty

Výčty byly zavedeny v Javě 5.0. Omezují proměnnou na výběr pouze jedné z několika předdefinovaných hodnot. Hodnoty v tomto výčtovém seznamu se nazývají převody.

Použitím výčtu v Javě můžete snížit počet chyb v kódu.

Pokud byste se například dívali na objednávky čerstvých šťáv v obchodě, mohli byste omezit velikost balení šťávy pro malé, střední a velké. To umožňuje použít výčet v Javě, takže si nikdo neobjedná jinou velikost balíčku než malou, střední nebo velkou.

Příklad kódu Java enum

třída FreshJuice (enum FreshJuiceSize (SMALL, MEDIUM, LARGE) FreshJuiceSize size;) public class FreshJuiceTest (public static void main (String args) (FreshJuice juice = new FreshJuice (); juice.size = FreshJuice.FreshJuiceSize.MEDIUM; System.out .println ("Velikost:" + juice.size);))

Výsledný výstup z výše uvedeného příkladu:

Velikost: STŘEDNÍ

Poznámka: v Javě lze výčty deklarovat buď samostatně, nebo v rámci třídy. Metody, proměnné, konstruktory lze také definovat uvnitř výčtu.

Variabilní typy

  • Lokální proměnné.
  • Proměnné třídy (statické).
  • Proměnné instance (dynamické).

Modifikátory

Stejně jako u jiných jazyků, v Javě můžete modifikátory upravovat třídy, metody atd. Modifikátory v Javě spadají do dvou kategorií:

  • S přístupem: výchozí, veřejný, chráněný, soukromý.
  • Bezbariérový: konečný, abstraktní, strictfp.

V následující části se podrobněji podíváme na modifikátory tříd, modifikátory metod a další.

Pole

V Javě je pole objekt, který ukládá více proměnných stejného typu. Samotné pole je však objekt. V dalších kapitolách se podíváme na to, jak vytvořit a naplnit pole.

musí nutně odpovídat názvu třídy, jejíž metoda main () je volána při spuštění stroje Java.

  • Object - třída, ze které se dědí Všechno objekty v Javě, včetně polí a řetězců ().
  • Specifikátory přístupu jsou individuální pro každého člena (zadáno před deklarací).
  • Všichni členové třídy jsou ve výchozím nastavení otevřeni oboru balík... Výchozí obor je kříženec mezi soukromým a chráněným, viz.
  • Každý soubor * .java může obsahovat jen jeden třída vyhlášena jako veřejná a přístupná zvenčí.
  • Definice a deklarace třídy je vždy v jednom souboru, není možné vkládat prototypy do hlaviček.
  • Ukazatele chybí.
  • Všechny proměnné třídy jsou ve skutečnosti odkazy na objekty, nikoli na samotné objekty. Jejich inicializace pro použití musí být provedena prostřednictvím nového<конструктор-класса>(...) .
  • Na základě předchozího bodu - při přiřazování jedné proměnné objektu k jiné se změní pouze reference, ale nikoli kopie objektu.
  • Proměnné ve funkci jsou předávány podle hodnoty, pokud ano elementární typy(int, byte, long, atd ...), nebo odkazem, pokud se jedná o objekty.
  • K veřejným statickým členům třídy se přistupuje prostřednictvím tečkového operátoru. , a ne prostřednictvím ::, což podle mého názoru zavádí určité vnější zmatky.
  • Neexistuje žádný destruktor, ale existuje finalize ().
  • Finalize () by nemělo být zaměňováno s destruktorem C ++. se nazývá finalize () pouze svoz odpadu, který nemá nic společného s tím, že se objekt dostane mimo rozsah a absence alespoň jednoho odkazu na tento objekt.
  • Sbírání odpadků můžete vynutit voláním metody Runtime.gc () na aktuálním objektu Runtime nebo statické metody System.gc (). Soudě podle experimentů, uvolnění paměti funguje pouze ve virtuálním stroji Java a nevrací se, jakmile přidělená paměť OS, dokud počítač neskončí.
  • V kódování ve stylu Java funkce vyvolávají výjimky namísto vracení kódu. systémové chyby nebo chyby v logice virtuálního počítače. Proto mnoho funkcí musí být provedeno uvnitř bloku try (...) catch (...) (...), který zpracovává výjimky, nebo metoda, která je volá, musí explicitně specifikovat prostřednictvím vyvolání seznamu výjimek vyvolaných tyto funkce, které nejsou zpracovávány jimi, pro zpracování jejich metodami do zásobníku volání.
  • Výjimky se dělí na a.
  • Blok try (...) může také končit blokem finally (...), který se provede bez ohledu na přítomnost / nepřítomnost výjimek v předchozím bloku try (...). Je vhodné to použít k provedení požadovaných akcí bez ohledu na výsledky provádění bloku kódu, například k automatickému uvolnění všech prostředků v něm přidělených.
  • char není jednobajtový typ jako u C / C ++, je to 16bitový typ, který podporuje unicode struny.
  • bool je v Javě známý jako boolean.
  • Podmíněné konstrukce berou pouze booleovský typ proměnných nebo výrazů. To znamená, že kód je jako:
    int a; ... akce s proměnnou a ...; Pokud) (...)
    Není správné z hlediska syntaxe Javy a nebude kompilováno.
  • Konstanty jsou deklarovány jako konečné a nejsou konstantní.
  • Všechna pole jsou objekty.
  • I řetězcové konstanty (jako „libovolný řetězec konstantní“) jsou objekty.
  • Pro řetězce (třída String) je definován pouze jeden operátor - +, zřetězení.
  • Porovnání řetězců se provádí metodou bool equals () třídy String, například s1.equals (s2).
  • Obsah String objektů je konstantní a neznamená změnu jediného prvku řetězce, to se děje z důvodů výkonu. Pokud takové operace potřebujete, můžete použít třídu StringBuffer.
  • Při zřetězení neinicializovaného řetězce s neprázdným řetězcem získáte null + neprázdný řetězec, například s + = "| řetězec"; se bude rovnat "null | string"
  • Pole mají veřejnou proměnnou délku člena, struny nemají místo toho používají metodu length ().
  • Jáva nepodporovat vícenásobná dědičnost. Některé z jeho funkcí jsou prováděny prostřednictvím „rozhraní“. Rozhraní podporují více "dědičných" implementací více rozhraní v jedné třídě a obecně mnoho vztahů (rozhraní) k mnoha (třídám) a naopak.
  • Rozhraní umožňují vytváření odkazů, pomocí kterých můžete odkazovat na objekty tříd, které tato rozhraní implementují. Je pravda, že dynamické hledání vhodné metody při přístupu přes referenční rozhraní vyžaduje hodně režie, proto není žádoucí.
  • Místo výčtů můžete použít rozhraní bez deklarace metod v nich. V tomto případě musí být všechny proměnné rozhraní inicializovány, když je rozhraní definováno a jejich hodnoty budou automaticky konstantní. Poté mohou být prostřednictvím nástrojů „připojeni“ k definované třídě.
  • Také, protože JDK 5 existují navenek klasické výčty - výčet. Ve skutečnosti to není jen seznam pojmenovaných konstant, ale speciální třída zděděná z nadtřídy Enum. Každý prvek výčtu je objektem této třídy. Číselnou hodnotu objektu výčtu lze získat pomocí řadové vestavěné funkce.
  • Zvyk přetížení obsluhy známé v C ++, v Javě není podporováno.
  • K práci v objektovém prostředí s „primitivními typy“ (int, float, char atd.) Java používá autobox / autobox do typů obalů (Integer, Float, Character, atd ...). Ve skutečnosti se jedná o implementaci přetížení operátora pro několik předdefinovaných tříd, které implementují funkčnost primitivních typů + objektové metody.
  • super - klíčové slovo, které vám umožní zavolat konstruktor nadtřídy z podtřídy nebo odkazovat na člena nadtřídy skrytého členem podtřídy.
    • Při použití jako konstruktor - super by měl být vždy první operátor v konstruktoru podtřídy.
  • Pro určení abstraktní metody, používá se abstraktní klíčové slovo, třída obsahující abstraktní metodu musí být také definována jako abstraktní třída ....
  • final zakazuje přepisování metod v podřízených třídách. U „krátkých“ metod deklarovaných jako konečné má toto klíčové slovo stejný účinek jako vložené v C ++ - v podtřídách místo volání funkce. možná do kódu metody volání třídy vložil bytecode metody superclass.
  • final také zakazuje dědění ze třídy deklarované jako konečná.
  • Jmenné prostory(namespace) v Javě jsou implementovány jako balíčky(balík).
  • Pro připojení balíčky použijte import, můžete také použít import static ..(*|) importovat statické členy třídy.
  • Java podporuje vlákna prostřednictvím vestavěné třídy Thread a spustitelného rozhraní. Pro synchronizaci použijte synchronizovaný specifikátor před metodou v popisu třídy nebo synchronizujte ( ) (...) pro blok kódu synchronizovaný s ... Pro signály mezi synchronizovanými vlákny se používají metody nadřazené třídy Object: wait () / Notify () / NotifyAll ().
  • přechodný - modifikátor označující, že hodnotu objektu / proměnné není třeba „zadržovat“ při ukládání objektu, například při jeho serializaci před zápisem na disk / databázi. Tímto způsobem je logické označovat proměnné obsahující jedinečné identifikátory za běhu a další podobné informace, které dávají smysl pouze v aktuální instanci procesu Java.
  • příklad - běhová operace, návraty skutečný-li je tam odkaz na třídu , nebo jej lze přetypovat na odkaz na tuto třídu, jinak Nepravdivé.
  • assert - Java tvrzení jsou používána v podstatě stejným způsobem jako v C: assert [: Popis selhání tvrzení], ale je třeba mít na pamětiže jsou „vloženy“ do zkompilovaného bajtkódu a mohou být zahrnuty při spuštění java -ea.
  • this (...) - can be used inside the constructor of a class to call another constructor of the same class, matching the signature of the arguments.
  • Namísto šablony Jsou používány zobecnění, vypadá velmi podobně: třída CLASS_NAME (...). Ve zobecněních je to zakázáno použití primitivní typy ( int, byte, char atd ...). Parametry lze použít pouze třídy.
    Navíc podporováno omezené typy, zadáním nadtřídy pro třídy parametrů. Například deklarace třídy „generické třídy“ CLASS_NAME ve kterém jsou povoleny pouze potomkové třídy obecné číselné třídy Číslo.
  • K rychlému kopírování polí je vhodné použít System.arraycopy ().
  • Zdrojový soubor Java je textový soubor, který obsahuje jednu nebo více definic tříd. Překladač Java předpokládá

    že zdrojový kód programů je uložen v souborech s příponami Java. Kód získaný během překladu pro každou třídu je zapsán do samostatného výstupního souboru se stejným názvem jako název třídy a přípona třídy.

    V této kapitole nejprve napíšeme, přeložíme a spustíme kanonický program „Hello World“. Poté se podíváme na všechny významné lexikální prvky vnímané překladačem Java: mezery, komentáře, klíčová slova, identifikátory, literály, operátory a oddělovače. Na konci této kapitoly budete mít dostatek informací, abyste se mohli v dobrém programu Java orientovat sami.

    Tady je váš první program Java

    :

    třída HelloWorld (

    Systém. ven. println („Hello World“);

    Abyste mohli pracovat s příklady uvedenými v knize, musíte se dostat přes síť od společnosti Sun Microsystems a nainstalovat si sadu Java Developers Kit - balíček pro vývoj aplikací Java (

    http://java.sun.com/products/jdk ). Úplný popis nástrojů balíčku JDK - in Příloha 1 .

    Jazyk Java vyžaduje, aby veškerý programový kód byl obsažen v pojmenovaných třídách. Výše uvedený text textu by měl být zapsán do souboru HelloWorld.java. Nezapomeňte zkontrolovat, zda se velká písmena v názvu souboru shodují s názvem třídy, kterou obsahuje. Abyste mohli tento příklad přeložit, musíte spustit překladač Java - javac a jako parametr zadat název souboru se zdrojovým textem:

    \> javac HelloWorld.Java

    Překladač pro náš příklad vytvoří soubor HelloWorld.class s bytecode nezávislým na procesoru. Abyste mohli spustit výsledný kód, potřebujete mít runtime prostředí Java (v našem případě java program), do kterého potřebujete načíst novou třídu pro spuštění. Zdůrazňujeme, že je zadán název třídy, a nikoli název souboru, ve kterém je tato třída obsažena.

    > java HelloWorld

    Bylo provedeno jen málo, což bylo užitečné, ale ověřili jsme, že nainstalovaný překladač Java a běhový modul fungují.

    Krok za krokem

    HelloWorld je triviální příklad. Nicméně i tak jednoduchý program pro začátečníka v jazyceJava se může zdát skličujícím způsobem složitá, protože vám představí řadu nových konceptů a podrobností syntaxe. Pojďme si pečlivě projít každý řádek našeho prvního příkladu a analyzovat prvky, které tvoří program Java.

    třída HelloWorld (

    Tento řádek používá vyhrazené slovo

    třída. Říká překladateli, že se chystáme popsat novou třídu.Úplný popis třídy je umístěn mezi otevírací složenou závorkou na prvním řádku a odpovídající uzavírací složenou složenou závorkou na řádku 5. Kudrnaté závorky naJava se používá úplně stejně jako v C a C.++.

    public static void main (String args) (

    Tato na první pohled příliš složitá příkladová řada je důsledkem důležitého požadavku, který je vlastní vývoji jazyka Java. Jde o to, že v

    Java postrádá globální funkce. Protože se tyto řádky objeví ve většině příkladů v první části této knihy, podívejme se blíže na každý prvek druhého řádku.

    Když tento řádek rozdělíme na samostatné tokeny, okamžitě narazíme na klíčové slovo

    veřejnost. To - modifikátor přístupu, což umožňuje programátorovi ovládat viditelnost jakékoli metody a jakékoli proměnné. V tomto případě modifikátor přístupupublic znamená, že metodamain je viditelný a přístupný jakékoli třídě. K dispozici jsou další 2 indikátory úrovně přístupu - soukromé a protected, se kterým se podrobněji seznámíme vKapitola 8 .

    Další klíčové slovo je

    statický. Pomocí tohoto slova jsou deklarovány metody a třídní proměnné, které slouží k práci s třídou jako celkem. Metody, které ve své deklaraci používají klíčové slovo static, mohou pracovat přímo pouze s lokálními a statickými proměnnými.

    Často budete potřebovat metody, které vrátí hodnotu jednoho nebo jiného typu: například

    int pro celá čísla, float - pro skutečný název nebo název třídy pro datové typy definované programátorem. V našem případě stačí zobrazit řetězec a vrátit hodnotu z metodymain není vyžadován. Proto byl použit modifikátorprázdné Tento problém je podrobněji diskutován vKapitola 4 .

    Nakonec se dostaneme k názvu metody

    hlavní. Není zde nic neobvyklého, pouze všechny stávající implementace Java tlumočníků, které obdržely příkaz k interpretaci třídy, začínají svou práci voláním metody hlavní. Překladač Java může přeložit třídu, která nemá hlavní metodu. A tady je tlumočník Java pro spouštění tříd bez metody hlavní nemůže.

    Všechny parametry, které je třeba metodě předat, jsou uvedeny v dvojici závorek jako seznam položek oddělených znakem „;“ (středník). Každá položka v seznamu parametrů se skládá z mezerou odděleného typu a identifikátoru. I když metoda nemá žádné parametry, musíte za její název vložit několik závorek. V příkladu, o kterém nyní diskutujeme, o metodě

    main má pouze jeden parametr, i když poměrně složitého typu. Tětiva args deklaruje parametr s názvemargs, což je pole objektů představujících tříduTětiva. Všimněte si hranatých závorek za identifikátorem args. Udávají, že máme co do činění s polem, a nikoli s jediným prvkem zadaného typu. K diskusi o polích se vrátíme v další kapitole, ale prozatím si povšimněte toho typu Tětiva - toto je třída. O řetězcích v budeme hovořit podrobnějiKapitola 9 .

    Systém. ven. prlntln („Hello World!“);

    Tento řádek provede metodu

    tisk výstupního objektu. Objekt out je deklarováno ve tříděOutputStream a staticky inicializované v systému. PROTI kapitoly 9 a 13 budete mít šanci seznámit se s nuancemi práce tříd String a OutputStream.

    Zavírací složená závorka na řádku 4 končí deklaraci metody

    main a stejná závorka na řádku 5 končí deklaraci třídy HelloWorld.

    Lexikální základy

    Nyní, když jsme podrobně probrali minimální třídu Java, vraťme se a podívejme se na obecné aspekty syntaxe tohoto jazyka. Programy pro

    Java - je to soubor mezer, komentářů, klíčových slov, identifikátorů, doslovných konstant, operátorů a oddělovačů.jazyk, který umožňuje libovolné formátování textu programu. Aby program správně fungoval, není potřeba jeho text nějak speciálně zarovnávat. Například třídaHelloWorld může být napsán ve dvou řádcích nebo jakýmkoli jiným způsobem, který se vám líbí. A bude fungovat úplně stejně za předpokladu, že mezi jednotlivými tokeny (mezi nimiž nejsou žádní operátoři ani oddělovače) je alespoň jeden prostor, tabulátor nebo řádkový posuv.

    Komentáře (1)

    Ačkoli komentáře nijak neovlivňují spustitelný kód programu,

    při správném použití se ukáží být velmi významnou součástí zdrojového kódu. Existují tři druhy komentářů: jednorázové komentáře, víceřádkové komentáře a konečně komentáře k dokumentaci. Jednořádkové komentáře začínají // a končí na konci řádku. Tento styl komentování je užitečný pro poskytnutí krátkých vysvětlení k jednotlivým řádkům kódu:

    a = 42; // pokud

    42 - odpověď, jaká byla otázka?

    Pro podrobnější vysvětlení můžete použít komentáře umístěné na několika řádcích, počínaje textem komentářů symboly / * a končícími symboly * /. V tomto případě bude veškerý text mezi těmito dvojicemi symbolů považován za komentář a překladač bude to ignorovat

    * Tento kód je poněkud spletitý ...

    * Pokusím se vysvětlit:

    Třetí, zvláštní forma komentářů, je pro program služeb

    javadoc,který pomocí komponent kompilátoru Java automaticky generuje dokumentaci pro rozhraní tříd. Konvence používaná pro komentáře tohoto druhu je tato: umístit dokumentující komentář před deklaraci veřejné třídy, metody nebo proměnné, musíte začít s / ** (lomítko a dvě hvězdičky). Takový komentář končí stejně jako normální komentář - symboly * /. Program javadoc dokáže v komentářích dokumentu rozlišovat některé speciální proměnné, které začínají symbolem @. Zde je příklad takového komentáře:

    * Tato třída dokáže úžasné věci. Doporučujeme každému, kdo

    * chce napsat ještě dokonalejší třídu, berte to jako

    * základní.

    * @viz Java. applet. Applet

    * © autor Patrick Naughton

    třída CoolApplet rozšiřuje Applet (/ **

    * Tato metoda má dva parametry:

    klíč je název parametru.je hodnota parametru s názvemklíč.

    * / void put (klíč řetězce, hodnota objektu) (

    Vyhrazená klíčová slova

    Vyhrazená klíčová slova jsou speciální identifikátory, které jsou v jazyce

    Java se používá k identifikaci vestavěných typů, modifikátorů a ovládacích prvků spouštění programu. Dnes v jazyce J. ava má 59 vyhrazených slov (viz tabulka 2). Tato klíčová slova spolu se syntaxí operátorů a oddělovačů jsou zahrnuta v popisu jazyka.Jáva. Lze je použít pouze k zamýšlenému účelu; nelze je použít jako identifikátory názvů proměnných, tříd nebo metod.

    tabulka 2

    Java vyhrazená slova

    Všimněte si, že slova

    byvalue, cast, const, future, generic, goto, internal, operator, vnější, rest, varrezervováno v Jáva, ale ještě nepoužito Navíc v Jáva existují vyhrazené názvy metod (tyto metody dědí každá třída, nelze je použít, s výjimkou případů explicitního přepsání metod třídy Objekt).

    Tabulka 3

    Vyhrazené názvy metod

    Jáva

    Identifikátory

    Identifikátory se používají k pojmenování tříd, metod a proměnných. Jako identifikátor lze použít libovolnou posloupnost malých a velkých písmen, číslic a symbolů _ (podtržítko) a $ (dolar). Identifikátory by neměly začínat číslicí, aby je překladač nezaměňoval s číselnými doslovnými konstantami, které budou popsány níže.

    Java - jazyk citlivý na malá a velká písmena. To znamená, že např. Hodnota a HODNOTA - různé identifikátory.

    Literály

    Konstanty v

    Java je dána jejich doslovným zastoupením. Celá čísla, plováky, logické hodnoty, znaky a řetězce lze umístit kdekoli ve zdrojovém kódu. Typy budou zahrnuty vKapitola 4 .

    Celočíselné literály

    Celá čísla jsou nejčastěji používaným typem v běžných programech. Jakákoli celočíselná hodnota, například 1, 2, 3, 42, je celočíselný literál. V tomto příkladu jsou uvedena desetinná čísla, tedy čísla se základnou 10 - přesně ta, která denně používáme mimo svět počítačů. Kromě desetinných čísel lze jako celočíselné literály použít také čísla 8 a 16 - osmičková a šestnáctková. Java rozpoznává osmičková čísla podle počáteční nuly. Normální desetinná čísla nemohou začínat nulou, takže použití externě platného čísla 09 v programu bude mít za následek chybovou zprávu překladu, protože 9 není v rozsahu 0 ..

    7, platné pro osmičkové číslice. Hexadecimální konstanta se vyznačuje úvodními znaky nula x (0x nebo 0X). Rozsah hodnot pro šestnáctkovou číslici je 0 ..15 a jako číslice pro hodnoty 10 ..15 používá písmena od A do F (nebo od a do F). Pomocí hexadecimálních čísel můžete stručně a jasně reprezentovat počítačově orientované hodnoty, například psaním Oxffff místo 65535.

    Celočíselné literály jsou hodnoty typu

    int, který v Java je uložena ve 32bitovém slově. Pokud potřebujete hodnotu, která je větší než přibližně 2 miliardy v absolutní hodnotě, musíte použít konstantu jakodlouho. V tomto případě bude číslo uloženo v 64bitovém slově. U čísel s libovolným z výše uvedených základů můžete vpravo přiřadit malé nebo velké písmenoL, označující takovým způsobem, že dané číslo je typudlouho. Například Ox7ffffffffffffffL nebo9223372036854775807L je největší hodnota pro podobné číslo dlouho.

    Literály s pohyblivou řádovou čárkou

    Čísla s plovoucí desetinnou čárkou představují desetinné hodnoty, které mají zlomkovou část. Mohou být zapsány v pravidelných nebo exponenciálních formátech. V normálním formátu se číslo skládá z počtu desetinných míst, za nímž následuje desetinná čárka, za nímž následují desetinné číslice zlomkové části. Například 2.0, 3.14159 a 6667 jsou platné hodnoty s plovoucí desetinnou čárkou zapsané ve standardním formátu. V exponenciálním formátu je za uvedenými prvky navíc uvedeno desetinné pořadí. Pořadí je určeno kladným nebo záporným desetinným číslem za znakem E nebo e. Příklady čísel v exponenciálním formátu: 6.022e23, 314159E-05, 2e + 100. PROTI

    Čísla Java s plovoucí desetinnou čárkou jsou ve výchozím nastavení považována za zdvojnásobení. Pokud potřebujete konstantní likefloat, napravo od doslovu musíte přiřadit znak F nebo f. Pokud jste fanouškem nadbytečných definic, můžete přidat do literálů jako zdvojnásobte znak D nebo d. Výchozí hodnotyčtyřhra je uložena v 64bitovém slově, méně přesné hodnoty jako float - v 32bitové verzi.

    Booleovské literály

    Logická proměnná může mít pouze dvě hodnoty-

    pravda a false (false). Booleovské hodnoty pravda a false nejsou převedeny na žádné číselné vyjádření. Klíčové slovo true v Javě se nerovná 1 a nepravda se nerovná 0. In V Javě lze tyto hodnoty přiřadit pouze booleovským proměnným nebo je použít ve výrazech s booleovskými operátory.

    Doslovné znaky

    Symboly v

    Java - toto jsou indexy v tabulce symbolůUNICODE. Jsou to 16bitové hodnoty, které lze převést na celá čísla a na které můžete použít celočíselné aritmetické operátory, například operátory sčítání a odčítání. Doslovné znaky jsou umístěny uvnitř dvojice apostrofů (""). Všechny viditelné symboly tabulkyASCII lze přímo vložit do dvojice apostrofů: -"a", "z", "@". Pro znaky, které nelze zadat přímo, je k dispozici několik únikových sekvencí.

    Tabulka 3.

    2. Únikové sekvence

    Kontrolní sekvence

    Popis

    Osmičkový symbol

    (ddd)

    Hexadecimální znak

    UNICODE (xxxx)

    Apostrof

    Obrácené lomítko

    Návrat vozíku

    Line feed, new line

    Překlad stránky

    (formulářový zdroj)

    Vodorovná záložka

    (záložka)

    Vraťte se o krok zpět

    (backspace)

    Řetězcové literály

    Řetězcové literály v

    Java vypadá stejně jako v mnoha jiných jazycích- je to libovolný text uzavřený do dvojice uvozovek (""). Ačkoli řetězcové literály vJava je implementována velmi zvláštním způsobem(Java vytvoří objekt pro každý řádek), externě se to nijak neprojevuje. Příklady řetězcových literálů:"Ahoj Svět! “; "dva \ řádky; \ A to je v uvozovkách \" ". Všechny únikové sekvence a osmičkové / hexadecimální zápisové formy, které jsou definovány pro literály znaků, fungují pro řetězce úplně stejně.Java musí začínat a končit na stejném řádku zdrojového kódu. V tomto jazyce, na rozdíl od mnoha jiných, neexistuje žádná úniková sekvence pro pokračování řetězcového literálu na novém řádku.

    Operátoři

    Operátor je něco, co provádí nějakou akci s jedním nebo dvěma argumenty a vytváří výsledek. Syntakticky se operátory nejčastěji umisťují mezi identifikátory a literály. Operátoři budou podrobně diskutováni v

    Kapitola 5 , jejich seznam je uveden v tabulce 3. 3.

    Tabulka 3.

    3. Provozovatelé jazyka Jáva

    Oddělovače

    Pouze několik skupin znaků, které se mohou objevit v syntakticky správném programu Java, je stále nepojmenováno. Jedná se o jednoduché oddělovače, které ovlivňují vzhled a chování vašeho kódu.

    název

    K čemu slouží?

    kulaté závorky

    Přidělte seznamy parametrů v deklaraci a volání metody a také se používají k nastavení priority operací ve výrazech, zvýraznění výrazů v ovládacích příkazech spouštění programu a v operátorech přetypování.

    rovnátka

    hranaté závorky

    Používá se v deklaracích polí a při přístupu k jednotlivým prvkům pole.

    středník

    Odděluje operátory.

    Odděluje identifikátory v deklaracích proměnných, které se také používají k propojení příkazů v záhlaví smyčky

    pro.

    Odděluje názvy balíčků od názvů dílčích balíčků a tříd, které se také používají k oddělení názvu proměnné nebo metody od názvu proměnné.

    Proměnné

    Proměnná je hlavním úložným prvkem v programu Java. Proměnná je charakterizována kombinací identifikátoru, typu a rozsahu. V závislosti na tom, kde jste proměnnou deklarovali, může být lokální, například pro kód uvnitř smyčky for, nebo to může být proměnná instance, která je přístupná všem metodám této třídy. Místní obory jsou deklarovány pomocí složených závorek.

    Proměnné prohlášení

    Základní forma deklarování proměnné je následující:

    identifikátor typu [= hodnota] [, identifikátor [= hodnota

    7...];

    Typ je buď jeden z předdefinovaných typů, tj.

    byte, short, int, long, char, float, double,boolean nebo název třídy nebo rozhraní. Všechny tyto typy podrobně probereme vdalší kapitola ... Níže je uvedeno několik příkladů deklarace proměnných různých typů. Všimněte si, že některé příklady zahrnují inicializaci počáteční hodnoty. Proměnné, pro které nejsou zadány žádné počáteční hodnoty, jsou automaticky inicializovány na nulu.

    Následující příklad vytvoří tři proměnné odpovídající stranám pravoúhlého trojúhelníku a poté

    C pomocí Pythagorovy věty se vypočítá délka přepony, v tomto případě číslo 5, velikost přepony klasického pravoúhlého trojúhelníku se stranami 3-4-5.

    proměnné třídy (

    public static void main (String args) (

    = Math.sqrt (a * a + b * b);

    System.out.println ("c =" + c);

    Váš první krok

    Už jsme dosáhli hodně: nejprve jsme napsali malý program v jazyce

    Java a podrobně prozkoumal, z čeho se skládá (bloky kódu, komentáře). Viděli jsme seznam klíčových slov a operátorů, jejichž účel bude podrobně vysvětlen v dalších kapitolách. Nyní jste schopni samostatně rozlišit hlavní části jakéhokoli programu Java a jste připraveni začít číst.Kapitola 4 , který podrobně popisuje jednoduché datové typy.