Co dělá příkaz return v Javě. Pomocí operátoru pokračovat. Použití příkazu break

Operátor návrat používá se k provedení explicitního návratu z metody. To znamená, že znovu předá řízení objektu, který volal tato metoda. Jako takový je tento operátor klasifikován jako přechodový operátor. Ačkoli úplný popis operátor návrat bude muset být odloženo, dokud nezvážíme třídy a jejich metody, ale pojďme se krátce seznámit s jeho vlastnostmi.

Operátor návrat dá pokyn interpretu Java, aby zastavil provádění aktuální metody. Pokud metoda vrátí hodnotu, operátor návrat doprovázený nějakým výrazem. Hodnota tohoto výrazu se stane návratovou hodnotou metody.

Některé metody jsou deklarovány jako prázdnota, protože nevrací žádnou hodnotu. Interpret jazyka Java provádí takové metody postupným prováděním příkazů, dokud nedosáhne konce metody. Po provedení posledního příkazu se interpret vrátí. Někdy však metoda prázdnota musí dokončit bez čekání na dokončení posledního výpisu. V tomto případě můžete použít operátora návrat bez výrazu.

Nyní je třeba vše vysvětlit na příkladu, a přestože jsme ještě neprošli lekcemi, doufám, že tento příklad bude jasný, a pokud ne, pak se nebojte, tento materiál bude odložen v subkortex.

Pro ilustraci příkladu budeme potřebovat dvě třídy, jednu s hlavní metoda, druhá je jen třída s callables pomocí statických metod. Pokud není jasné, co jsou statické metody, pak se nebojte, jednoduše se jim říká „podprogramy“. A tak kód ve studiu:

Hlavní program“ (hlavní třída s hlavní metodou)

Na řádcích 8 a 10 je volána metoda vReturn, která nevrací žádné hodnoty, ale pouze vypisuje v závislosti na hodnotě, která jí byla předána, tu či onu zprávu.

Řádky 13 až 15 volají metodu strReturn, která vrátí různé linie v závislosti na hodnotě, která mu byla předána.

Hodnoty předané metodám jsou uzavřeny v závorkách.

A volatelný „podprogram“ (třída s volatelnými statickými metodami)

Metoda vReturn nevydává žádnou zprávu, pokud je jí předána hodnota větší než pět, jinak vypíše zprávu.

Metoda strReturn vrací jako hodnotu řetězec, jehož obsah udává, zda je předaný parametr větší nebo roven pěti nebo menší než pět.

Příkaz if na řádcích 13 a 14 nepoužívá složené závorky, protože nejsou nutné, i když by kód učinil čitelnějším.

V kódu těchto tříd v zásadě není nic složitého ani srozumitelného. Ale i když to není jasné, brzy přejdeme do studijních tříd a tam se vše vyjasní.

A doufám, že výstup, který tyto třídy generují, vám pomůže pochopit, jak funguje příkaz return:

První volání metody vReturn bylo provedeno s parametrem 3 a protože je menší než 5, byla zpráva z této metody vytištěna. Druhé volání této metody bylo provedeno s parametrem 7, a proto se metoda okamžitě vrátila, protože 7 je větší než 5 a tato metoda nic nevytiskla.

Metoda strReturn vrací řetězec v závislosti na parametru, který jí byl předán.

Jak víme, Java je objektově orientovaný programovací jazyk. To je základní koncept, protože říci, že základem základů je, že vše je objekt. Objekty jsou popsány pomocí tříd. Třídy mají zase stav a chování. Například bankovní účet může mít stav ve formě množství peněz na účtu a může mít chování zvyšující a klesající zůstatek. Chování v Javě je implementováno pomocí metod. Jak popsat metody je uvedeno na samém začátku cesty učení Java. Například v oficiálním tutoriálu od společnosti Oracle: “Defining Methods”. Jsou zde dva důležité aspekty:
  • Každá metoda má podpis. Signatura se skládá z názvu metody a jejích vstupních parametrů;
  • Metody musí specifikovat návratový typ;
  • Návratový typ není součástí podpisu metody.
Opět je to důsledek toho, že Java je silně typovaný jazyk a kompilátor chce předem pochopit, které typy se kde co nejvíce používají. Opět, aby nás ochránil před chybami. Obecně platí, že vše je pro dobré. Zdá se mi, že nám to opět vštěpuje kulturu nakládání s daty. Pro metody je tedy určen typ hodnoty. A k vrácení stejné hodnoty z metod se používá klíčové slovo return.

Klíčové slovo return příkaz v Javě

Klíčové slovo return odkazuje na "příkazy toku řízení", jak je diskutováno ve výukovém programu oracle "Příkazy toku řízení". O tom, jak vrátit hodnoty, si také můžete přečíst v oficiálním tutoriálu: „Vrácení hodnoty z metody“. Kompilátor podle svých nejlepších schopností pečlivě sleduje, že hodnota vrácená z metody odpovídá typu návratové hodnoty určenému metodou. Použijme jako příklad Online IDE z tutorialspoint. Podívejme se na původní příklad: public class HelloWorld ( public static void main (String args) ( System. out. println ( "Ahoj světe" ) ; ) ) Jak vidíme, zde se provede hlavní metoda, což je vstup ukažte na program. Řádky kódu jsou prováděny shora dolů. Naše hlavní metoda nemůže vrátit hodnotu, jinak dostaneme chybu: "Chyba: Hlavní metoda musí vrátit hodnotu typu void." Proto se metoda jednoduše zobrazí na obrazovce. Pojďme nyní přesunout získání řetězce do samostatné metody pro získání zprávy: public class HelloWorld ( public static void main (String args) ( System. out. println (getHelloMessage () ) ; ) public static String getHelloMessage () ( return "Ahoj World" ;) ) Jak vidíme, pomocí klíčové slovo return jsme zadali návratovou hodnotu, kterou jsme později použili v metodě println. V popisu (definici) metody getHelloMessage jsme uvedli, že nám vrátí String. To umožňuje kompilátoru zkontrolovat, zda jsou akce metody konzistentní se způsobem, jakým je deklarována. Typ návratové hodnoty specifikovaný v definici metody může být přirozeně širší než typ hodnoty vrácené z kódu, tzn. Hlavní věc je, že typy jsou redukovány na sebe. Jinak se při kompilaci zobrazí chyba: „chyba: nekompatibilní typy“. Mimochodem, pravděpodobně okamžitě vyvstala otázka: Proč návrat souvisí s příkazy řízení toku programu? Ale protože to může narušit normální tok programu shora dolů. Například: public class HelloWorld ( public static void main (String args) ( if (args. length == 0 ) ( return ; ) for (String arg : args) ( System. out. println (arg) ; ) ) As you z příkladu je vidět, že přerušíme provádění hlavní metody if java program naše se volá bez parametrů. Je důležité si uvědomit, že pokud máte kód po návratu, stane se nepřístupným. A náš chytrý kompilátor si toho všimne a nedovolí vám takový program spustit. Například, tento kód nezkompiluje: public static void main (String args) ( System. out. println ("1" ) ; return ; System. out. println ( "2" ) ; ) Existuje špinavý hack, jak to obejít. Například pro účely ladění nebo z nějakého jiného důvodu. Výše uvedený kód lze opravit zabalením návratu do bloku if: if (2 == 2 ) ( return ; )

Návratový příkaz při zpracování chyb

Je tu jedna velmi záludná věc – můžeme použít return ve spojení s chybovým zpracováním. Rád bych hned řekl, že použití return v catch bloku je velmi, velmi špatná forma, takže byste se tomu měli vyhnout. Ale potřebujeme příklad, ne? Tady to je: public class HelloWorld ( public static void main (String args) ( System. out. println ( "Hodnota je: " + getIntValue () ) ; ) public static int getIntValue () ( hodnota int = 1 ; try ( System out. println ("Stane se něco hrozného" ) ; zachyťte (Výjimka e) ( System. out. println ( "Zachycená hodnota: " + hodnota) ; návratová hodnota; ) nakonec ( hodnota++ ; System. out. println ("Nová hodnota: " + hodnota) ) ) ) Na první pohled se zdá, že by měla být vrácena 2, protože se vždy vykoná. Ale ne, hodnota bude 1 a změna proměnné v nakonec bude ignorována. Navíc, pokud value obsahovala objekt a my jsme nakonec řekli value = null , pak by catch stále vracel odkaz na objekt, nikoli null . Ale z bloku nakonec by příkaz return fungoval správně. Za takový dárek vám kolegové zjevně nepoděkují.

Java podporuje tři skokové příkazy – break, continue a return. Přenesou kontrolu na jinou část vašeho programu. Podívejme se podrobně na každý z operátorů.

Použití příkazu break

Příkaz break v Javě se používá ve třech případech. Nejprve, jak jste již viděli, ukončí posloupnost příkazů ve větvích příkazu switch. Za druhé, může být použit k vytržení ze smyčky. Za třetí, lze jej použít jako „civilizovanou“ formu operátora bezpodmínečný přechod goto. Tato část vysvětluje poslední dva případy. Použití přestávky opuštění smyčky Pomocí break můžete vynutit okamžité ukončení smyčky a obejít tak podmíněný výraz a jakýkoli zbývající kód v těle smyčky. Když je uvnitř smyčky nalezen příkaz break, druhý končí a softwarové ovládání předán operátorovi, který ho následuje. Jednoduchý příklad: // Pro ukončení smyčky použijte break. public class BreakLoop ( public static void main (String args) ( for (int i = 0 ; i< 100 ; i++ ) { if (i == 4 ) { break ; // ukončení cyklu, pokud i = 4) Systém. ven. println("i: " + i"Smyčka dokončena." ); ) ) i: 0 i: 1 i: 2 i: 3 Cyklus je dokončen. Ačkoli je zde cyklus for navržen tak, aby provedl své příkazy 0 až 99krát, příkaz break způsobí jeho předčasné ukončení, když je i 4. Příkaz break lze použít s libovolným Java smyčky, včetně záměrně nekonečné smyčky. Například níže je předchozí program kódovaný pomocí zatímco smyčka. Výstup tohoto programu je stejný jako u jeho předchůdce.< 100 ) { if (i == 4 ) { break ; // Pro ukončení cyklu while použijte break. public class BreakLoop2 ( public static void main (String args) ( int i = 0 ; while (i // ukončit cyklus, pokud i = 4) Systém. ven. println("i: " + i) ;< 3 ; i++ ) { System. out. print ("Итерация " + i + ": " ) ; for (int j = 0 ; j < 10 ; j++ ) { if (j == 4 ) { break ; i++;) Systém. ven. println("Smyčka dokončena."); ) ) Při použití v rámci sady vnořených smyček opustí příkaz break pouze nejvnitřnější smyčku. Například:// Použití přerušení ve vnořených smyčkách. public class BreakLoop3 ( public static void main (String args) ( for (int i = 0 ; i// ukončení cyklu, pokud j = 4 ) Systém. ven. tisknout (j + "" ); dokončení cyklu. Tomuto účelu slouží podmíněný výraz záhlaví smyčky. Příkaz break by měl být použit k přerušení smyčky pouze v případě, že nastanou určité zvláštní situace.

Použití break jako formy goto

Kromě použití v příkazech switch a přerušovací smyčky lze také použít samostatně jako „civilizovanou“ formu prohlášení goto. Java neobsahuje příkaz goto, protože provádí přechod libovolným a nestrukturovaným způsobem. Kód, který používá goto silně, je obvykle obtížné pochopit a udržovat. Také přepíše některé optimalizace kompilátoru. Existuje však několik míst v programu, kde je goto cenným a legitimním konstruktem řízení toku. Například goto může být užitečné, když se vymaníte z hluboce vnořené sady smyček. Pro řešení takových situací Java definuje rozšířenou formu operátor přestávky. Pomocí něj můžete ukončit jeden nebo více bloky kódu. Tyto bloky nemusí být součástí příkazu smyčky nebo přepínače. Může to být jakýkoli blok. Dále můžete přesně určit, kde bude provádění pokračovat, protože tento formulář break pracuje se štítkem a poskytuje výhody goto bez problémů, které má. Příkaz break s popiskem má následující obecný tvar: break label; Zde štítek je název štítku, který identifikuje určitý blok kódu. Po provedení této formy přerušení se řízení přenese z pojmenovaného bloku kódu (jehož návěští je uvedeno v příkazu break) do příkazu následujícího za daným blokem. Označený blok kódu musí obsahovat tohoto operátora break , ale není vyžadováno, aby toto zahrnutí bylo přímé (to znamená, že break může být zahrnut nikoli přímo do bloku s vlastním štítkem, ale do bloku v něm vnořeného, ​​případně také označeného). To znamená, že můžete použít označený příkaz break k vyjmutí ze sady vnořených bloků. Ale nemůžete použít break k přenosu řízení na blok kódu, který neobsahuje příkaz break. Chcete-li blok pojmenovat, umístěte štítek na začátek bloku (před otevírací složenou závorku). Štítek je jakýkoli platný Java identifikátor následovaný dvojtečkou. Po označení bloku lze jeho návěští použít jako argument příkazu break. To způsobí, že provádění bude pokračovat od konce označeného bloku. Například následující program obsahuje tři vnořené bloky, každý s vlastním štítkem. Příkaz break skočí vpřed na konec bloku označeného second , přičemž přeskočí dva příkazy println(). // Použití break jako civilizované formy goto. public class Break ( public static void main (String args) ( boolean t = true ; první: ( druhý: ( třetí: ( System. out. println ( "Před prohlášením o přerušení."); if (t) ( konec sekundy;// výstup z druhého bloku ) Systém. ven. println("Toto prohlášení nebude nikdy provedeno" );"Toto prohlášení nebude nikdy provedeno" ) Systém. ven. println() ; } } } "Toto prohlášení nebude nikdy provedeno""Tento příkaz je umístěn za druhým blokem." Spuštění tohoto programu generuje následující výstup: Před prohlášením o přestávce. Tento příkaz je umístěn za druhým blokem. Jedním z nejběžnějších použití označeného příkazu break je opuštění vnořených smyček. Například v< 3 ; i++ ) { System. out. print ("Итерация " + i + ": " ) ; for (int j = 0 ; j < 100 ; j++ ) { if (j == 10 ) { break outer; další program Vnější smyčka se provede pouze jednou: // K opuštění vnořených smyček použijte break. public class BreakLoop4 ( public static void main (String args) ( external: for (int i = 0 ; i // ukončí obě smyčky Iterace 0 : 0 1 2 3 4 5 6 7 8 9 Smyčka je dokončena. Je dobře vidět, že při přerušení vnitřní smyčky před koncem vnější smyčky končí obě smyčky. Mějte na paměti, že nemůžete přerušit žádný štítek, který není definován pro ohraničující blok. Například následující program je neplatný a nelze jej zkompilovat:// Tento program obsahuje chybu.< 3 ; i++ ) { System. out. print ("Итерация " + i + ": " ) ; } for (int j = 0 ; j < 100 ; j++ ) { if (j == 10 ) { break one; //He верно! } System. out. print (j + " " ) ; } } } Так как цикл, помеченный как one, не включает оператор break , передать управление этому блоку невозможно.

public class BreakErr ( public static void main (String args) ( one: for (int i = 0 ; i

Pomocí příkazu continue Někdy je užitečné začít další iteraci smyčky brzy. To znamená, že musíte pokračovat ve spouštění smyčky, ale přestat zpracovávat zbytek kódu v jejím těle pro tuto konkrétní iteraci. Ve skutečnosti je to - goto -přechod přes další operace těla na konec bloku smyčky. Tuto akci provede příkaz continue. In while a dělat smyčky zatímco prohlášení pokračování způsobí přímý přenos řízení podmíněný výraz , který ovládá smyčku. Ve smyčce for přechází řízení nejprve do iterační části pro operátora a pak k podmíněnému výrazu. Pro všechny tři smyčky je vynechán jakýkoli mezikód. Příklad programu, který používá pokračovat k tisku dvou čísel na každý řádek, je uveden níže:// Demonstruje pokračování.< 10 ; i++ ) { System. out. print (i + " " ) ; if (i % 2 == 0 ) { continue ; } System. out. println ("" ) ; } } } Этот код использует операцию % (остаток по модулю), чтобы проверять, является ли i четным. Если это так, цикл продолжается без печати символа public class Continue ( public static void main (String args) ( for (int i = 0 ; i nový řádek (nový řádek). Výstup programu: 0 1 2 3 4 5 6 7 8 9 Stejně jako příkaz break může i nadále definovat návěští označující, která smyčka má pokračovat. Ukázkový program, který používá pokračovat v tisku trojúhelníkové násobilky od 0 do 9.// Použití pokračovat se štítkem.< 10 ; i++ ) { for (int j = 0 ; j < 10 ; j++ ) { if (j >public class ContinueLabel ( public static void main (String args) ( external: for (int i = 0 ; i i) ( System. out. println () ; pokračovat vnější; ) System. ven. tisknout (" " + (i * j) ); tam, kde je nutné iteraci předčasně ukončit, poskytuje příkaz continue strukturovaný způsob, jak tento úkol splnit.

návratový výpis

Posledním řídicím příkazem je return . Používá se k explicitnímu návratu z metody, tj. předává řízení programu zpět volací program. Příkaz return je klasifikován jako operátor skoku. Ačkoli on plná diskuse musí počkat na projednání zde uvedených metod stručný přehled vrátit . Příkaz return lze použít kdekoli v metodě pro skok zpět do programu, který metodu volá. Příkaz return okamžitě ukončí provádění metody, ve které se nachází. Ilustruje to následující příklad: // Ukazuje návrat. public class Return ( public static void main (String args) ( boolean t = true ; System. out. println ( "Před návratovým prohlášením."); if (t) ( return ;// výstup z druhého bloku // návrat k volajícímu programu"Toto prohlášení se nikdy neuskuteční." );) ) Zde se return vrací do systému Java za běhu, protože je to tento systém, který volá metodu main(). Výstup z tohoto programu: Před návratovým prohlášením. Můžete si všimnout, že konečný příkaz println() není proveden. Po provedení návratu se řízení předá zpět volajícímu programu. Jedna poznámka na závěr. V předchozí program příkaz if(t) je nezbytný. Bez něj by kompilátor Java vyvolal chybu „nedosažitelný kód“, protože by věděl, že poslední příkaz println() by nikdy nebyl proveden. Aby se zabránilo

zadanou chybu

, to je přesně to, co příkaz if (t) používá k oklamání kompilátoru kvůli této demonstraci.

Odkaz na první Ovládací prvky v Javě jsou téměř totožné s ovládacími prvky používanými v C a C++.

Podmíněné výroky

Jsou vám dobře známé,

Pojďme se s každým z nich seznámit v Javě. pokud-jinak V zobecněné podobě se tento operátor zapisuje takto:

pokud ( logický výraz) operátor1; [jiný operátor2;] Část else je volitelná. Místo kteréhokoli z operátory může stát složený operátor

uzavřený ve složených závorkách.

// ...

Booleovský výraz -

je jakýkoli výraz, který vrací booleovskou hodnotu.

int bytesAvailable;

if (bytesAvailable > 0) (

ProcessData();

bytesAvailable -= n; ) jinak waitForMoreData();

Ale

kompletní program

, který používá příkazy if-else k určení, do jaké roční doby měsíc patří.

if (měsíc == 12 || měsíc == 1 || měsíc == 2) (

sezóna = "Zima";

) else if (měsíc ==3 || měsíc == 4 || měsíc == 5) (

roční období = "Jaro";

) else if (měsíc == 6 || měsíc == 7 || měsíc == 8) (

sezóna = "Léto";

) else if (měsíc == 9 || měsíc == 10 || měsíc == 11) (

roční období = "podzim";

) jinak (

sezóna = "Falešný měsíc";

}

System.out.println("Duben je v " + sezóně+ ".");

} }

Po spuštění programu byste měli získat následující výsledek:

C:\>java IfElse

Duben je na jaře.

přerušení

V jazyk V Javě chybí příkaz goto. K nahrazení goto v některých případech poskytuje Java příkaz break. Tento příkaz říká běhovému prostředí, aby zastavilo provádění pojmenovaného bloku a předalo řízení příkazu, který následuje za blokem. Java používá k pojmenování bloků štítky. Příkaz break lze použít bez návěští při práci se smyčkami a v příkazech switch. V tomto případě to znamená opuštění aktuálního bloku.

Například následující program má tři vnořené bloky, každý s vlastním jedinečným štítkem. Příkaz break ve vnitřním bloku způsobí přechod na příkaz následující za blokem b. Tím se vynechají dva tiskové příkazy.

přestávka ve třídě (

public static void main(String args) ( boolean t = true;

a:(b:(c:(

System.out.println("Před přestávkou"); // Před přestávkou

pokud (t)

zlom b;

System.out.println("To se nespustí");// Nebude provedeno)

System.out.println("To se nespustí"); // Nebude provedeno)

System.out.println("Toto je po b"); //Po b

} } }

V důsledku spuštění programu získáte následující výsledek:

C:\> Java Break

Před přestávkou

Toto je po b

POZOR

Příkaz break můžete použít pouze k přeskočení za jeden z aktuálních vnořených bloků. To odlišuje break od příkazu C goto, který může přeskakovat na libovolné štítky.

přepínač

Příkaz switch poskytuje jasný způsob, jak přepínat mezi různými částmi programový kód v závislosti na hodnotě jedné proměnné nebo výrazu. Obecná forma tohoto operátoru je:

přepínač (výraz) ( case value1:

přerušení;

case value2:

přerušení;

význam případu:

přerušení;

výchozí:

}

Výsledek výpočtu výrazy může mít jakoukoli hodnotu jednoduchý typ a každá z hodnot uvedených v příkazech case musí být typově kompatibilní s výrazem in příkaz switch. Všechny tyto hodnoty musí být jedinečné literály. Pokud uvedete ve dvou případech prohlášení stejné hodnoty, překladač zobrazí chybovou zprávu.

Pokud hodnota výrazu neodpovídá žádnému z příkazů case, řízení se přenese na kód umístěný za výchozím klíčovým slovem. Všimněte si, že výchozí příkaz je volitelný. V případě, že žádný z příkazů case neodpovídá hodnotě výrazu a v přepínači není žádný výchozí příkaz, vykonávání programu pokračuje příkazem následujícím za příkazem switch.

Uvnitř příkazu switch (stejně jako uvnitř cyklických konstrukcí, ale o tom později) má přerušení bez návěští za následek přenos řízení na kód po příkazu switch. Pokud přestávka chybí, po aktuální sekce v případě bude provedeno následující. Někdy je vhodné mít v příkazu switch několik souvislých sekcí case, které nejsou odděleny příkazem break.

class SwitchSeason ( public static void main(String args) (

int měsíc = 4;

, který používá příkazy if-else k určení, do jaké roční doby měsíc patří.

přepínač (měsíc) (

případ 12: // FALLSTHROUGH

případ 1: // FALLSTHROUGH

případ 2:

sezóna = "Zima";

přerušení;

případ 3: // FALLSTHROUGH

případ 4: // FALLSTHROUGH

případ 5:

roční období = "Jaro";

přerušení;

případ 6: // FALLSTHROUGH

případ 7: // FALLSTHROUGH

případ 8:

sezóna = "Léto";

přerušení;

případ 9: // FALLSTHROUGH

případ 10: // FALLSTHROUGH

případ 11:

roční období = "podzim";

přerušení;

výchozí:

sezóna = "Falešný měsíc";

}

System.out.println("Duben je v " +sezóně +".");

} }

Níže je ještě více užitečný příklad, kde se příkaz switch používá k přenosu řízení podle různých kódů znaků ve vstupním řetězci. Program počítá počet řádků, slov a znaků v textovém řetězci.

třída Počet slov(

static String text = "Nyní je tifne\n" +

"pro všechny dobré muže\n" +

"přijít na pomoc\n" +

"své země\n"+

"a zaplatit splatné daně\n";

static int len ​​​​= text.length();

boolean inWord = false;

int numChars = 0;

int numSlova = 0;

int numLines = 0;

for (int i=0; i< len; i++) {

char c = text.charAt(i);

numChars++;

přepínač (с) (

případ "\n": numLines++; // PROPADNUTÍ

případ "\t": // FALLSTHROUGH

případ " ": if (inWord) (

numWords++;

inWord = nepravda;

}

přerušení;

výchozí: inWord = true;

}

}

System.out.println("\t" + numLines +"\t" + numWords + "\t" + numChars);

} }

Tento program pro počítání slov používá několik konceptů souvisejících se zpracováním řetězců. Tyto problémy budou podrobně rozebrány v kapitole 9.

návrat

V další kapitole se dozvíte, že Java používá typ rutiny zvané metody k implementaci procedurálního rozhraní k objektům třídy. Hlavní rutina, kterou jsme dosud používali, je statická metoda odpovídající příkladové třídy. Příkaz return můžete umístit kamkoli do programového kódu metody, což povede k okamžitému ukončení a převedení kontroly na kód, který metodu volal. Níže je uveden příklad ilustrující použití příkazu return k okamžitému vrácení řízení, in v tomto případě- Runtime prostředí Java.

třída ReturnDemo (

public static void main(String args) (

booleovské t = true;

System.out.println("Před návratem"); //Před návratovým operátorem

if (t) vrátit;

System.out.println("To se nespustí"); //Toto nebude provedeno

} }

Komentář

Proč je v tomto příkladu použit příkaz if (t)? Jde o to, že bez tohoto příkazu by překladač Java uhodl, že poslední příkaz println nebude nikdy proveden. Takové případy jsou v Javě považovány za chyby, takže bez příkazu if bychom nebyli schopni tento příklad přeložit.

Cykly

Každý cyklus lze rozdělit na 4 části - inicializace, tělo, iterace a podmínka ukončení. Java má tři smyčkové konstrukce: while (s předpokladem), do-při (s post-stavem) a pro (s parametry) .

zatímco

Tato smyčka se provádí opakovaně, dokud se booleovský výraz nevyhodnotí jako true. Níže je obecný tvar zatímco operátor:

[init; ]

zatímco (dokončení)(

tělo;

[iterace;])

Inicializace a iterace jsou volitelné. Níže je příklad smyčky while pro tisk deseti řádků "tick".

třída WhileDemo (

public static void main(String args) (

int n = 10;

zatímco (n > 0) (

n--;

}

} }

do-při

Někdy je potřeba provést tělo cyklu alespoň jednou - i když logický výraz trvá od samého začátku hodnota nepravda. V takových případech Java používá konstrukci smyčky do-while. Jeho obecný zápis je:

[init; ] do (tělo; [iterace;] ) while (dokončení);

V následujícím příkladu je tělo smyčky provedeno před první kontrolou podmínky ukončení. To vám umožňuje kombinovat iterační kód s podmínkou ukončení:

třída DoWhile(

public static void main(String args) (

int n = 10;

dělat (

System.out.println("zaškrtnout " + n);

) zatímco (--n > 0);

} }

pro

Tento příkaz poskytuje prostor pro všechny čtyři části smyčky. Níže je uveden obecný tvar příkazu for.

pro (init; dokončení; iterace) tělo;

Libovolnou smyčku napsanou pomocí příkazu for lze zapsat jako smyčku while a naopak. Li počáteční podmínky jsou takové, že při vstupu do smyčky není splněna podmínka ukončení, pak se operátor tělo a iterace neprovedou ani jednou. V kanonická forma pro smyčku celočíselná hodnota čítače se zvyšuje od minimální hodnota do určité hranice.

třída ForDemo (

public static void main(String args) (

for (int i = 1; i<= 10; i++)

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

} }

Následující příklad je verze programu pro odpočítávání.

třída ForTick (

public static void main(String args) (

pro (int n = 10; n > 0; n--)

System.out.println("zaškrtnout " + n);

} }

Všimněte si, že proměnné lze deklarovat uvnitř inicializační části příkazu for. Proměnná deklarovaná uvnitř příkazu for je platná v rozsahu tohoto příkazu.

A tady - nová verze příklad s ročními obdobími, který používá příkaz for.

třídní měsíce (

statický řetězec měsíců = (

"leden", "únor", "březen", "duben", "květen", "červen", "červenec", "srpen", "září", "říjen", "listopad", "prosinec");

static int monthdays= (31, 28,31, 30, 31,30, 31, 31, 30, 31, 30, 31);

statický String spring = "pružina";

static String summer = "léto";

statický String podzim = "podzim";

static String winter = "zima";

static String seasons= ( zima, zima, jaro, jaro, jaro, léto, léto, léto, podzim, podzim, podzim, zima );

public static void main(String args) (

pro (int měsíc = 0; měsíc< 12; month++) {

System.out.println(měsíce + " je "+

roční období + " měsíc s " + měsíční dny + " dny.");

} } }

Po spuštění tento program vypíše následující řádky:

Od:\> Java měsíce

Leden je zimní měsíc s 31 dny.

Únor je zimní měsíc s 28 dny.

Březen je jarní měsíc s 31 dny.

Duben je jarní měsíc s 30 dny.

Květen je jarní měsíc s 31 dny.

Červen je letní měsíc s 30 dny.

Červenec je letní měsíc s 31 dny.

Srpen je letní měsíc s 31 dny.

Září je podzimní měsíc s 30 dny.

Říjen je podzimní měsíc s 31 dny.

Listopad je podzimní měsíc s 30 dny.

Prosinec zimní měsíc s 31 dny.

Čárkový operátor

Někdy nastanou situace, kdy sekce inicializace nebo iterace cyklu for vyžadují více příkazů. Protože složený příkaz ve složených závorkách nelze vložit do hlavy cyklu for, nabízí Java alternativní způsob. Použití čárky (,) k oddělení více příkazů je povoleno pouze v závorkách za příkazem for. Níže je uveden triviální příklad cyklu for s několika příkazy v částech inicializace a iterace.

třída Čárka (

public static void main(String args) (

int a, b;

pro (a = 1, b = 4; a< b; a++, b--) {

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

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

}

} }

Výstup tohoto programu ukazuje, že smyčka je provedena pouze dvakrát.

C:\>java čárka

a = 1

b = 4

a = 2

b = 3

pokračovat

V některých situacích je potřeba přejít k další iteraci a ignorovat některé příkazy těla smyčky, které ještě nebyly provedeny v aktuální iteraci. Java poskytuje pro tento účel příkaz continue. Níže je uveden příklad, kdy se příkaz continue používá k vytištění dvou čísel na každý řádek.

třída ContinueDemo(

public static void main(String args) (

for (int i=0; i< 10; i++) {

System.out.print(i + " ");

if (i % 2 == 0) pokračovat;

System.out.println("");

}

}}

Pokud je index sudý, smyčka pokračuje bez tisku znaku nového řádku. Výstupem tohoto programu je:

C:\>java ContinueDemo

0 1

2 3

4 5

5 7

8 9

Stejně jako u příkazu break můžete v příkazu continue zadat návěští označující, které z vnořených smyček chcete předčasně ukončit aktuální iteraci. Pro ilustraci uvádíme program, který používá příkaz continue s popiskem k vytištění trojúhelníkové násobící tabulky pro čísla 0 až 9:

class ContinueLabel(

public static void main(String args) (

vnější:for (int i=0; i< 10; i++) {

for (int j = 0; j < 10; j++) {

pokud (j > i) (

System.out.println("");

pokračovat ven;

}

System.out.print(" " + (i * j));

}

}

}}

Příkaz continue v tomto programu ukončí vnitřní smyčku s čítačem j a přejde k další iteraci vnější smyčky s čítačem i. Během běhu tento program zobrazuje následující řádky:

C:\>Java ContinueLabel

0

0 1

0 2 4

0 3 6 9

0 4 8 12 16

0 5 10 15 20 25

0 6 12 18 24 30 36

0 7 14 21 28 35 42 49

0 8 16 24 32 40 48 56 64

0 9 18 27 36 45 54 63 72 81

Výjimky

Posledním způsobem, jak vynutit přenos kontroly při provádění kódu, je použít vestavěný mechanismus zpracování výjimek Java. Pro tento účel jazyk poskytuje operátory try, catch, throw a nakonec. Kapitola 10 je celá věnována studiu mechanismu zpracování výjimečné situace.

Po proudu

V posledních čtyřech kapitolách jste se toho o Javě dozvěděli docela dost. Pokud by to byla kniha Fortran, kurz by byl kompletní. Ve srovnání s Fortranem má však Java další výkonné schopnosti. Pojďme tedy dál a konečně přejdeme k objektově orientovanému programování.

Operátor návrat používá se k provedení explicitního návratu z metody. To znamená, že znovu předá řízení objektu, který tuto metodu zavolal. Jako takový je tento operátor klasifikován jako přechodový operátor. I když kompletní popis provozovatele návrat bude muset být odloženo, dokud nezvážíme třídy a jejich metody, ale pojďme se krátce seznámit s jeho vlastnostmi.

Operátor návrat dá pokyn interpretu Java, aby zastavil provádění aktuální metody. Pokud metoda vrátí hodnotu, operátor návrat doprovázený nějakým výrazem. Hodnota tohoto výrazu se stane návratovou hodnotou metody.

Některé metody jsou deklarovány jako prázdnota, protože nevrací žádnou hodnotu. Interpret jazyka Java provádí takové metody postupným prováděním příkazů, dokud nedosáhne konce metody. Po provedení posledního příkazu se interpret vrátí. Někdy však metoda prázdnota musí dokončit bez čekání na dokončení posledního výpisu. V tomto případě můžete použít operátora návrat bez výrazu.

Nyní je třeba vše vysvětlit na příkladu, a přestože jsme ještě neprošli lekcemi, doufám, že tento příklad bude jasný, a pokud ne, pak se nebojte, tento materiál bude odložen v subkortex.

Pro ilustraci příkladu budeme potřebovat dvě třídy, jednu s hlavní metodou a druhou pouze třídu se statickými metodami k volání. Pokud není jasné, co jsou statické metody, pak se nebojte, jednoduše se jim říká „podprogramy“. A tak kód ve studiu:

„Hlavní program“ (hlavní třída s hlavní metodou)

Na řádcích 8 a 10 je volána metoda vReturn, která nevrací žádné hodnoty, ale pouze vypisuje v závislosti na hodnotě, která jí byla předána, tu či onu zprávu.

Řádky 13 až 15 volají metodu strReturn, která vrací různé řetězce v závislosti na hodnotě, která jí byla předána.

Hodnoty předané metodám jsou uzavřeny v závorkách.

A volatelný „podprogram“ (třída s volatelnými statickými metodami)

Metoda vReturn nevydává žádnou zprávu, pokud je jí předána hodnota větší než pět, jinak vypíše zprávu.

Metoda strReturn vrací jako hodnotu řetězec, jehož obsah udává, zda je předaný parametr větší nebo roven pěti nebo menší než pět.

Příkaz if na řádcích 13 a 14 nepoužívá složené závorky, protože nejsou nutné, i když by kód učinil čitelnějším.

V kódu těchto tříd v zásadě není nic složitého ani srozumitelného. Ale i když to není jasné, brzy přejdeme do studijních tříd a tam se vše vyjasní.

A doufám, že výstup, který tyto třídy generují, vám pomůže pochopit, jak funguje příkaz return:

První volání metody vReturn bylo provedeno s parametrem 3 a protože je menší než 5, byla zpráva z této metody vytištěna. Druhé volání této metody bylo provedeno s parametrem 7, a proto se metoda okamžitě vrátila, protože 7 je větší než 5 a tato metoda nic nevytiskla.

Metoda strReturn vrací řetězec v závislosti na parametru, který jí byl předán.




Nahoru