Java FAQ velmi rozsáhlý soubor otázek a odpovědí
Transkript
Java FAQ velmi rozsáhlý soubor otázek a odpovědí předmět A7B36PJV - Programování v Javě Martin Bloch katedra počítačů ČVUT v Praze, FEL Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Odkaz na výukové materiály: http://edux.feld.cvut.cz/courses/A7B36PJV/ Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti JAQ = Java Answered Questions Projekt JAQ podporuje samostudium Javy 7 mírně pokročilých studentů, jakož i přípravu písemných zkoušek z tohoto předmětu. Obsahuje přes 600 otázek s opovědmi v souboru JAQ_3.0.txt (níže) v Unicodu a dále program Selector3.java (níže), který umožňuje vybrat zvolený druh a počet náhodných otázek pro studenta a tytéž otázky i s odpovědmi pro examinátora. Obé je volně použitelné. Je radno provozovat tento program ve vhodném IDE (např. Netbeans) v němž lze oba výstupy vyjevit na displeji a odtud případně stáhnout do nějakého editoru, např. pro tiskové úpravy. F***************** JAQ Java Asked Questions v. 3.0.0 ***** pro Java 7 SE ***************** * 1 2 3 4 5 6 7 8 *12345678901234567890123456789012345678901234567890123456789012345678901234567890 123456789 * Připomínky, doplňky, návrhy, náměty apod. posílejte na [email protected] ********************************************************************************** ******** * TENTO TEXT JE DOBRE CITELNY V EDITORU NETBEANS I V NOTEPADU ********************************************************************************** ******** * A-aplety, C-kolekce, D-JDBC, E-události, G-grafika, I-image, J-swing, N-sítě, * P-primitivy, S-proudy, T-vlákna, U-utility, V-JVM, W-awt, X-vyjímky, Y-generika, Z-základy ********************************************************************************** ******** A#091 V jakém pořadí jsou volány hlavní metody apletu ? init(), start() <- -> stop(), destroy() A#092 Uveďte příklad umístění apletu do HTML stránky. <APLET CODE=xxx.class CODEBASE=... ARCHIVE=... WIDTH=... HEIGHT=...> <PARM NAME1="..." VALUE1="..."> <PARM NAME2="..." VALUE2="..."> </APPLET> V HTML5 se píše místo <APPLET> </APPLET> <OBJECT> </OBJECT> A#093 Které základní omezení má aplet oproti aplikacím ? Přistupovat k lokálním souborům, zjišťovat či měnit vlastnosti systému, vytvářet knihovny a definovat nativní metody, spouštět programy, navazovat komunikaci s třetí stranou. A#094 Jak lze omezení apletu překonat ? Pomocí grantu a certifikátu. A#251 Co je applet, jak se spouští a jaká má omezení ? Aplet je instanceof Applet spustitelný v browseru nebo appletvieweru. Nemůže přistupovat k lokálnímu systému souborů, systémovým proměnným, spouštět programy a navazovat komunikaci se třetí stranou. A#483 Co je appletviewer, kde se nalézá, jaké má výhody a jaká omezení ? Testovací program apletů, v jdk/bin, přesně interpretuje právě jen tag APPLET. A#484 Která třída je přímým předkem java.applet.Applet a která přímým potomkem ? java.awt.Panel a javax.swing.JApplet nebo ta kterou vytvoříte. A#506 Jak lze použít přetížených konstruktorů Appletu / JAppletu ? Nelze, neboť browser umí zavolat jen bezparametrický konstruktor. Funkcionalitu konstruktoru supluje metoda init(). A#587 K čemu se v apletu využívá metoda public static void main(String[] args) // ? K ničemu, neboť browser ji neumí zavolat. Volá bezparametrický konstruktor a metody init, start, stop a destroy. C#120 Napište úryvek výpisu objektů v kolekci referované interfejsem java.util.Collection . Collection coll = … ; for ( Object o : coll ) System.out.println(o); // anebo Iterator it = coll.iterator(); for ( Iterator it = coll.iterator(); it.hasNext() ; ) System.out.println( it.next() ); C#150 K čemu slouží třída java.util.HashMap, v čem je výhodná a jaké má nejdůležitější metody ? Jako uložiště dvojic (Object key, Object value) v operační paměti s kvazikonstantním přístupem, rozšiřovatelné, put(key,value) get(key) C#151 Co jsou, k čemu slouží a co definují java.lang.Comparable a java.util.Comparator ? Oba jsou interfejsy a slouží pro porovnání objektů daného typu - první jako "naturální" implementací typu a konkrétní metodou int compareTo(Object o) - druhý pro vytváření uživatelských komparátorů (pro řazení a uspořádání objektů) definuje metody resp. int compare(Object o, Object o) a equals(Object o). Není třeba přístup ke zdrojovému kódu porovnávaného typu. C#171 Co splňují objekty v kolekci java.util.TreeSet a jak se toho dosáhne ? Uspořádání. Buď jsou přirozeně Comparable nebo je dodán Comparator. C#241 Jak lze vytvořit synchronizovanou kolekci java.util.ArrayList ? List x = Collections.synchronizedList( new ArrayList() ); C#243 Jaký je rozdíl mezi Collection a Collections v java.util ? Interfejs (ne pro mapy) vs. třída užitečných statických metod (i pro mapy). C#384 Jak zajistit neměnitelnost nějaké kolekce - např. ArrayList ? Vytvořit private List l = new ArrayList(); a ten naplnit, pak vytvořit public List ul = Collections.unmodifiableList(l); C#553 Co je objekt typu HashMap() a na čem závisí jeho efektivita ? API realizace interfejsu Map užitím hešové tabulky, což umožnuje kvazikonstantní časovou složitost vkládání a přístupu k datům, tj. O(1). Efektivita záleží na kvalitě metody hashCode() a dostatečném rezervním prostoru ( asi >30 % ) C#554 Co je objekt typu TreeMap() a jaká je efektivitu jeho činnosti ? API realizace interfejsu SortedMap vyváženým stromem, což umožnuje logaritmickou časovou složitost vkládání a přístupu k datům, tj. O(log n). Klíče musejí být Comparable či musí být uveden specifický Comparator. C#595 Maximálně kolik objektů může obsahovat ArrayList (při dostatečné paměti) ? Integer.MAX_VALUE+1 tj. 2147483648. Přesněji řečeno: ArrayList objekty neobsahuje ale jen referuje. C#596 Co je Map.Entry a k čemu slouží. Vnořené interface<K,V> v interfejsu java.util.Map<K,V> umožňující přístup ke dvojici referencí key-value metodami getKey, getValue, setValue a také equals a hashCode. D#371 Co znamená JDBC a jaké je jeho podstata ? Java DataBase Connectivity - jednotný způsob přípojení a komunikace s DB prostřednictvím SQL. D#372 Které balíčky realizují JDBC ? java.sql a javax.sql. D#373 Které důležité typy definuje java.sql ? Třídu: DriverManager, Interfejsy: Driver, Connection, Statement, ResultSet, MetaDataResultSet. D#374 Ke kterým DB se lze pomocí JDBC připojit ? Ke všem, ke kterým producent DB dodává driver pro JDBC. D#375 Jakým standardním jazykem se ovládají databáze skrze JDBC ? SQL - Structured Query Language D#376 Jmenujte nejdůležitějsí příkazy jazyka SQL. CREATE TABLE, INSERT INTO, SELECT, UPDATE D#377 Jaký parametr má metoda executeQuery a co vrací ? String jenž zadává dotaz příkazem SELECT sloupce FROM tabulka. Vrací se objekt typu ResultSet obsahující tabulky výsledku. D#378 K čemu slouží objekt ResultSetMetaData ? K získání informací o tabulce s výsledkem hledání. E#095 Co je listener ? Jednak interfejs, který definuje metody jež slouží přijetí specifických událostí, jednak objekt (handler), který tyto metody implementuje a tudíž objekty-události přijímá a zpracovává. E#096 Co je adapter ? Zpravidla abstraktní třída implementující určitý listener konkrétními avšak prázdnými metodami. Tu konkrétní adapter využije jako předka s tím, že některé metody překryje. E#097 K čemu slouží interface ActionListener ? Definuje void actionPerformed( ActionEvent ev ); Tu volají zdroje ActionEventů např.: Button, TextField E#153 Napište příklad handleru pro pohyb myši s registrací u zdroje události MouseEvent. class Handler extends MouseMotionAdapter { public void mouseMoved(MouseEvent ev) { ... } } Component c= ... c.addMouseMotionListener( new Handler() ); E#167 Co jsou listenery z balíčku java.awt.event a k čemu slouží? Listenery jsou interfejsy pro definici handlerů, které umožňují přijímat zprávy od zdrojů ve formě objektů událostí, tj. typu Event. E#168 Co jsou adaptery z balíčku java.awt.event a k čemu slouží? Adaptery jsou abstraktní třídy s konkrétními prázdnými metodami. Usnadňují zápis při vytváření handlerů jež jsou listenery. E#277 Jak zjistíte zdroj události v metodě actionPerformed(ActionEvent ev) { //? Object o = ev.getSource(); E#446 Popište princip delegačního modelu události. Zdroj rozesílá objekt patřičného podtypu EventObject jako argument smluvené metody všem objektům-handlerům, které jsou u zdroje momentálně registrovány. Hadlery musí implementovat příslušné listenery, což zaručuje, že mají konkrétní metody, které zdroj volá. G#057 K čemu slouží abstraktní třída Graphics ? K vytváření kreseb a animací. G#058 Uveďte některé metody objektu java.awt.Graphics ? draw/fill: Rectangle, Line, Oval, String, Image ; get/set Color Fontů ; clip, copy, ... G#059 K čemu slouží abstraktní třída FontMetrics ? Ke zjištění velikosti (výšky, šířky) znaků daného písma v pixelech. Je svázaná vždy s nìjakým grafickým kontextem (objekt Graphics), který určuje počet dpi (pixelù na palec). Velikost písma se zadává v bodech (1/72 palce). G#064 K čemu slouží a co obsahuje metoda update (definovaná v awt) ? K překreslení komponenty. Obsahuje volání clear(), které vymaže pozadí komponenty a pak volá paint(g). G#288 Co jsou, jaký je jejich vztah a rozdíly mezi Graphics a Graphics2D (z java.awt) ? Obě jsou abstraktní třídy v java.awt, Graphics2D extends Graphics, Graphics má pouze jednoduchou "pixelovou" int metriku. Graphics2D podporuje geometrické znázornění s přesností float či double - viz java.awt.geom. Přidává vlastnosti (paint, stroke, composite, transformace, kreslení shape, ...) G#445 Čím to, že lze Graphics g přetypovat: Graphics2D g2=(Graphics2D) g; // ? Ačkoli Graphics2D je potomkem třídy Graphics, v metodách paint(Graphics g) či update(Graphics g), g referuje "podstrčený" objekt typu Graphics2D - tedy výkonnější. G#544 Co znamená java.awt.geom.Point2D.Double ? Jaké má přednosti ? Vnořená třída Double je statický člen ve třídě java.awt.geom.Point2D Vysokou přesnost pro výpočetní geometrii. G#548 K čemu slouží balíček java.awt.geom a s jakou výpočetní přesností ? K výpočtům a vykreslení v oboru rovinné geometrie s přesností double a float. G#549 Které křivky podporuje balíček java.awt.geom ? Lineární, kvadratické, kubické(Bézierovy) a z těchto složené. ? G#550 Co umožňuje třída java.awt.geom.AffineTransform ? Vytvářet objekty pro affinní transfomace, tzv. transformátory, které dokáží transformují útvary typu Shape a Point Jedinou matici se definuje posun ( translation ), škálování ( scaling ), překlopení ( flip ), rotace ( rotation ) a úkos ( shear ). Zachovávají úsečky, paralelitu a dělící poměry. G#551 K čemu slouží zavíjecí pravidla (winding rules) v balíčku java.awt.geom ? K určení zda bod je uvnitř či vně i složité uzavřené křivky slouží pravidla WIND_NON_ZERO a WIND_EVEN_ODD. G#552 Nakreslete princip zavíjecích pravidel WIND_NON_ZERO a WIND_EVEN_ODD ! První počítá počet průsečíků polopřímky a orientované křivky zleva a zprava. Druhé počítá součet průsečíků polopřímky a křivky zda je sudý nebo lichý. G#574 Co je RGB a co CMYK, k čemu se využívají ? Barevný prostor (ColorSpace): RGB=RedGreenBlue a pro display, CMYK=CyanMagentaYellowBlack pro tisk. I#420 Jaké jsou podporované formáty obrázků a jak se natahují do aplikace ? GIF, PNG, JPEG, BMP, WBMP. Pomocí java.awt.Toolkit.createImage(String filename). I#421 Jakou třídou je reprezentován obrázek v operační paměti ? abstract java.awt.Image I#422 Jakým prostředkem lze stáhnou obrázky do operační paměti v aplikaci ? Pomocí java.awt.MediaTracker. Každý je stahován pro něj zřízeným vláknem. I#423 Jak se stahují obrázky do operační paměti v apletu ? Stažení provádí prohlížeč na popud getImage(..) třídy java.applet.Applet. I#424 Jak se vykreslí obrázek pomocí objektu Graphics ? g.drawImage(image, x, y) nebo g.drawImage(image, x, y, w, h). Parametry w, h umožňují transformaci na šířku a výšku. I#425 Co je ikona a jak čím se vytvoří z obrázku ? Ikona je dekorace - "obtisk do GUI" - reprezentovaná interfejsem Icon. Ikonu z obrázku lze vytvořit pomocí třídy ImageIcon. I#426 Jak je reprezentován pixel ? Standardně jako int po bytech zleva: alpha, red, green, blue <0, 255> V BufferedImage lze zvolit jinou reprezentaci pixelu. I#428 K čemu slouží PixelGrabber ? K získání pole pixelů typu int[] každý prvek se strukturou argb, tj. po bytech alpha, red, green, blue s hodnotami 0 - 255. I#566 Nastavte v pixelu int pix maximum červené složky aniž změníte ostatní. pix |= 0xff0000; nebo pix = pix | 255<<16; I#429 Co je java.awt.image.MemoryImageSource ? Třída implementující ImageProducer, umožňující vytvořit Image z int[] pixelů metodou Image Component.createImage(ImageProducer ip ) . J#165 Vyjmenujte předky třídy javax.swing.JFrame ve správném pořadí. Frame, Window, Container, Component, Object J#166 Vyjmenujte předky třídy javax.swing.JButton ve správném pořadí. AbstractButton, JComponent, Container, Component, Object J#470 Co je to Border, kde je definován, k čemu slouží a jaké druhy znáte ? Interfejs javax.swing.border.Border normuje 10 tříd pro zvýraznění okrajů JComponent např.: CompoundBorder, LineBorder, EtchedBorder, BevelBorder, TitleBorder ... J#471 Co je to Duke, k čemu slouží ? Nakreslete jeho schema. Maskot Javy - tajtrlík s červeným frňákem. J#472 Co je to JSpinner, k čemu slouží a jaké znáte druhy ? Je to swingová JComponenta realizující krokový volič předdefinovaných hodnot. Podle užitého model může být standardně datumový, textový, číselný. J#473 Jaký je rozdíl mezi Componentami java.awt a JComponentami javax.swing ? První jsou závislé na platformě, druhé jsou většinou light-weight kreslené Javou, dle vzoru MVC, patří do JFC, implementují Accessible J#474 Co je to GlassPane, kde je definována, k čemu slouží ? Swingová komponenta definovaná v javax.swing. K zachytávání událostí myši nad celou zasklenou komponentou. J#475 Jaké je pořadí vrstev JFrame ? Zdola: Frame, RootPane, LayeredPane, ContentPane, GlassPane J#476 Jaké metody v jakém pořadí volá metoda paint třídy JComponent ? paintComponent, paintBorder, paintChildren. J#477 Co znamená pojem Look and Feel Jelikož swingové komponenty (lighweight) se vykreslují v Javě, lze dynamicky měnit jejich vzhled standardně dle platformy Windows, Motif, Metal. J#478 Co je progress bar a jak je realizován ? Dynamický indikátor postupu nějaké akce pomocí komponenty java.swing.JProgressBar a potomka DefaultBoundedRangeModel v němž samostatné vlákno volá setValue( ). N#106 K čemu slouží třída InetAddress ? Zapouzdřuje internetovou (IP) adresu a poskytuje metody pro přístup k DNS. N#107 K čemu slouží třída URL ? Ke konstrukci objektů typu URL určujících umístění zdroje. N#108 Co je to socket a k čemu slouží ? Jaké má metody ? Objekt typu Socket slouží k toku dvou proudů mezi dvěma komunikačními partnery. Získáme je metodami getInputStream a getOutputStream. N#109 K čemu slouží třída ServerSocket ? K vytvoření objektů, které na straně serveru umožňují přijmout požadavek klientů na komunikaci. N#125 Co blokuje a co vrací metoda accept() třídy ServerSocket? Blokuje vlákno volající tuto metodu dokud nějaký klient nezažádá o spojení. Vrací objekt typu Socket. N#297 Kde je definovaná třída Socket ? V java.net. N#314 Jaký je rozdíl mezi objekty typu URL a URLConnection ? První vyjadřuje umístění zdroje je imutabilní, nekontaktuje síť. Kontroluje syntaktickou správnost a přípustnost protokolu. Druhý představuje přístup ke zdroji a užívá síť. N#315 Jaká se struktura obsahu URL ? protokol:subprotokol://hostitel:port/zdroj#reference?dotaz... N#316 Napište úryvek stažení dat z internetového zdroje ! InputStream is = new URL("http:// ... ").openStream(); BufferedReader br = new BufferedReader( new InputStreamReader(is) ); String line = br.readLine(); P#004 Uveďte příklad definice konstanty rychlosti světla. public class Fyzika { public static final double RYCHLOST_SVETLA = 2.99E+8; // [ m/sec ] } P#005 Uveďte všechny primitivní datové typy a jejich bitové délky. boolean, byte, char, short, int, long, float, double ? 8 16 16 32 64 32 64 P#174 Jaké největší číslo (zhruba) lze uložit do proměnné typu long ? Přesně: 9 223 372 036 854 775 807, postačí však: 8-10 *10^18 (trilionů) P#220 int[] p = {1,2,3}; p.length=7; p[4]=5; // Co obsahuje pole p ? Nic, neboť pole v runtime vůbec nevznikne, jelikož kompilátor odmítne třídu zkompilovat kvůli p.length=7; neb p.length je finální. P#221 int[] p = {1,2,3}; p[4]=5; // Jaký bude nyní obsah pole p ? Obsah zůstane {1,2,3}. Avšak druhý příkaz způsobí výjimku. Po vyjímce ArrayIndexOutOfBoundsException bude obsahovat {1,2,3}. P#222 Proč je délka jednorozměrného pole length finální ? Pole nelze prodloužit bez narušení následujících bytů. Zkrácením by došlo k fragmentaci paměti. P#223 Jak dosáhnout toho, aby index prvku pole mohl být i záporný ? To nelze. P#224 int[] p=new int[0x14]; Jakou má pole p délku a co obsahuje ? 20, obsahuje dvacet nul typu int. P#225 int[] p=new int[014]; Jakou má toto pole délku a co obsahuje ? 12, obsahuje dvanáct nul typu int. P#271 Co se stane: int[] p= new int['Z']; System.out.println(p['Y']); // ? Vytiskne se 0. P#272 Co se vytiskne: System.out.println( (new int['Z'])['Y'] ); 0 P#274 Co se vytiskne: System.out.println( (new int['Z'])['Z'] ); java.lang.ArrayIndexOutOfBoundsException: 90 P#278 Co vytiskne float x0000Ff = 0x0000Ff; System.out.println(x0000Ff); //? 255.0 P#279 Co vytiskne long x0000FL = -0x0000FL; System.out.println(x0000FL); //? -15 P#321 Co zajistí příkaz int[] p = final new int[]{1,2,3}; Syntaktickou chybu chybným užitím final. P#322 Jak lze zajistit neměnitelnost prvků pole ? Skrýt pole do objektu a umožňit přístup k prvků jen pomocí getru. P#332 Kolik prvků může dvojrozměrné pole maximálně obsahovat ? 2^62 ~ 4.67E18 (trilionů). Tvoří čtvercovou matici 2^31 * 2^31. Ale chtělo by to lepší počítač. P#333 Kolik prvků může jednorozměrné pole maximálně obsahovat ? 2^31 tj. ~ 2.1 miliardy. Počet prvků je dán atributem každého pole final int length v intervalu <0, 2^31-1>. P#335 Co znamená, že je pole homogenní ? Všechny jeho prvky jsou téhož typu. Pole primitivů jsou vždy homogenní. P#337 Je pole primitivů Serializable ?, je Cloneable ?, je Comparable ? Každé pole je automaticky Serializable a Cloneable. Není Comparable, neboť primitivní hodnoty nesouvisí s interfejsy. P#338 Jak otestovat, zda pole je homogenní ? Pole primitivů je vždy homogenní. Pole referenčních typů je třeba otestovat zda všechny prvky (objekty) jsou vytvořeny touž třídou pomocí getClass( ) anebo jsou null. P#339 Jak se dá využít pole Object[ ][ ] p = new Object [ ][10]; Nedá, je to chybné syntaxe, neboť není definované pole řádek. P#340 Co jsou literály, jaké jsou jejich druhy ? Uveďte příklady. Přímo vepsaná konstantní hodnota ve zdrojovém kódu. Numerický, znakový, logický, řetězový, referenční, typový: 3E8F 0xFF, 'A' '\u00FF' , true, "BLBLA", null, Integer.class P#381 Jaký je nejmenší počet klíčových slov case v těle příkazu switch ? 0. Tělo může být i zcela prázdné, default může být nanejvýš jeden. P#385 Co působí příkaz System.err.println( '\n' ); // ? Dvojí přechod na další řádku ve výstupním proudu System.err užívaného pro chybové zprávy. P#386 Co působí příkaz System.err.println( (char) 0xA ); // ? Dvojí přechod na další řádku ve výstupním proudu System.err užívaného pro chybové zprávy. P#387 Co působí příkaz System.out.println( 0b11_11_11 ); // ? Vytiskne 63 a přejde na novou řádku. P#388 Co působí příkaz System.out.print( 0b11_11_11+11 ); // ? Vytiskne 74 aniž přejde na novou řádku. P#389 Kde všude ve zdrojovém kódu lze užít symbol § zvaný paragraph ? Není v jazyce definován - lze ho užít jen v komentářích a v literálech znakových a řetězových. P#390 Kde všude ve zdrojovém kódu lze užít symbol # zvaný number sign ? Není v jazyce definován - užívá se však v URL jako příznak kotvy. P#391 K čemu slouží symbol ^ a jak působí ? Je to jednak logický a jednak bitový operátor XOR (eXclusive OR) tedy nonekvivalence. P#392 Co a proč vypíše příkaz System.out.println( 5 ^ 2 ); ? 7 a přejde na novou řádku. P#393 Jaký bude typ a hodnota výrazu ?: 16 ^ 7L ? long, 23 P#394 Co a proč vypíše příkaz System.out.println( 16 ^ 7.0 ); ? Nic, kompilátor ohlásí syntaktickou chybu. P#395 Co a proč vypíše příkaz System.out.println( true ^ false ); ? true P#396 Co a proč vypíše příkaz System.out.println( 'A' ^ 'B' ^ 'B' ^ 'A'); ? 0, neb ^ je operace komutativní a asociativní P#397 Co a proč vypíše příkaz System.out.println( true ^ 0 ); ? Nic, kompilátor ohlásí syntaktickou chybu. P#398 Co a proč vypíše příkaz System.out.println( ^ true ); ? Nic, kompilátor ohlásí syntaktickou chybu. Operátor ^ je binární, infixní. P#399 Co a proč vypíše příkaz System.out.println( 7 ^ 0 ); ? 7 a přejde na novou řádku. P#400 Co a proč vypíše příkaz System.out.print( 7 ^ -1 ); ? -8 P#418 Jaký bude typ a hodnota výrazu ?: ( ~ ~ ~ 3 ) int -4. dvojice inverze se vyruší zbyde ~ 3 -> -3-1. P#419 Jak vytvoříte ekvivalenci dvou boolevských proměnných a, b ? !a^b nebo !(a^b) nejlépe však a == b P#435 Co a proč vytiskne příkaz System.out.println( ! true != true ); ? true . Neboť unární operátor má vyšší prioritu než != . P#436 Co vytiskne příkaz System.out.println( !! n ); Je-li n nastavená boolevská hodnota, pak ji. Jinak syntaktická chyba. P#437 Co vytiskne příkaz System.out.println( 3! ); Sice to připomíná faktoriál tj. 6 , ale je to syntaktická chyba. P#449 Co vyjadřuje příkaz for(;;) { ... } // ? Nekonečný cyklus, pokud v těle cyklu nedojde na break, return, System.exit, přerušení či ukončení probíhajícího vlákna, explicitní či implicitní vyhození objektu typu Throwable, výpadek elektřiny nebo zvetšelost počítače. P#450 Co se stane v příkazu switch pro case "start": break; Má-li řídící proměnná typu String hodnotu "start" přejde zpracování na příkaz následující switch. Pro Javu < 7 kompilátor ohlásí syntaktickou chybu. P#451 Co se stane v příkazu switch pro case "stop": continue; Má-li řídící proměnná typu String hodnotu "stop" přejde zpracování na další interaci obalujícího cyklu. Pokud neexistuje anebo pro Javu < 7 kompilátor ohlásí syntaktickou chybu. P#479 Je číslo Double.MIN_VALUE kladné nebo záporné - a jak zhruba velké ? Kladné a šíleně malé, konkrétně: 4.9e-324 P#480 Kolik čísel umožní typ double rozlišit v intervalu (0.0, 1.0) ? Mantisa má 52 bitů, tedy varietu 2^52 skoro 10^16 (10 biliard) čísel. P#499 Jak vytvoříte bitovou ekvivalenci proměnných long a, b ? ~a^b nebo ~(a^b) P#501 Co a proč vytiskne double a=1e10; System.out.println( a < a+1e-7 ); ? false, ač sčítání proběhne přírůstek je malý a do mantisy se nevejde. P#503 Co vytiskne int k=3; System.out.println( Integer.MIN_VALUE * k); ? -2147483648 ,tj. Integer.MIN pro každé liché k. P#504 Co vytiskne int k=4; System.out.println( Integer.MIN_VALUE * k); ? 0, pro každé sudé k. P#510 Co bude v b a proč ?: int m=Integer.MIN_VALUE; boolean b= m == -m; true, neboť v integrální aritmetice MIN_VALUE a 0 jsou svojí negací, tyto dvě hodnoty jsou vzhledem k negaci idempotentní. P#511 Co vytiskne: System.out.println( 0.F / 0 ); NaN, rozšíření do float bude 0.0F/0.0F, což je neurčitý výraz. P#512 Kolik cyklů provede ?: short i=0, j=0; for (; i+j==0 ; i--, j++) ; Kupodivu skončí po 32768 cyklech kdy j == i ==-32768 a jejich součet počítaný v aritmetice int bude -65536 následkem přetečení j. Pro int i=0, j=0; by součet byl navěky 0. P#513 Co vytiskne System.out.println((byte)0xFF_80); ? -128, zúžení vezme jen pravý byte, tedy 0x8_0 čili 0b1000_0000. P#514 Jakou má typ short vlastní aritmetiku ? Nemá vlastní, nýbrž zprostředkovanou typu int, pomocí rozšíření a následného zúžení. Totéž platí i pro typy char a byte. P#515 Co je ternární výraz ? Napište příklad. Výraz získá dynamicky jednu ze dvou hodnot dle hodnoty podmínky. a > b ? Math.sin(x) : 0 P#516 Co se stane pro b = true resp. false ? ( b ? new Thread() : 2.71F ) Výraz má hodnou reference na objekt typu Thread rep. Float. P#517 Budiž: int k, p=k & -k; Jaké vyjde p pro různá k ? Zkuste pro k=20. p je hodnotou nejnizšího jedničkového bitu k. Pro k=20 je p=4, pro k lichá p=1, pro k=0 je p=0, pro k=MIN_VALUE je p=k. Krom k=0 či MIN_VALUE je p=pow(2,n)>0 kde n je dělitelem k. P#520 Co je třeba k provedení a co vytiskne System.out.print($_=1e-0F); // ? Nevkusnou proměnnou $_ definovat jako float či double. Vytiskne: 1.0 . P#528 Co vytiskne System.out.print( ++'A' ); a proč ? Chyba kompilace, neboť 'A' není proměná (což požaduje ++) nýbrž hodnota. P#529 Co vytiskne System.out.print( -'A' ); a proč ? -65, neboť unární minus rozšíří char na int. P#530 Co vytiskne System.out.print( ++Math.PI ); a proč ? Chyba kompilace, neboť Math.PI je finální a zvýšenou hodnotu nelze vložit. P#561 Co se stane: int[] a={}, b={1,2}; System.out.print( (b=a).length ); //? Vytvoří se dvě pole, b začne referovat na pole nulové délky, čímž se ztratí reference na původní pole {1,2} a pak se vytiskne nula. P#562 Co se stane: System.out.print( (char)('A'/1 ^ 0b0010_0000L + 3 ) ); Vytiskne se b. Ano, je to hnusné, avšak uvažte jak k tomu došlo. A k takovému programátorovi zavolejte rychlou psychiatrickou pomoc. P#564 Co se stane: System.out.print( 1F == 1 ); Vypíše se true. Pravý operand se rozšíří na 1F , neboli 1.0F == 1.0F P#567 Co vytiskne System.out.println(018L); // a proč ? Nic, neboť 8 není oktalová číslice. P#568 Co vytiskne System.out.println(018D); // a proč ? 18.0 literál je vynuceně double, proto se chápe dekadicky. Vedoucí nula vynucuje oktalový zápis jen u celých čísel. P#569 Co vytiskne System.out.println(017.+017); // a proč ? 32.0 první literál je double dekadicky, druhý je int oktalově P#570 Co vytiskne System.out.println(0x1e+2); // a proč ? 32 první literál je int hexadecimální, druhý je int. P#576 Co vytiskne System.out.println(0xFFFF << 16 >>> 16); //? 65535 tj. Short.MAX_VALUE. P#577 Co vytiskne System.out.println(0xFFFF << 16 >> 16); //? //? -1 ,neboť znaménkový bit "1" se při >> rozšíří napravo. P#578 Jak vypočítáte třetí odmocninu z proměnné double x ? Americky: Math.pow(x,1./3) nebo evropsky: Math.pow(x,1/3.0) P#581 Co vypíše System.out.print("abc" == "a"+"bc"); ? true. Konkatenace a následné porovnání proběhne již v kompilaci. P#583 Co vypíše System.out.println( 1+""+2=="12".toString() ); ? true, obě konkatenace a následné porovnání proběhne již v kompilaci. P#585 Kde lze zapsat ... tzn. trojtečku, jaký má význam a jakou výhodu ? Jen jako poslední formální parametr metody či konstruktoru. Je to příznak varargs a tedy volání lze zapsat např. takto: min(a,b,c,d) aniž je třeba zkonstruovat předem pole prvků a,b,c,d. P#586 Co se vytiskne void m(int[] ... zz) {System.err.print( zz.getClass() );} // ? class [[I , neboť zz představuje pole polí int. P#588 Kam continue předá řízení v do-while cyklu ? Do testu podmínky cyklu. P#589 Kam continue předá řízení ve for cyklu ? Do seznamu modifikačních příkazů cyklu. P#590 Lze v těle cyklu typu for( ... : ... ) použít příkaz continue ? Proč ano/ne ? Ano, je to dovoleno. P#591 Jakého je typu a jaký je interval hodnot výrazu 0.5*Math.random()+4/3 // ? double, < 1.0, 1.5 ) hodnoty jsou pseudonáhodné, rovnoměrně rozdělené. P#594 Která metoda je obecnější void m(int[] p) či void m(int ... p) a proč ? Ta m(int ... p) , neboť lze ji volat jako m(pole) i jako m(a, b, 'A') kde int a=1,b=2 int[] pole={a,b,'A'}; V obou případech v těle metody je p typu int[]. P#597 Jakou hodnotu má výraz Integer.parseInt("-fF",16) ? -255 (dekadicky) typu int, druhý parametr vyjadřuje základ soustavy. P#598 Jaká bude hodnota m(5) kde: int m(int q) { int q+=4; return q; } // ? Syntaktická chyba, neb lokální proměnná q není automaticky inicializovaná a tedy operátor += nelze použít. Definice q je navíc duplikována. P#603 Co obsahuje pole int[] p = { 65, 'A', 0x41 }; // ? Tři čísla šedesátpět. P#618 Jaká je hodnota výrazu 1/Double.POSITIVE_INFINITY+5 // ? 5.0 P#619 Jaká je hodnota výrazu Double.POSITIVE+Double.POSITIVE // ? Double.POSITIVE P#620 Jaká je hodnota výrazu Double.POSITIVE-Double.POSITIVE // ? Double.NaN P#621 Co vytiskne System.out.print( 1 << ++2 ); // ? Synaktická chyba. P#622 Co vytiskne System.out.println( 1 << 2 < 4 ); // ? false P#623 Co se stane: int x=0; System.out.print( x = x += 1 << 1 ); // ? Vytiskne se: 2 P#624 Co bude obsahovat x: int x=1; x -= (x += 1) << 1 ; // ? -3 P#625 Co bude obsahovat x: int x=1; x *= (x++ + 1) << 1 + 1; // ? 8 P#626 Co bude obsahovat x: int x=1; x *= (++x + 1) << 1 + x; // ? 24 P#627 Co se vytiskne ? # static int f(int x) { System.out.print(x); return x++; } # int x=1; System.out.print( x+f(x) ); 12 P#628 Co bude obsahovat x: int x=1; x -= (x += 2.71) << 1 ; // ? -5 P#629 Co bude obsahovat x: int x=1; x -= (x += 1) << 3.14 ; // ? Že je to syntaktick chyba. P#630 Co vytiskne System.out.print( ++2 ); // ? Že je to syntaktick chyba. P#631 Co vytiskne: int x=1; System.out.println( x +=- x+++x++ ); 2 P#632 Co vytiskne: int x=1; System.out.print( Math.max(x+=2, ++x) + x---x ); 5 P#633 Co vytiskne System.out.println( -2>>>1 ); // ? 2147483647 tj. Integer.MAX_VALUE=0b1111...1111 P#634 Co vytiskne System.out.println( -2>>>1 ); // ? Chybu při kompilaci - operátor <<< neexistuje. P#635 Co vytiskne System.out.println( 1<<-1 ); // ? -2147483648 tj. Integer.MIN_VALUE=0b10000...0000 P#636 Co vytiskne System.out.print( 1 << 2 << 3 ); // ? 32 P#637 Co vytiskne: int x=1; System.out.println( x+=2+(x+=4) ); // ? 88 P#638 Co vytiskne: int x=1; System.out.printf("%d %d", (x+=2)+(x+=4), x ); // ? 10 7 P#639 Co vytiskne: System.out.println( 'A' / ' ' ); // ? 2 dojde ke konverzi na int 65 / 32 P#640 Co vytiskne: System.out.println( 'A' / ' ' ); // ? 17 dojde ke konverzi na int 65 % 48 P#641 Co vytiskne: int x=1; System.out.printf("%d %d", x-- - --x, x ); 2 -1 P#642 Co vytiskne: int x=1; System.out.print("\n"+x+=2.71); //? Je to syntaktická chyba "\n"+x je typu String. P#643 Co vytiskne: int x=1; System.out.print('\n'+(x+=2.71)); //? 13 neboť '\n' má hodnotu 10, x získá hodnotu 3. P#644 Budiž byte=-128; int i=b; Jaký je bitový obraz obsahu těchto proměnných ? 10000000 a 11111111111111111111111110000000 P#645 Co vytiskne int z=5; System.out.println(-~z+" "+~-z); //? 6 4 P#646 Co vytiskne: System.out.print( true ~ false ); //? Je to syntaktická chyba, operátor ~ je unární bitová inverze. P#647 Co vyjde: int x=1; x+=1.5; //? 2 , neboť += (typ op1) ( op1 + op2 ) a podobně pro další. P#648 Co se stane: System.out.print( false == true == false ); //? Vytiskne se true . P#649 Co vytiskne: System.out.print( 1 < 2 < 3 < 4 ); //? Je to syntaktická chyba, neboť true < 3 . P#650 Co vytiskne: System.out.print( 1 > 2 == 3 > 4 ); //? true . S#098 Které abstraktní třídy definují základní metody proudů? java.io. InputStream, OutputStream, Reader, Writer. S#099 Jaké znáte druhy proudů a co je jejich společný předek ? Bytové a znakové tj. pro byte resp. char a každý z nich buď vstupní anebo výstupní. Je jím java.lang.Object. S#100 Co jsou filtry bytových proudů a jaký parametr má jejich konstruktor ? FilterInputStream resp. FilterOutputStream jsou konkrétní protected podtřídy Input resp. Output Stream, které umožňují modifikovat proud. Parametrem je právě Input resp. Output Stream. S#101 Které proudy umožňují binární vstup(výstup) primitivních typů ? DataInputStream, DataOutputStream a také jejich potomci ObjectInputStream, ObjectOutputStream S#102 Který proud zajišťuje výstupní textovou konverzi ? java.io.PrintStream metodami println, print, printf. S#103 Kde v API Javy najdete rouru a které typy ji umožňují? V java.io. PipedInputStream PipedOutputStream S#104 K čemu slouží objekt typu File a jakou metodou se takový objekt otvírá ? K popisu a manipulacím na lokálním souborového stromu. Neotvírá se, otvírají se proudy a to automaticky. S#105 K čemu slouží interface DataInput resp. DataOutput ? Definuje metody pro čtení resp. zápis primitivních typů. S#130 Co umožňuje třída java.io.File ? Jaké její metody znáte ? Získat informace a ovlivnit lokální datový systém. isDirectory, isFile, exists, length, list, delete, rename, createFile, mkdir, lastModified, canRead, canWrite, canExecute S#133 K čemu slouží serializace ? Co lze a co nelze serializovat ? K převodu Serializable objektů do proudu a k jejich zpětné rekonstrukci. Jen nestatické, netransientní atributy. Vše ostatní, tj. statické atributy, metody, třídy, interfejsy nelze. S#154 Co může být označeno modifikátorem transient a jaký má smysl? Pouze instanční proměnná. Její hodnota se serializací nepřenáší. S#164 Uveďte jména důležitých tříd balíčku java.io. File, InputStream, FileInputStream, ObjectInpuStream, Reader, BufferedReader, PrintStream, Writer BufferedWriter S#180 Je třída java.lang.Object Serializable ? Proč ano, proč ne ? Ne, pak by byly všechny třídy Serializable. S#257 Co je deflace resp. inflace v java.io ? Komprese resp. dekomprese dat. S#308 Co žádá interfejs java.io.Flushable metodou flush() pro streamy ? Konkretizaci metody flush(), která co nejdříve vypudí data z výstupních bufrů k cíli (file, socket) aniž se stream uzavře. S#309 Kdy je třeba zavolat metodu open() u objektů typu java.io.InputStream ? Nikdy - ta neexistuje. Proudy (i výstupní) se otvírají automaticky. S#310 Co jsou a čem se liší java.io.InputStream a java.io.Reader ? Kořenové abstraktní třídy - pro strom tříd pro čtení jednak byte streamu a jednak character streamu. S#311 Co jsou a čem se liší java.io.OutputStream a java.io.Writer ? Kořenové abstraktní třídy - pro strom tříd pro zápis jednak byte streamu a jednak character streamu. S#312 Co je bufr ? V software: Vyrovnávací paměť - vyhražená v operační paměti určená pro I/O operace. S#313 Jaké nebezpečí hrozí napomeneme-li zavřít výstupní proud ? Data zbylá v bufru se neodešlou k cíli ( file, socket ). Např. soubor je neúplný anebo i prázdný. S#430 Co je java.lang.AutoCloseable, kde se využívá ? Smyslem zavedení je automatické zavírání v try( ... ) od Javy 7. Interfejs definující metody void close(). Splňuji ho třídy **Stream, **Reader, **Writer, **Channel, Scanner, **Socket, ZipFile aj. Jeho potomkem je java.io.Closeable. S#431 Uvedťe některé výjimky, které nejsou serializovatelné a proč ? Žádné takové nejsou, neboť class Throwable implements Serializable a tedy i Error-y jsou serializovatelné. S#432 Uveďte některé třídy, které nejsou Serializable. A proč asi ? lang: Object, System, Math, Thread, Process, Compiler, ClassLoader. io: ***Stream, util: Scanner, Arrays, Collections, Timer. Některé obsahují jen statické členy: Math, Compiler, Arrays, Collections. Jiné jsou měnlivé objekty: vlákna, proudy. S#509 K čemu je dobrá metoda flush() ? K fyzickému vypuzení dat z bufru (v operační paměti) výstupního proudu do média. Žádoucí zejména pro síťové komunikace . S#541 K čemu slouží a jak se používá metoda System.out.printf ? K formátování tisku. Má parametry ( String format, Object ... args ) Parametr args může obsahovat i primitivní hodnoty díky autoboxingu. S#543 Jaký objekt je referován System.err ? java.io.PrintStream pro chybové hlášky. T#074 Co je to vlákno ? Jednak třída java.lang.Thread, jednak objekty této třídy, které jediné mohou přijímat CPU čas a tedy projevovat (jakoby) vlastní aktivitu ? T#075 Která metoda definuje chování vlákna ? public void run( ) - instanční metoda třídy java.lang.Thread T#076 Jakou metodou se thread spouští ? public void start( ) T#077 Jak se trvale ukončí běh vlákna ? Jen tím, že dojde k returnu z metody run tohoto vlákna, čímž JVM mu nastaví stav dead. Metodou interrupt to nejde. Zastavit vlákno lze zavrženou metodou stop - ale je to nebezpečné. T#078 Jaké jsou možné stavy vlákna ? (7): NEW, RUNNABLE, RUNNING, BLOCK, WAIT, LOCK, DEAD T#079 Jaké jsou příčiny stavu BLOCK threadu ? Spuštění io operace, zavolání metod sleep nebo join a čeká se na jejich dokončení. T#080 Co je to skupina threadů ? Všechna vlákna jsou organizována ve stromu vláken a jsou jeho listy. Vnitřní uzly jsou typu objekty typu ThreadGroup. T#081 Co je to synchronizační monitor ? Softwarový modul, jenž kontroluje zámky objektů a běh vláken. T#082 K čemu slouží metoda o.wait() ? Když vlákno musí čekat na přidělení nějakého zdroje a tedy nemůže čerpat čas, zavolá metodu wait. To lze jen v synchronizovaném bloku, tedy drží nějaký známek nebo zámky, kteréžto se ve stavu WAIT uvolní. Vlákno přejde do stavu WAIT v poolu objektu o. T#083 K čemu slouží metody o.notify() resp. o.notifyAll() ? Převede nederministicky vybrané vlákno ze stavu WAIT do LOCK resp. všechna vlákna byvše WAIT na objektu o. Vlákno volající tyto metody musí držet zámek k objektu o, jinak se vyhodí IllegalMonitorStateException. T#084 Co je uvíznutí (deadlock) a jak mu zabránit ? Zablokování vláken, následkem vzájemného neuvolnění potřebných objektů. Stane se tak přechodem do stavu WAIT zúčastněných vláken. Java to neumí vyřešit - obranou je dodržení pořadí žádostí o společné zdroje. T#085 Co dělá metoda t.join() ? Běžné vlákno zablokuje a čeká na ukončení vlákna t. Vlákna se jako objekty nenavazují. Navazuje se na vykonanou práci. T#086 Co se stane příkazem vx.join(0); je-li vx vlákno ? Běžné (nikoli vlákno vx) vlákno se blokuje jen na dobu 0 msec bez ohledu na stav vlákna vx. T#087 Co se stane příkazem vx.join(500); není-li vx vlákno ? Syntaktická chyba pokud objekt referovaný vx nemá metodu join. T#088 Do jakého stavu přejde vlákno uspané jako Thread.sleep(...) po přerušení ? Do stavu RUNNABLE. T#089 Co dělá metoda isAlive() ? Vrací true pokud vlákno bylo odstartováno a ještě se nevrátilo ze své metody run(), jinak false. T#090 Jaký je rozdíl mezi metodou sleep(...) a wait(...) ? 1. sleep je statická, definovaná ve třídě Thread, která uspí vlákno ve stavu BLOCK po určitou dobu. 2. wait je finální, definovaná ve třídě Object, volatelná jen v synchronizovaném bloku či metodě, která uvolní držené zámky a převede vlákno do stavu WAIT z kterého se vymaní metodou notify() nebo notifyAll() anebo po uplynutí určeného času. T#118 Napište příklad kritické sekce jednak jako metodu, jednak jako blok. synchronized void m1() { } void m2() { synchronized(o){ } } závorky bloku jsou povinné. T#119 Co deklaruje interfejs java.lang.Runnable a k čemu slouží ? abstract public void run(); Jako norma pro definici činnosti objektu typu java.lang.Thread případně objektu kterému vlákno může předat řízení. T#137 Napište příklad deklarace a spuštění vlastního vlákna . class V extends Thread { public void run() { ... } } new V( ).start(); T#138 K čemu slouží klíčové slovo synchronized ? Kam se dá všude napsat ? K vytvoření kritické sekce, tj. metody či bloku do kterého může vstoupit jen jedno vlákno. Do hlavičky metody nebo do prefixu bloku s referencí na synchronizační objekt. T#139 Co thread sdílí s ostatními thready a co každý vlastní jen on sám ? Sdílí s nimi jediný strom threadů a objekty ke kterým dostal reference. Nesdílí vlastní atributy a zejména vlastní program counter a stack. T#148 K čemu slouží metoda wait( ), kde je definována a kde ji lze bez nehody zavolat ? wait je finální, definovaná ve třídě Object, volatelná jen v synchronizovaném bloku či metodě, která uvolní držené zámky a převede vlákno do stavu WAIT ze kterého se vymaní metodou notify nebo notifyAll anebo po uplynutí určeného času. T#149 Napište úryvek programového ukončení běhu vlákna, tj. bez použití metody stop( ) . bool=false; public void run() { while( bool ) { ... } } public void run() { ... return ... } public void run() { ... assert ... } public void run() { ... throw ... } T#152 K čemu slouží metoda join( long time ) a ve které třídě je definována ? K blokaci vlákna, čekající na ukončení vlákna leč nanejvýš stanovený čas T#155 Jak vznikne uváznutí ( deadlock ) a jak mu lze předejít ? Když vlákna si vzájemně blokují přístup ke zdrojům. Dodržováním dohody o posloupnosti přístupu ke zdrojům. T#169 Která metoda definuje chování vlákna a jak se spouští ? Instanční metoda run() třídy java.lang.Thread zděděná z interfejsu Runnable. class Vlakno extends Thread { public void run(){ ... } } new Vlakno().start(); T#170 Které objekty mohou být zařazeny do front na příděl času ? Jen x, které splňují x instanceof Thread. T#172 Co způsobí metoda notify(), kde je definována a kde ji lze bez nehody zavolat ? Převede vlákno ze stavu WAIT do stavu LOCK. Definovaná jako finální v java.lang.Object. V synchronized bloku či metodě T#231 Zámek kterého objektu se použije v synchronized static metodě ? Zámek popisného objektu třídy. T#232 Lze užít takto interfejs: synchronized(Comparable.class) { ... } ? Ano, synchronizačním objektem je popisný objekt interfejsu. T#234 Vysvětlete chování: synchronized( new Object() ) { ... } Blok nebude fakticky kritickou sekcí, neboť každé vlákno si vytvoří vlastní zámek a vstoupí do bloku. Je to nesmysl a ještě zdržuje. T#235 Vysvětlete chování: synchronized( Thread.currentThread( ) { ... } Blok nebude nejspíš kritickou sekcí, neboť každé vlákno použije vlastní zámek a vstoupí do bloku. Ledaže existuje jiné vlákno toto vlákno užívá jako synchronizační objekt. T#237 Může být konstruktor označen synchronized ? Proč ano, proč ne ? Ne. JVM sama zajišťuje synchronizaci konstruktorů. T#238 Lze abstraktní metodu označit modifikátorem synchronized ? Ne, nemá tělo a tedy ani nepředstavuje kritickou sekci. T#239 Lze překrýt synchronizovanou metodu nesynchronizovanou ? Ano, modififkátor synchronized se nedědí. T#240 Lze překrýt nesynchronizovanou metodu synchronizovanou ? Ano. T#258 Jak se dá zjistit, které vlákno právě probíhá daným blokem ? Thread t = Thread.currentThread(); T#259 Jak zjistíte, které vlákno právě probíhá danou metodou ? Thread t = Thread.currentThread(); T#260 Dá zjistit, které vlákno probíhá danou třídou a jak ? Nedá, neboť třídou nic neprobíhá. T#261 Které vlákno probíhá třídou java.lang.Object ? Žádné, třídami nic neprobíhá. Probíhá metodami, konstruktory, statickými a nestatickými inicializátory. T#262 Napište příklad, jak změřit čas spotřebovaný nějakou metodou ? long t0=System.currentTimeMillis(); m(); long time=System.currentTimeMillis()-t0; T#317 Jak restarovat vlákno, dokončivší metodu run či zastavené metodou stop ? Vlákno nelze nijak restartovat. Musí se vytvořit nové. T#318 Proč neužívat k ukončení vlákna zneváženou (deprecated) metodu stop ? Zastavení vlákna v neurčitém místě může zanechat hodnoty objektů v nekonzistentním stavu. T#341 Jakého typu (krom Object) může být x v přiřazení x=Runnable.class; //? Class resp. Class<Runnable> či interfejsy třídy Class, tj.: ( Serializable, AnnotatedElement, GenericDeclaration, Type ) T#344 Které všechny objekty mohou být ve stavu WAIT ? Pokud splňují x instanceof java.lang.Thread && x.isAlive(); T#447 Lze odstartovat každý objekt který implementuje Runnable ? Proč ano, proč ne ? Jen ten který je typu Thread. T#448 Za jakých okolností lze odstartovat objekt, který neimplementuje Runnable ? Za žádných, neboť odstartovat jen objekt typu Thread a každý takový implementuje Runnable, neboť class java.lang.Thread implements Runnable. T#453 Které metody se pojednávají přerušení vlákna a kde jsou definovány ? void interrupt(), boolean isInterrupted() a static boolean interrupted() všechny definované ve třídě Thread. T#454 Co přesně dělá instanční metoda interrupt() ? Ve stavech RUNNABLE / RUNNING jen nastaví vláknu this příznak přerušení. Ve stavech WAIT / BLOCK join / BLOCK sleeping vláknu this zruší příznak přerušení, změní mu stav na další tj. LOCK / RUNNABLE / RUNNABLE, což pak ve stavu RUNNING hned vyhodí InterruptedException. Ve stavu not ALIVE neuděla nic. T#455 Za jakých okolností nastane vždy InterruptedException po zavolání interrupt() ? Když je vlákno ve stavech WAIT / BLOCK join / BLOCK sleeping. K vyhození vyjímky dojde jakmile bude vlákno ve stavu RUNNING. T#456 Co přesně dělá instanční metoda interrupt() je-li vlákno RUNNABLE/RUNNING ? Jen nastaví příznak přerušení. T#457 Co přesně dělá instanční metoda isInterrupted() ? Aniž mění příznak přerušení, vrátí true je-li nastaven, jinak false. T#458 Co přesně dělá třídní metoda interrupted() ? Zruší příznak přerušení, vrátí true byl-li nastaven, jinak false. T#459 Jakými způsoby se může změnit stav vlákna BLOCK a na který přejde ? Přejde na RUNNABLE dokončením join, sleep, I/O nebo interrupt(). T#460 Jakými způsoby se může změnit stav vlákna RUNNABLE a na který přejde ? Přejde na RUNNING výběrem CPU schedulerem pro příděl CPU času. T#461 Jakými způsoby se může změnit stav vlákna z RUNNING na RUNNABLE ? Ukončením přídělu CPU času vnitřním rozhodnutím CPU scheduleru. Požadavkem k ukončením přídělu CPU času metodou yield() . T#462 Do kterých stavů může přímo přejít stav vlákna RUNNING ? Do RUNNABLE, BLOCK, WAIT, LOCK, DEAD. T#463 Do kterých stavů může přejít vlákno ze stavu NEW a jakými způsoby ? Jen do RUNNABLE a to metodou start(). T#464 Do kterých stavů může přejít vlákno ze stavu DEAD a jakým způsoby ? Do žádných jiných a žádnými. Vlákno existuje však jako objekt. T#465 Jak se může změnit stav vlákna z RUNNING na WAIT a co je k tomu třeba ? Jedině metodou wait(...) zavolanou v kritické sekci tj. synchronized metodě či bloku - tedy držící zámky, které metoda wait uvolní. T#466 Zda a jak může stav vlákna RUNNING přímo přejít do stavu LOCK ? Jen když vlákno žádá vstoupit kritické sekce, tj. do synchronized metody či bloku, leč nezíská zámek referovaného objektu, neboť kritická sekce je obsazena jiným vláknem. T#467 Jakými způsoby se vlákno může vymanit za stavu WAIT a do kam přejde ? Přejde do stavu LOCK vypršením WAIT času nebo notifikací metodami notify() resp. notifyAll() nebo přerušením metodou interrupt(). T#468 Co se děje s vláknem ve stavu LOCK kam všude může přejít a jak ? Čeká až mu monitor (nedeterministicky) přidělí zámek referovaného objektu a převede vlákno do stavu RUNNABLE. T#469 Jak se může vlákno ve stavu WAIT dostat opět do stavu RUNNING ? Jen postupně přes stav LOCK a pak RUNNABLE . T#505 Co se stane je-li x typu Thread a zavoláte x.run( ) ? Metodu provede Thread.currentThread a nikoli vlákno x. To může mít nepříjemné důsledky. T#535 Jak lze vícekrát odstartovat tentýž objekt typu Thread ? Nelze - nanejvýš jednou a to pouze metodou start(). T#599 Co se stane new Thread(){ public void run(int v){System.exit(v);} }.run(); // ? Vytvoří se objekt dle anonymní třídy typu Thread, který se však neodstartuje. Běžné vlákno provede prázdnou metodu run(), takže se vlastně nic nestane. Tělo třídy { public void run(int v){System.exit(v);} je tam zcela zbytečně. U#263 Jaký je význam hodnoty time: long time=System.currentTimeMillis(); ? UTC čas uplynulý od 01 JAN 1970 00:00:00 v msec. UTC = Universal Time Coordinated (občas korigovaný dle rotace Země). U#299 Jaké hodnoty vrací funkce java.lang.Math.random() ? Pseudonáhodná čísla typu double rovnoměrné rozdělená v <0.0, 1.0). U#300 Jak se získají náhodná čísla s normálním (Gaussovým) rozdělením ? Pomocí objektu třídy java.util.Random metodou nextGaussian() U#301 Jak se získají náhodná čísla s Poissonovým rozdělením ? To API Javy nemá. Leckde jinde např.: commons.apache.org/math/ U#302 Jak se získají náhodná čísla se Studentovým rozdělením ? To API Javy nemá. Leckde jinde najdete na internetu. U#303 Jakou má podporu komplexní aritmetika ? V API Javy žádnou. Hledejte jinde např.: commons.apache.org/math/ U#319 Co podporuje třída java.util.Arrays ? Třídění, vyhledávání, vyplňování, porovnávání, kopírovaní a výpis polí statickými metodami sort, binarySearch, fill, equals, copyOf, toString. U#438 Co dělá metoda shuffle a kde je definována ? Náhodně permutuje prvky kolekce List. Statická metoda třídy java.util.Collections. U#539 Jak zajistíte, aby třídění Arrays.sort(pole) nebylo ovlivněno jiným vláknem ? Ježto metody třídy Array nejsou synchronized, je nutno zřídit obklopující blok synchronizovaný na pole synchronized(pole){ Arrays.sort(pole); } U#540 Jak zajistíte, aby všechny metody třídy ArrayList byly synchronizovány ? List list = Collections.synchronizedList( new ArrayList() ); U#542 Uveďte znaky Formatteru pro základní typy při formátování řetězů a tisku ? d - celé číslo dekadicky, x - hexadecimální, f - číslo s desetinnou tečkou, e - exponenciálně, c - znak, s - string, t - čas U#565 K čemu slouží třída java.util.BitSet a jaké má metody ? K vytvoření indexované dynamické množiny hodnot typu boolean. get/set n-tý bit, logické operace and, andNot, or, flip, intersect na množině bitů, cardinality - počet true bitů, ... U#614 Jaký formát mají data v souborech typu .properties ? V každé řádce jen klíč = hodnota a obé jsou řetězy. U#615 Co je Locale a k čemu slouží ? Konkrétní třída java.util.Local umožňuje definovat jazyk a stát pro podporu internacionalizace. U#617 Co znamená i18n ? Zkratka za internationalization (celkem 20 písmen). V#001 Co je to byte-kód a jak se zpracovává ? Vnitřní forma javského programu je výsledkem kompilace. V runtime JVM ji nejdříve verifikuje a pak interpretuje. Anebo lépe v runtime ji ještě JIT přeloží do kódu platformy, čímž program běží rychle jako v C. V#002 Kdy a jak se inicializují statické proměnné třídy ? V okamžiku zavedení třídy na implicitní hodnoty nebo na hodnoty inicializačních výrazů nebo statickými inicializátory. V#003 Jak je zajištěna nezávislost Javy na platformě ? Žádný její rys není závislý na implementaci. V#023 Co je JIT (Just In Time)? Překlad byte kódu do instrukcí platformy v runtime. V#042 V které části operační paměti se ukládají objekty ? Na haldě. V#043 V které části operační paměti se ukládají lokální proměnné ? Do aktivačních záznamů na zásobníku. Zásobníky jsou vlatnictvím vláken. V#128 Jak se vytvoří objekt, kde je alokován v čase běhu a co obsahuje ? Pomocí konstruktoru, na haldě, nestatické atributy. V#131 V jakém případě lze objekt zrušit, jak a kdy se to provádí ? Není-li referován z žádného živého vlákna. Garbage collectorem, JVM při nedostatku paměti nebo programaticky System.gc() V#157 Kdy a jak se inicializují statické atributy třídy v čase běhu ? Při natažení třídy do paměti přiřazením hodnot a případně statickými inicializátory. V#158 Kdy a jak se inicializují atributy interfejsu v čase běhu ? Při natažení interfejsu do paměti přiřazením hodnot. V#256 Co je jar a jaké má vlastnosti ? Java ARchive je extenze zipu, případně se souborem MANIFEST.MF v adresáři META-INF. I dalších kvalifikovaných adresářů META-INF může být libovolně. V#266 Co je javadoc ? Součást JDK. Program, který z dokumentačních komentářů vytváří doclety. V#286 Jaké hlavní vstupy má kompilátor ? soubory *.java a classpath V#287 Co je výstupem kompilátoru je-li zdroj: interface $ { } // ? soubor $.class V#369 Kde najdete v JDK programy java, javac, javadoc a k čemu slouží ? V jdk***/bin, je to: interpret, kompilátor, dokumentátor. V#370 Co je JRE a kde se v něm nalézá program javac ? Java Runtime Environment - obsahuje interpret java a API. Neobsahuje vývojové prostředky jako: kompilátor javac, dokumentátor javadoc, debugger apod. W#056 Co je a co obsahuje java.awt ? Balíček a podbalíčky Abstract Window Toolkit zajišťují GUI vázaný na platformu. Obsahuje řadu interaktivních kompontent a příslušenství. Podbalíčky .event .color .geom .image .print W#060 Uveďte nejdůležitější interaktivní komponent v AWT. Button, TextField, TextArea, Choice, List, Canvas, ScrollBar, MenuBar, Menu, MenuItem, PopupMenu W#061 Co je AWT kontejner, uveďte podtřídy definující kontejnery. Objekt třídy java.awt.Container pro ukládání grafických komponent a jejich rozmisťování. Container má přímé potomky Panel, ScrollPane a Window. W#062 Ve které třídě v AWT je definována metoda repaint a k čemu slouží ? V java.awt.Component, definuje co má být vykresleno awt-vláknem. W#063 Ve které třídě v awt je definována metoda repaint a k čemu slouží ? V java.awt.Component, zadává požedavek na překreslení komponenty případně její obdélníkové části. W#065 Jakou metodou se přidává objekt do kontejneru ? add( Component c, ... ) W#066 Co je to layout manager ? Objekt který rozmisťuje nějakým způsobem grafické komponenty v grafickém kontejneru. W#067 Uveďte standardní typy layout managerů. awt: Flow- Grid- Border- GridBag- Cardswing: Box- Spring- W#068 Jak se chová FlowLayout ? Rozmisťuje komponenty do řádek zleva doprava a shora dolů, jakoby formou přetékavého textu. Komponenty zachovávají svoji velikost. Umožňuje alignment levý , pravý, středový. W#069 Jak se chová GridLayout ? Rozmisťuje komponenty do buněk pravidelné mřížky. Komponenty zabírají celé buňky. W#070 Jak se chová BorderLayout ? Rozmisťuje komponenty do pěti oblastí: North, West, Center, East a South. Komponenta zabere vždy celou oblast. W#071 Jak se chová CardLayout ? Jako balíček karet, viditelná je jen ta vrchni. W#072 Co umožňuje GridBagLayout ? Rozmisťuje komponenty do buněk nepravidelné mřížky. Komponenty mohou obsadit i více buněk tvořících obdélník. W#073 Co znamená setLayout( null ) ? Neužití standardních layoutů. Komponenty rozmisťuje pragramátor metodou setBounds. W#117 Které metody spustí volání metoda repaint( ) jednak v awt, jednak ve swingu ? V awt: update( Graphics g ) ve swingu: paint( Graphics g ) W#121 Co je a co umožňuje objekt třídy java.awt.GridBagLayout ? Objekt typu LayoutManager. Rozmístění komponent v kontaineru do buněk nepravidelné mřížky. Komponenta může obsadit rektangulárně i více buněk. W#122 Jaké hodnoty obsahuje java.awt.Point a co znamenají ? int x, y; Pozici od levého horního rohu tj. ve 4. kvadrantu. W#123 Jaké hodnoty obsahuje java.awt.Dimension a co znamenají ? int width, height; Rozměr obdélníku. W#136 Uveďte pořadí předků tříd java.awt.Frame a java.awt.Panel. Object, Component, Container, Window, Frame Object, Component, Container, Panel W#252 Jaké je úplné jméno třídy Color ? V kterém balíčku sídlí ? java.awt.Color, v java.awt W#253 Jaké jsou barevné složky třídy Color ? ARGB W#254 Přibližně kolik barevných odstínů lze vytvořit třídou Color ? Pro opacitu: 2^24 = 16 777 216 S užitím poloprůhlednosti 2^32 = cca 4 mld. W#255 Vytvořte poloprůhlednou fialovou barvu a zdůvodněte. Color col = new Color( 255, 0, 255, 128 ); // typy int Color col = new Color( 1, 0, 1, 0.5f ); // typy float W#275 Jaký je defaultní LayoutManager pro Frame a jak se chová ? BorderLayout, rozdělí plochu na 5 oblastí N, W, C, E, S. W#276 Jaký je defaultní LayoutManager pro Applet ? FlowLayout, ten přejal od Panelu (svého přímého předka). W#304 Napište jak pípnout ? Toolkit tk=Toolkit.getDefaultToolkit(); tk.beep(); W#305 K čemu slouží třída Toolkit a kde je definována ? K zíkání informací z vnějšího prostředí GUI. V java.awt. W#306 Jaké třídy umožňují získávat některé informace z OS. System, Properties, ProcessBuilder. W#527 V které třídě jsou definovány metody setLayout(...) a getLayout() ? V java.awt.Container, což je přímý předek java.awt.Frame, java.awt.Panel, javax.swing.JComponent aj. W#575 Získejte zelenou složku pixelu reprezentovaného jako int pix: //? int green = pix>>8 & 255; nebo green = (pix & 0xFF00)>>8; Pozn.: >> má vyšší prioritu než & . X#048 Co je to výjimka a čím je reprezentovaná ? Jednak třída Exception ze stromu Throwable, jednak objekt typu Exception popisující nehodu v runtime. X#049 Je výjimka objekt, třída, interface anebo událost ? Vyjímka je objekt třídy Exception vytvořený coby popis konfliktu. X#050 Napište příklad implicitního vzniku výjimky. (new int[0])[0]=0/0; Jakou to vyhodí ? X#051 Jakou vyjímku vyhodí příkaz (new int[0])[0]=0/0; ? java.lang.ArithmeticException X#052 Napište příklad explicitního vzniku výjimky. throw new IllegalArgumentException("Takhle to nejde"); X#053 Napište příklad úplné syntaktické formy příkazu try-catch-finally. try ( acloseable ; bcloseable ; ... ) { ... } catch( NullPointerException | ArithmeticException ex ) { ... } catch( final Exception ex ) { ... } finally { ... } X#054 Kolik parametrů může mít klauzule catch a jakých jsou typů ? Právě jeden - ten však může být specifikován více subtypy Throwable (oddělené | ) aniž některý je subtypem jiného. X#055 Jak se chová blok finally ? Je-li definován, je proveden vždy. X#132 Napište příklad explicitního (tj. záměrného) vzniku, vyhození a odchycení výjimky. try { throw new NullPointerException(); } catch ( Exception ex ) { } X#146 Napište definici vlastní nekontrolované výjimky a vyhoďte tuto výjimku. class V extends RuntimeException { } throw new V( ); X#163 K čemu slouží, kde se píše a kdy se aktivuje klauzule finally ? K úklidu klauzule tcf nebo tf, na konci, v každém případě je-li přítomna. X#230 Čím se liší výjimky typu RuntimeException od ostatních ? Jsou unchecked , tj. nekontrolované kompilátorem. X#236 Kde všude lze napsat klíčové slovo throws a co případně za ním ? V hlavičce metody či konstruktoru. Seznam tříd typu Throwable. X#292 Je vyhozená vyjímka objekt, třída, událost nebo anotace ? Objekt třídy Exception potomek třídy Throwable. X#345 Které všechny objekty lze vyhodit pomocí operátoru throw ? Pokud splňují x instanceof java.lang.Throwable, typicky Exception a Error - ale nejen. X#452 Proč jsou Error a výjimky typu RuntimeException nekontrolované ? Error jsou těžko předvídatelné a většinou nenapravitelné. RutimeException jsou potíže způsobené převážně programátorem během vývoje. A mentorování kompilátorem by bylo zbytečně zatěžující. X#611 V jakém pořadí je nutno psát catch( Throwable parm ) klauzuje ? Tak, aby stejný nebo obecnější typ parametru nepředcházel jeho subtypu. X#612 Co se stane: try{ } finally { } // ? Oba prázdné bloky vlákno provede - byť naprázdno. X#613 Co se stane ? # while (true) { # try { System.out.println( 5/0 ); } # catch ( Exception ex ) { break; } # finally { System.out.println("*"); continue; } # } Nekonečný tisk hvězdiček. X#614 Co se stane ? # while (true) { # try { System.out.println( 5/0 ); } # catch ( Exception ex ) { continue; } # finally { System.out.println("*"); break; } # } Vytiskne jen jednu hvězdičku. Y#401 Kde lze deklarovat typové parametry ? Ve hlavičkách tříd, interfejsů a metod. U konstruktorů to má smysl jen v parametrických třídách. Metody lze parametrizovat i v neparametrizovaných třídách. Y#402 Napište příklad deklarací typových parametrů třídy a metody. ... class Jmeno < T1, ... Tn > extends ... implements ... { } ... < T1, ... Tn > Ti jmeno ( .... ) throws ... { ... } Y#403 Jaká je syntax deklarace typových parametrů ? < T1, T2, ... Tn > Y#404 Napište příklad deklarací typových parametrů abstraktní metody. abstract <U,V, W extends Number> W m(U u, V v) ; Y#405 Jaké identifikátory se obvykle užívají pro typové parametry ? T - typ, tj. třída či interfejs, E - element, N - number, K - klíč, V - value Y#406 Co znamená a co jsou X,A,B,C ve vymezení <X extends A & B & C> ? X - typová proměnná, A - třída nebo interfejs, B,C - interfejsy, & - konjunkce. Tím X vymezuje množinu přípustných objektů. Y#407 Co znamená přechod na raw type ? Napište příklad jak nastane. List lst = new ArrayList<String>(); Y#408 Co je diamond operátor a jaký je jeho smysl ? Píše se jako <> ale i < > slouží pro typovou inferenci. Y#409 Kde se všude píše diamond operátor tj. <> ? Tímto operátorem se vyjadřuje inference. Jen v konstrukci, např.: List<Float> a = new ArrayList<>( ... ) . Y#410 Co je a kde se vyskytuje žolík ( wildcard ) ? Žolík, tj. ?, představuje množinu vymezených typů. Samotný ? je ekvivalentní s ? extends Object . Y#411 Jak může být reference typově vymezena žolíkem ? Shora: ? extends Typ anebo zdola: ? super Typ . Z#006 Jak se v Javě provádí dereference odkazů? Implicitně při přístupu k položkám. Z#007 Jak lze zjistit délku kteréhokoli referenčního typu ? Nelze. Z#008 Jak lze přetypovat referenční typ na int? Nelze. Z#009 Jak se v Javě zduplikuje objekt ? Metodou A a2 = a1.clone(); kde : class A implements Cloneable { public A clone() throws CloneNotSupportedException { A x = (A) super.clone(); ... return x; } } Z#010 Uveďte příklad deklarace trojúhelníkové matice. short triagle[][]={ {1}, {2, 3}, {4, 5, 6} }; Z#011 Co všechno znamená modifikátor final? Proměnnou (instanční, třídní, lokální, parametr) nutno nastavit nastavit, ale jen jednou. Metodu nelze překrýt. Třída nemůže mít potomky. Z#012 Co musí splňovat překrývající (overriding) metoda ? Musí mít shodnou signaturu, kompatibilní návratový typ, nesmí mít přísnější modifikátor přístupu, a nesmí rozšiřovat stigma kontrolovaných vyjímek. Z#013 Co musí splňovat překrývající (overriding) konstruktor ? Nic, neboť konstruktory se nedědí. Z#014 Co je nativní metoda ? Metoda napsaná v jiném jazyce s modifikátorem native. Místo těla má jen středník. Z#015 Co je nativní nelokální proměnná, tj. s modifikátorem native ? Syntaktická chyba. Z#016 Co je nativní třída, tj. s modifikátorem native ? Syntaktická chyba. Z#017 Co je nativní interfejs ? Syntaktická chyba. Z#018 Proč není v Javě zaveden typ union? Pomocí unionu by bylo možno obejít striktní typovou kontrolu. Z#019 Co je třída ? Konstrukt definující množinu dat a operací nad těmito daty. Z#020 Jaká omezení má statická metoda oproti obyčejné (dynamické) metodě ? Statická metoda nemůže přímo přistupovat k instančním proměnným ani přímo volat instanční metody třídy. Přistoupit resp. volat může prostřednictvím reference k objektu. Z#021 Co je objekt ? Objekt je jedna instance instančních proměnných třídy. Z#022 Jaký je rozdíl mezi objektem a instancí třídy. Žádný. Z#024 Jak se inicializují instanční proměnné ? Vždy na implicitní hodnoty, pak postupně případně na hodnoty přiřazené: - v deklaraci atributu, - postupně v nestatických inicializátorech - konstruktorech. Z#025 Co je to implicitní konstruktor ? Konstruktor bez parametrů, který je implicitně nadeklarován pokud není není deklarován žádný explicitní konstruktor. Z#026 Které operátory umožňují explicitní volání konstruktoru? this, super, new Z#027 Co jsou to třídní proměnné (class variables), jaký mají modifikátor ? Proměnné, které vznikají v okamžiku zavedení třídy do paměti a identifikují se jménem třídy a jménem proměnné. Tyto proměnné mají modifikátor static. Z#028 Jak a kdy se provádí rušení objektů ? Garbage collectorem, jenž se aktivuje buď automaticky při nedostatku paměti na haldě anebo zavoláním metody System.gc . Z#029 Jak se provádí rušení tříd ? Výmazem z balíčku na disku. Z#030 Kdy může být objekt zrušen ? Neexistuje-li nedémonické vlákno od něhož vedou reference k objektu. To vlákno může být i neživé. Z#031 K čemu slouží metoda finalize a kde je definována ? Slouží k poslednímu přístupu k objektu jenž garbage collector chce zrušit. Definována je v java.lang.Object jako prázdná. Z#032 Jak se vytváří podtřída ( subclass ) a jak podinterfejs ( subinterface )? Obé extenzí s užitím klíčového slova extends. Z#033 Jak se jmenuje univerzální nadtřída a v kterém je balíčku? java.lang.Object Z#034 Jak se jmenuje univerzální nadinterface a ve kterém je balíčku? Neexistuje, tudíž v žádném. Z#035 K čemu slouží klíčové slovo super ? super ( .. ) volá konstruktor přímé nadtřídy, super. referuje člen nadtřídy, < ... super ... > k vymezení typového parametru Z#036 K čemu slouží klíčové slovo this ? this ( .. ) volá konstruktor téže třídy, this. referuje člen téhož objektu. Z#037 Které metody nemohou být překryty (overriden) ? final a private. Překrývat lze jen metodu nestatickou jinou nestatickou anebo statickou jinou statickou. Z#038 Co je to abstraktní třída a jaké má vlastnosti ? Třída vyznačená modifikátorem abstract. Má alespoň jeden konstruktor, ale nemůže vytvářet objekty. Může mít abstraktní metody. Její statická část tj. atributy, metody a inicializátory jsou zcela funkční. Z#039 Co je abstraktní metoda ? Uveďte příklad. Nestatická metoda má středník místo těla. Nemůže být static, private, final ani synchronized. Z#040 Jaký je rozdíl mezi abstraktní a prázdnou metodou ? Uveďte příklad. abstract int m1( ... ); nemá tělo jen středník, má zvolený návratový typ void m2( ... ) {} má prázdné tělo, defaultní return, návratový typ void Z#041 Jak se liší abstraktní třída a interface ? Abstaktní třída je potomkem nějaké třídy, může implementovat interfejsy, má alespoň jeden konstruktor, může mít konkrétní metody, nestatické proměnné, statické i nefinální proměnné, statické i nestatické inicializátory. Interfejs může extendovat libovolný počet interfejsů. Může mít jen statické, finální inicializované atributy, abstraktní metody a vnořené interfejsy a třídy. Z#044 Co znamená klíčové slovo package a kde je možné ho použít ? Package (balíček) je sbírka věcně souvisejících tříd a interfejsů tvořící pro ně jmenný prostor a to ve stejnojmenných adresářích jednak ve zdroji, jednak v přeložené kódu. Tím se zajišťuje pořádek a ochrana. Jeden package patří jen jednou na začátek zdrojového souboru. Z#045 K čemu slouží příkaz import ? Definuje cestu ke třídám a interfejsům a čímž netřeba uvádět ve zdrojich úplná jména. Zlepšuje se tím čitelnost zdrojů. Z#046 Jaké jsou modifikátory přístupu a co znamenají ? public - odevšad přístupný, protected - jen členům v balíčku a potomkům typu v jiných balíčcích, nepsaný package-protected tzv. friend - jen členům v balíčku, private - přístup jen v typu. Z#047 Vyjmenujte alespoň 5 standardních javských package a k čemu slouží. Např.: java .lang .util .io .net .awt .awt.event , javax .swing Z#110 Jak lze využít abstraktní konstruktor ? Nijak, neboť neexistuje. Z#111 Co jsou instanční proměnné, podle čeho je poznáte a kde jsou alokovány v čase běhu? Jsou to atributy objektů, jsou nestatické a tedy nemají modifikátor static, alokovány jsou na haldě. Z#112 Které metody mohou být překryty ( overriden ) instanční nebo třídní ? Obé, ale jen nestatickou jinou nestatickou či statickou jinou statickou. Z#113 Co tvoří signatury metod a konstruktorů ? Jméno a sekvence typů parametrů. Nikoli návratový typ, modifikátory, stigma (tj. throws-list ) Z#114 Jaký je rozsah platnosti formálních parametrů konstruktoru ? Celé tělo konstruktoru. Z#115 Napište příklad abstraktní metody. Kdy může mít modifikátor static ? abstract int m( ); Nikdy. Z#116 Co způsobí příkaz String t = super.toString( ); ? Zavolá metodu toString přímého předka. Z#124 Kde všude lze napsat this( ); a co způsobí ? Jen jako první příkaz v konstruktoru, zavolá bezparametrový konstruktor téže třídy. Z#126 Co všechno lze deklarovat ve třídě ? Atributy, metody, konstruktory, inicializátory, vnořené třídy a interfejsy, vnitřní třídy, výčty tj. enum, anotace. Z#127 Co je abstraktní třída? Kdy může mít modifikátor final? Kolik má konstruktorů ? Třída s modifikátorem abstract. Nemůže. Alespoň jeden. Z#129 Co je anonymní třída a jak ji lze vytvořit ? Napište příklad použití. Vnitřní třída bez hlavičky použitelná pro vytvoření jediného objektu. X o = new X( ) { ... } kde X je třída anebo interfejs. V těle je možné či nutné přepsat metody tak, aby vznikla kontrétní třída. Z#134 Napište příklad zavolání metody předka. super.m(...); Z#135 Co způsobí příkaz String t = super.super.toString( ); ? Syntaktickou chybu při kompilaci. Z#140 K čemu slouží a kde je definována metoda finalize( ) ? K přístupu k objektu, který GC chce zrušit, v java.lang.Object. Z#141 Napište test zda objekt referovaný proměnnou q implementuje interface W. q instanceof W Z#142 Napište test zda objekt referovaný proměnnou p je typu T. p instanceof T Z#143 Jaké jsou modifikátory přístupu tříd ? Pro "vrcholové" : public, "friend" Pro vnitřní/vnořené: public, "friend", protected, private, Z#144 Podle čeho poznáte, že metoda je přetížená (overloaded) ? Má stejné jméno jako jiná metoda v témže typu - leč jinou signaturu. Přesněji řečeno: přetížené je jen jejich jméno. Z#145 Co umožňuje polymorfismus ? Co je a čeho se týká pozdní vazba ? Pojednat heterogenní kolekce podle společného nadtypu, přičemž chování je specificky implementované dle jednotlivých podtypů. Z#147 Kde všude lze napsat super( ); a co způsobí ? Jen jako první příkaz v konstruktoru, aktivuje konstruktor přímého předka. Z#156 Kde všude lze deklarovat lokální proměnné a kde jsou alokovány v čase běhu ? V metodách, konstruktorech, inicializátorech a blocích. V aktivačních záznamech zásobníků vláken. Z#159 Jak lze změnit typ atributů interfejsu v čase běhu ? Nelze. Z#160 Jak lze přidat třídě metody v čase běhu ? Nelze. Z#161 Co je implicitní tj. defaultní konstruktor, jeho parametry, obsah a chování ? Jenž vznikne není-li žádný , žádné, aktivuje konstruktor bez parametrů přímého předka. Object však nemá předka. Z#162 Co jsou to třídní proměnné ( class variable ), jak se identifikují a kde sídlí ? Unikátní proměnné, mají modifikátor static, v popisném objektu třídy. Z#173 Napište příklad statického inicializátoru. Kolik jich třída může mít ? static { ... } , libovolně. Z#175 Co způsobí příkaz String t = super.this.toString( ); ? Syntaktickou chybu při kompilaci. Z#176 Co způsobí příkaz String t = this.this.toString( ); ? Syntaktickou chybu při kompilaci. Z#177 Co způsobí příkaz String t = (super).toString( ); ? Syntaktickou chybu při kompilaci. Z#178 Co je java.lang.Object a jaké má dostupné metody ? Jednak základní třída API, kořenem stromu všech tříd, jednak objekt jenž je základem všech objektů. public: equal, hasCode, toString, final: getClass, wait, notify, notifyAll, protected: finalize, clone. Z#179 Je třída java.lang.Object finální ? Proč ano, proč ne ? Není. Byla-li by, nemohla by mít potomky a tudíž by byla v API jediná. Z#181 Je třída java.lang.Object synchronizovaná ? Ne, žádná třída není. Synchronizovat lze jen metody anebo bloky. Z#182 Je třída java.lang.Class finální ? Proč ano, proč ne ? Ano, je příliš důležitá pro indentifikaci objektů. Z#183 Je třída java.lang.Class Serializable ? Ano. Z#184 Je objekt typu java.lang.Runnable serializovatelný ? To nelze určit, neboť interfejs Runnable není Serializable. Záleží jaká třída objekt zkonstruovala. Z#185 Jaký je rozdíl mezi instanční a třídní proměnnou ? Instanční sídlí v každém vytvořeném objektu, třídní je unikátní a sídlí v popisném objektu třídy. Z#186 Jaký je rozdíl mezi instanční a třídní metodou ? Třídní má modifikátor static, je viditelná ze statického i nestatického kontextu třídy, má přístup ke statickému kontextu vlastní či referované třídy. Nemá přístup k nestatickému konktextu. Instanční se vztahuje k referovanému objektu a i přístup k jeho statickému konktextu. Z#187 Jak se vytvoří instance třídy ? Instance třídy čili objekt operátorem new na konstruktoru, klonováním, metodou newInstance() na typu Class nebo deserializací. Z#188 Co je podtřída (subclass) a jak se vytvoří ? class Subclass extends Třída implements .... { ... } Z#189 Co je dědičnost ? Možnost typu (potomka) získat hodnoty a funkcionality nadtypu (předka). Z#190 Čeho se týká přetížení a překrytí ? Prvé se týká metod a konstruktorů téže třídy a metod téhož interfejsu, mající shodná jména avšak rozdílnou signaturu. Druhé se týká metod typu a jeho podtypu mající shodnou signaturu. Z#191 K čemu všemu se užívá klíčové slovo super ? - super. odkazuje k nestatickému členu (přímého) předka, - super(...) znamená volání konstruktoru přímého předka. Z#192 K čemu všemu se užívá klíčové slovo this ? - this. odkazuje k nestatickému členu téže třídy, - this(...) znamená volání konstruktoru téže třídy. Z#193 K čemu slouží čárky v klausuli for ? Umožňují vložit do inicializace i do modifikace více příkazů. Např.: for ( int i=0, j=10; i<j ; i++, j--, tk.beep() ) { ... } Z#194 Kde všude lze ve zdrojovém kódu použít dvojtečku ? Za návěštím, v ternárním výrazu, v case a default a ve for( e : c ) a v annotaci. Z#195 Co je návěští (label), kde ho lze uvést ? Uveďte příklad zápisu. Před příkazy cyklu. Případně odkaz na návěští za break či za continue. CYC1: while (...) { ... continue CYC1; ... break CYC1; ... } Z#196 Co je finální třída ? Ta s modifikátorem final. Nelze od ní vytvořit subclass. Z#197 K čemu slouží programový konstrukt interface ? K definici abstraktních metod a statických konstant. Z#198 Co je finální interfejs ? Nesmysl. Z#199 Má Java vícečetnou dědičnost ? Tříd ne, interfejsů ano. Z#200 Co je klíčové slovo instanceof a k čemu slouží ? Boolevský operátor, určí zda objekt patří do stromu referenčního typu, např.: o instnceof T Z#201 Co je balíček (package) a k čemu slouží ? Kvalifikovaný jmenný prostor sloužící k uložení tříd a interfejsů. Z#202 K čemu všemu se užívá klíčové slovo import ? Ke zjednodušenému zápisu typů ve zdrojovém kódu. Kdykoli lze užít úplné jméno typu - např. java.awt.List Z#203 Co znamená import static ? Import jen statických členů či jen určitého členu uvedené třídy . Z#204 Co je kvalifikované jméno třídy ? kvalifikované jméno balíčku . jméno třídy Z#205 Co je kvalifikované jméno interfejsu ? kvalifikované jméno balíčku . jméno interfejsu Z#206 Které balíčky se importují defaultně ? Jen java.lang. Z#207 Která třída je implicitním předkem v definici třídy ? java.lang.Object Z#208 Který balíček obsahuje třídu java.lang.Object ? java.lang. Z#209 Který balíček obsahuje třídu Thread ? java.lang. Z#210 Jaký je rozdíl mezi typy Double a double ? Obalová třída (wrap class) pro primitiv a primitivní typ (64 bit). Z#211 Co je autoboxing ? Automatické zabalování (boxing) a rozbalování (deboxing) primitivů do objektů pomocí obalových tříd (wrapped classes). Z#212 Co znamená ve zdrojovém kódu Javy slovo unsigned ? Podle konvence jen jméno proměnné. Java nemá takové klíčové slovo. Z#213 K čemu se užívá klíčové slovo assert ? Zevně ovladatelný test podmínky, pro false vyhazuje AssertionError. Z#214 Jaká je javská konvence psaní id: krysí, psí, velbloudí či kravská ? Velbloudí jako DvouhrbýDromedárSaharský. Z#215 Co jsou přetížené operátory ? Má Java nějaké ? Které ? Symbol operátoru je využíván pro rozdílné operace např. dle kontextu. Jen plus (+) užitý pro aritmetické sčítání či zřetězení. Z#216 Jaká písmena lze připojit za číselný literál a co znamenají ? d, D, f, F, l, L Z#217 Jak lze změnit typ existujícího objektu ? Nelze. Lze na něj odkázat jen jinou příhodnou referencí typu. Z#218 Je-li jméno třídy r.s.t.MojeTrida, co znamenají písmena r,s,t ? Jméno balíčku r a podbalíčku s, t a též relativní cestu uložení. Z#219 Při volání metody se parametry předávají referencí anebo hodnotou ? Hodnotou. Z#226 Co udělá příkaz: System.out.println( new int[0x29] . length ); //? Vytvoří jinak nepoužitelné pole int[41], vytiskne 41 a newline. Z#227 Jak se vytváří vícerozměrné pole ? Skládáním vždy o jednu méněrozměrných. Z#228 Kde všude lze použít hranaté závorky ? Ve vyznačení reference na pole, délky pole a prvku pole. Z#229 Co znamená RTTI a k čemu slouží ? Run Time Type Identification umožňuje v běhu aplikace-apletu zjistit povahu objektů a primitivů. Z#233 Jak se zachová kompilátor pro řádek: abstract interface _ {} // ? Zkompiluje a vytvoří ve jmenném prostoru soubor _.class . Z#242 K čemu je dobrý privátní konstruktor ? Pro skrytí před vnějším uživatelem a pro omezení počtu vytvářených instancí třídy. Např. 0 - System, Math, Collections, 1 - pro singletony - Registry . Z#244 Může být konstruktor abstraktní ? Proč ano, proč ne ? Ne, nemělo by to smysl - konstruktory se nedědí. Z#245 Může mít konstruktor modifikátor protected ? Proč ano/ne ? Ano. Z#246 Může být konstruktor privátní ? Proč ano/ne ? Ano pro tvorbu jen omezeného počtu objektů: Singleton ne žádného Math. Z#247 Může mít definice konstruktoru návratorý typ void ? Proč ano/ne ? Ne, přestane být konstruktorem - změní se na metodu-proceduru. A pokud začíná velkým písmenem, poruší jmennou konvenci. Z#248 Lze v těle konstruktoru užít příkaz return; ? Ano, i vícekrát. Vždy však bez návratové hodnoty. Z#249 Lze v těle konstruktoru užít příkaz return this; ? Ne, jen returny bez návratové hodnoty. Z#250 Lze v těle konstruktoru volat více konstruktorů téže třídy nebo nadtřídy ? Ne, neboť this(...) anebo super(...) musí být jen jako první. Z#264 Co je to a kam to lze napsat : /** ... */ ? Dokumentační komentář. Před definici: typu, nelokální proměnné konstruktoru a metody. Z#265 Co je dokumentační komentář a kde se vyskytuje ? Komentář /** ... */ vhodný pro doclety balíčků, typů, konstruktorů, metod a atributů. Z#267 Napište řádkový komentář ! // Takhle na konci řádky Z#268 Napište blokový komentář . /* Takhle třeba ... Nazdar !!! */ Z#269 Co se stane: System.out/**BLA**/.println/* Nazdar*/(/* AHOJ */); // ? Vytiskne se prázdný řádek, neboť kompilátor komentáře vynechá. Z#270 Co je mělké a hluboké klonování ? Mělké: skutečná kopie objektu s primitivními typy a referencemi. Reference však odkazují na tytéž objekty jako vzor. Metoda clone(); Hluboké: kopíruje se všechny referované objekty, tj. celý graf. Z#273 Co se vytiskne: System.out.println( new int['Z']['Y'] ); ? [[I@ a hashCode Z#280 Které slovo není jméno (id): in println лошадь3 \u0041 _$$ T.etc x00FFL ? Žádné, každé je platné jméno. Z#281 Co je třeba, aby to běželo: new \u0041().\u0061(); //? Aby přístupná třída A s konstruktorem A() mající metodu a() . Např.: class A { void a() {} } Z#282 Jaké jsou modifikátory přístupu metod ? Pro konkrétní : public, protected, "friend", private Pro abstraktní: public, protected, "friend" Z#283 Čím končí řádkový komentář ? Koncem řádky ( CRLF nebo NL nebo konec dokumentu ). Z#284 Jaký bude výsledek int i; i++10; // ? Syntaktická chyba. Z#285 Které klíčové slovo musí obsahovat tělo každé funkce ? return výraz ; Z#289 Co se stane neodpovídá-li žádný case hodnotě řídící proměnné ve switch ? Pokud obsahuje klíčové slovo default přejde řízení k němu, jinak na sekvenčně další příkaz. Z#290 Jakými způsoby lze ukončit cyklus while ? podmínkou v hlavičce nebo pomocí break, return, vyhozením vyjímky či chyby nebo continue do vnějšího cyklu, Z#291 Kde se všude může užít znak % ? Jako modulo (zbytek po dělení) nebo příznak ve formátování. Z#293 Metody jsou buď procedury anebo funkce. V čem se liší ? Procedura má návratový typ void, funkce jiný a musí vracet hodnotu. Z#294 Může být návratový typ Cloneable? Např.: protected Cloneable m(){...} Ano, návratový typ může být i kterýkoli typ tedy i interfejs. Z#295 Co znamená tato řádka: _(); // ? Volání instanční nebo třídní metody bez parametrů. Metoda však porušuje konvenci jmen a nejspíš to ani není sloveso. Z#296 K čemu je interfejs, jenž nic nezdědil a má prázdné tělo - znáte takové ? To je tzv. tagging interfejs informuje o schopnost či povolení. Např.: Serializable, Cloneable, ... Z#298 Kde se všude užívá znak * a v jakém významu ? Ve výrazu jako násobení, v dokumentační a blokových komentářích, a v příkazu import ve smyslu všech položek v daném adresáři. Z#307 Jaké třídy umožňují spouštět programy v OS, tj. mimo tuto JVM ? ProcessBuilder a Process. Z#320 Může být pole statický objekt ? Ne - neexistují žádné statické objekty. Z#323 Co je getr (getter) ? Metoda, která vydá žádanou hodnotu proměnné objektu. Nazývá se též accessor. Z#324 Co je setr (setter -zvaný též mutator) ? Napište příklad. Veřejná metoda nastavující atribut na zadanou přípustnou hodnotu. Dodržuje jmennou konvenci - např.: int hodnota; public void setHodnota(int hodnota) { this.hodnota=hodnota; } Z#325 Co obsahují prvky pole new java.lang.Runnable[7]; ? Všechny obsahují null. Z#326 Co obsahují prvky pole new java.lang.Thread[7]; ? Všechny obsahují null. Z#327 Co obsahují prvky pole new boolean[5]; ? Všechny obsahují false. Z#328 Co obsahují prvky pole new boolean[0]; ? Žádné nemá. Z#329 Co obsahují prvky pole new java.lang.Boolean[6]; ? Všechny obsahují null. Z#330 Jakého typu je x, vypíše-li System.out.print(x) [[D@3e25a5 ? double[][] x anebo String x="[[D@3e25a5"; Z#331 Kterou metodou lze změnit již vytvořeného délku pole ? Žádnou, neboť délka pole je final int. Z#334 Co vše může způsobit výraz ( (new int[j])[j] ) je-li j typu short ? Není-li hodnota j definována: chybu kompilace. pro j< 0: java.lang.NegativeArraySizeException, pro j>=0: java.lang.ArrayIndexOutOfBoundsException. Z#336 Jak otestovat, zda Object x referuje pole dvourozměrné typu float ? x instanceof float[] nebo x.getClass().getName().startsWith("[[F@") Z#342 Jakého typu může být x v příkazu x=new int[3][5].getClass; //? Object či Class či interfejsy třídy Class: ( Serializable, AnnotatedElement, GenericDeclaration, Type ) Z#343 Co znamená deprecated metoda ? Metoda je funkční, leč nějak nevhodná, zastaralá apod. a může být v další verzi API zrušena. Často bývá doporučována metoda lepší. Z#346 Co znamená výraz p == r , kde p , r jsou reference. Pro nekompatibilní typy dojde k syntaktické chybě, pro true: reference odkazují na tentýž objekt nebo jsou null, pro false: reference odkazují na dva různe objekty, (mohou však být ekvivalentní či nikoli dle definice metody equals). anebo jedna reference je null a druhá nikoli. Z#347 Co znamená ekvivalence objektů a jak se realizuje ? Ekvivalenci objektů definuje tvůrce třídy překrytím metody boolean equals(T o) porovnávající hodnoty vybraných atributů. Z#348 Co počítá a vrací metoda hashCode a jaký má smysl ? Vrací int hešové číslo spatlané z hodnot zvolených atributů objektu. Spatlání by mělo zajistit rovnoměrné rozdělení hešových čísel. Z#349 Jak souvisejí metody equals(Object o) a hashCode() ? Kontraktem, jenž požaduje shodnou hodnotu hashCode() pro objekty ekvivalentní dle implementované metody equals(). Avšak pro neekvivaletní objekty nepožaduje různé hodnoty. Z#350 Kde se v syntaxi užívá znak @ tzv. zavináč ? V deklaraci a při užití anotace - např. @ Override Z#351 Co je anotace a k čemu slouží ? Speciální interfejs. Poskytuje dodatečné informace kompilátoru, runtimu i návaznému software. Z#352 Kde lze napsat @Override a co to znamená ? Jen před metodu. Indikace zda metoda překrývá metodu předka. Z#353 Co jsou enum a k čemu slouží ? Uveďte příklad. Speciální třídy k definici typově bezpečných konstant. public enum DAY { SUN, MON, TUE, WED, THU, FRI, SAT } Může být definována jen ve statickém kontextu. Nemůže být lokální. Z#354 Co jsou vnořené (nested) a vnitřní (inner) třídy a kde se definují ? Vnořené jsou statické, vnitřní ne. Definují se v tělech tříd, interfejsů, anotací a výčtů. Z#355 Jaký je rozdíl mezi vnořenou (nested) a vnitřní(inner) třídou ? Vnořená je statická. Vnitřní je nestatická a je existenčně svázána s objekty vnější třídy a může přímo přistupovat i k jejím instančním členům. Z#356 Co je lokální třída a kde se může vyskytovat ? Třída bez modifikátorů přístupu definovaná v těle metody či či konstruktoru či v inicializátoru statickém nebo nestatickém. Lokální třída není zvnějšku svého obalu přístupná. Z#357 Co se skrývá za DDD, je-li new DDD().DDD() platným výrazem ? První jméno bezparametrického konstruktoru třídy DDD. Druhé jméno její bezparametrické metody ( procedury či funkce, statické či nestatické, vlastní či zděděné ). Jména metod uzančně začínají malým písmenem, ale kompilátoru je to jedno. Z#358 Kde všude lze použít klíčové slovo default ? V příkazu switch a v metodě-funkce v definici anotace. Z#359 Co znamená konstrukce @A{} ? Definici anotace. Z#360 Co znamená konstrukce @_ //? Anotace nějakého následujícího cíle anotací jménem _ . Jméno _ je sice nevkusné, leč platné. Z#361 Lze v těle konstruktoru definovat nějakou třídu ? Ano, tzv. lokální třídu. Lze to i v metodě či inicializátorech. Z#362 Lze definovat uvnitř těla konstruktoru interface ? Ne, neexistují tzv. lokální interfejsy. Z#363 Kde všude se užívá klíčové slovo extends ? Při definici třídy potomka třídy nebo interfejsu ptpmka interfejsu. a také pro vymezení typového parametru např.: < ? extends List > Z#364 Které znaky může obsahovat prosté jméno tj. identifikátor ? Java letter ( Unicode písmena a dolar a podtržítko ) nebo Java digit ( Unicode číslice ) ne však na začátku. Rozhoduje viz: java.lang.Character.isJava ... Z#365 Jaké znaky obsahuje kvalifikované jméno oproti prostému jménu ? Právě jednu tečku oddělující prostá jména. Z#366 Která klíčová slova obsahuji alespoň jedno velké písmeno ? Žádná. Z#367 K čemu se typicky uzančně užívají písmena E T K V a co znamenají ? Užívají se jako formální typové parametry ve smyslu Element, Type, Key a Value. Z#368 Kde všude se užívá symbol otazníku ? V ternárním výrazu a ve vymezení typového parametru např.: < ? > nebo < ? extends List > Z#379 Jak se provádí rušení interfejsu ? Výmazem z balíčku na disku. Z#380 Co se stane class T implements AN { } // je-li AN anotace ? Kompilátor navrhne modifikátor abstract anebo konkretizaci metod - přinejmenším metodu annotationType(), neboť každá anotace je interfejs. Z#382 Lze v běhu měnit hodnotu prvku pole získaného z interfejsu - proč ano/ne ? Ano, reference na pole je finální, ale final se nevztahuje jeho na prvky. Z#383 Jak zajistit neměnnost hodnot prvků nějakého pole ? Přístup k privátnímu poli umožnit jen prostřednictvím getru, přičemž obé musí být definované ve třídě nikoli v interfejsu. Např.: int getPrvek( int index ) { return pole[index]; } Z#412 Co je singleton a jak vznikne ? Objekt, který je jediný dané třídy v běhu aplikace/apletu. Třída T má jen private konstruktory, private final static T t = new T(); public static T getT(){return t;} Z#413 Co jsou formální parametry a kde se vyskytují ? Lokální proměnné definované v hlavičce metody/konstruktoru platné jen v těle metody/konstruktoru, jímž se při volání přiřazují hodnoty odpovídajících argumentů. Z#414 Co jsou argumenty a kde se vyskytují ? Hodnoty přiřazované formálním parametrům při volání metod či konstruktorů. Z#415 Jak lze aktivovat statický konstruktor ? Přetěžko, neboť neexistuje. Z#416 Jakými způsoby lze přistoupit ke statické proměnné ? Zevně: Trida.promena, Interfejs.promenna Zevnitř z metody/konstruktoru: promenna Z#417 Jakými způsoby lze volat statickou metodu ? Zevně: Trida.metoda(...), Interfejs.metoda(...) Zevnitř z metody/konstruktoru: promenna Z#427 Co je Observer, Observable a ImageObserver ? Interfejsy z java.util. java.awt.image Z#433 Jaká je hodnota výrazu false < true ? Výsledkem je syntaktická chyba. Logické literály nejsou uspořádané. Z#434 Co vytiskne příkaz System.out.println( !n ); Je-li n inicializované boolean/Boolean, pak její opak její hodnoty. Jinak syntaktická chyba. Z#439 Je Java čistý objektový jazyk ? Proč ano, proč ne ? Není. Je však silně objektový ale kompromisní, neboť má primitivní typy kompatibilní k hardware posledních dekád 20. století. K praktickému překonání této dichotomie užívá obalové třídy a autoboxing. Z#440 Vyjmenujte obalové třídy (wrapped classes). K čemu slouží ? Boolean, Byte, Short, Character, Integer, Long, Float, Double, Void. Všechny jsou definované v java.lang. K tvorbě objektů pro uschování hodnoty odpovídajícího primitivu. A skladu metod (i statických) pro manipulace a konverze. Z#441 Uveďte třídy mají ve svém jménu koncovku able / ible - ač by neměly ? Throwable, Observable , neboť to nejsou interfejsy. Z#442 Které interfejsy nemají někde ve svém jménu "able" (ač by měly)? CharSequence, Collection, Map, Set, Observer, ***Listener Z#443 Co je class literal ? Výraz složený ze jména typu (včetně primitivů, polí a void) a .class . Např.: Thread.class Runnable[].class, int[][].class Z#444 Co je popisný objekt třídy ( class-object ) a jak se vytvoří ? Objekt typu Class. Zavedením class-file do paměti a následným linking, verification, preparation, resolution. Z#481 Lze konstruktor označit modifikátorem native ? Lze, ale kompilátor to odmítne zkompilovat. Z#482 Lze nenativní metodu překrýt nativní ? Ano, a i naopak. Z#485 Jak se lze zbavit nechtěných metod v iterfejsu, které zdědil ? Nelze a ani je nelze sabotovat - nemají tělo. Z#486 Jak se zbavit nechtěných atributů, které třída zdědila ? Lze je jen zastínit a privatizovat, čím nebudou vně třídy přístupné. Z#487 Jak se zbavit nechtěné metody, které třída zdědila ? Zbavit se jí nelze - jen lze sabotovat její funkcionalitu nejlépe takto: throw new UnsupportedOperationException("For ever."); a uvedením této vyjímky v hlavičce a tím i v dokumentaci. Z#488 Jaké je uzančně vhodné jméno: třídy, interfejsu, metody, proměnné ? lat.: Substantivum, Adjektivum, verbum, substantivum. čes.: PodstatnéJméno, PřídavnéJméno, sloveso, podstatnéJméno. Z#489 Jaká vyjímka se vyhodí při přetečení po násobení v typu float ? Žádná, neboť při operacích s type float resp. double žádné Throwable nevznikají. Z#490 Jaké výjimky se vyhodí při přetečení integrální aritmetiky ? ArithmeticException a to jen při dělení nulou. Při přetečení slučováním nebo násobení výjimka nevzniká. Z#491 Jaká výjimka je vyhozena je-li operandem NaN nebo nekonečno ? Žádná, výpočet pokračuje dále avšak jen s hodnotami NaN nebo infinity. Z#492 Které operace kterých typů způsobí výsledek NaN ? Jen pro typ float či double: - neurčitý výraz 0/0, 0*Infinity, - konverze nečíselného řetězu na číslo. Z#493 Co definuje norma IEEE 754 ? Formáty a aritmetiku float a double. Z#494 Jmenujte některé veřejné statické metody z API. System: currentTimeMillis, exit, gc Integer/Double: parse Math: všechny Thread: yield, currentThread, sleep, interrupted Arrays/Collections: sort Z#495 Jmenujte některé veřejné nativní metody. getClass, wait, notify, yield, currentThread, sleep, isAlive, currentTimeMillis Z#496 Jmenujte některé veřejné finální metody. getClass, wait, notify, isAlive, join Z#497 Které metody mají všechny třídy ? Generální metody zděděné od java.lang.Object . equals, getClass, hashCode, toString, notify, notifyAll, wait Z#498 Co udělá sekvence a^=b; b^=a; a^=b; a pro které typy ? Vymění hodnoty mezi proměnými bez použití pomocné proměné pro byte,short,int,long, char anebo boolean. Z#500 K čemu jsou funkce floor a ceil ? Patří do třídy Math, argument i hodnotu mají typu double, floor [čili podlaha] vrací nejblizší nizší celé číslo typu double, ceil [čili strop (ceiling)] vrací nejblizší vyšší celé číslo typu double. Z#502 Může metoda překrývající hashCode( ) vyhodit kontrolovanou vyjímku ? Ne, neb překrytá hashCode( ) nemá stigma, tj. throws list. Z#507 Jaký druh tříd použijete k vytváření abstraktních objektů ? Žádný, nelze vytvářet abstraktní objekty. Z#508 Kde byla Java stvořena, kdy uveřejněna a kdo byl jejím předním autorem ? Fa. SUN Microsystems, (SUN = Stanford University Network), 1995, James Gosling. Z#518 Proč má abstraktní třída konstruktory, když neumí vytvářet objekty ? Jen konkrétní potomci abstraktní třídy mohou vytvářet objekty. Objekty však obsahují všechny nestatické atributy i všech předků a tedy je třeba provést všechny konstruktory po dědičné linii, nejdříve zdola nahoru volání super( ... ) až k java.lang.Object a pak shora dolů pro inicializaci atributů. Z#519 Jaké je logo Javy ? Šálek horké, kouřící kávy - oblíbená droga pilných programátorů. Z#521 Co je zapouzdření, k čemu slouží a jak se realizuje ? Čili encapsulation, skrytí hodnot a implementací, což podporuje bezpečnost. Použitím modifikátorů přístupu (private), interferfejsů a getrů/setrů. Z#522 Jaký je rozdíl mezi finally{} a finalize( ) ? 1. je blok, případná část klauzule try-catch-finally. 2. je protected metoda v java.lang.Objectu, volaná před zrušením objektu. Z#523 Co lze rozhodnout porovnáním hodnot hashCode() dvou objektů téže třídy ? Lze rozhodnout, že jsou různé, ale nelze rozhodnout, že jsou stejné. Stejnost určuje metoda equals(Object o). Z#524 Co lze rozhodnout porovnáním hodnot hashCode() dvou objektů různých tříd ? Záleží definici equals a hashCode() a jejich kontraktu. Otázka má spíše smysl jen pro "blízké" třídy s týmiž rozhodnými atributy. Z#525 Z čeho počítá java.lang.Object.hashCode() když Object nemá atributy ? Z adresy alokace objektu. Neunikátní, patrně vždy > 0. Z#526 Kam míří self mělkého klonu objektu class X impl. Cloneable {A self=this; ...} ? Ke vzoru při mělkém klonování. Z#531 K čemu slouží a kde je definována nestatická metoda newInstance() ? Definována je v třídě Class. Vytvoří a vrátí objekt dle dané třídy. Z#532 K čemu slouží a kde je definována statická metoda forName(String className) ? Vrátí objekt typu Class, přičemž ho natáhne příslušný class-file do paměti. Tedy popisný objekt třídy či interfejsu. Definována je v třídě Class. Z#533 Co je finální blanková proměnná ? Může být statická či nestatická ? Taková finální proměnná (tj. s modifikátorem final, leč není inicializovaná ve své definici. Může být jak statická tak nestatická. Avšak při kterékoli konstrukci objektu už musí být inicializovaná. Z#534 Kde se inicializuje statická resp. nestatická finální blank proměnná ? Statická: jen v jednom statickém inicializátoru. Nestatická: jen v jednom nestatickém inicializátoru anebo v konstruktorech tak, aby užitím kteréhokoli se proměnná inicializovala. Z#536 Jaký je rozdíl mezi "is" a "has" ve vztahu dvou referečných typů ? "is": jeden typ je podtypem druhého typu či týmž typem. "has": jeden typ má atribut referující objekt druhého typu. Z#537 Uveďte příklad vztahu "is" ! Např. Frame je Container, Frame je Serializable, Externalizable je Serializable a tudiž lze přiřadit Container x = (Frame)null; apod. Tj.: vede-li dráha od referenčního typu A k typu B, pak A "is" B. Z#538 Uveďte příklad vztahu "has" ! class Point(){ int x,y; } či interface Plane{ Point orig = new Point(); } Typ má definován atribut: bod má souřadnice, rovina má počátek souřadnic. Z#545 Napište příklad použití standardní metody substring ! Vrací podřetěz dle indexů beginIndex počítaný od nuly a endIndex na znak, který už netřeba. Přetížená funkce substring(beginIndex) vrací až do konce. Z#546 Co vytiskne System.out.print( "ABC"+"DEF".substring(1) ); a proč ? ABCEF neboť kvalifikátor (tečka) má vyšší priroitu než + konkatenace. Z#547 Kde jsou definovány metody indexOf a co dělají ? Vracejí index <0,length()-1> resp. <0,size()-1> nalezeného Objektu jinak -1. java.lang: String, StringBuffer, StringBuilder ( String ) java.util: ArrayList, Vector, LinkedList javax.swing: DefaultListModel ( <E> ) ( <E> ) Z#555 Může mít [ne]statický inicializátor či konstruktor modifikátor synchronized ? Ne. Netřeba: konstrukce objektu je synchronizována již v JVM. V tělech mohou mít synchronizované bloky. Z#556 Co se vypíše Object o=3.14; System.out.print(o.getClass().getName()); //? java.lang.Double, neboť autoboxing zabalí double 3.14 do objektu typu Double. Z#557 Jakou hodnotu bude mít d ? Object o=3.14; double d=o ; Žádnou, je to syntaktická chyba, chybí přetypování double d=(Double)o; Pak by unboxing zkopíroval hodnotu 3.14 do d; Z#558 Co udělá for ( boolean b = false; false != true; b=true ) { m(b); } //? Nekonečné volání metody m(). Poprvé s false, pak navždy s true. K ukončení dojde jen vyhozením Throwable, exitem nebo zásahem zvnějšku. Z#559 Co udělá příkaz for( ; ; ){ m(); } a co příkaz for ( : ) { m(); } První nekonečný cyklus volání metody m() , druhý syntaktickou chybu. Z#560 Je-li final String x="ab", y="a", z; z=y+"b"; jakou hodnotu má (x==z) //? true, neboť y je finální a již kompilátor vyhodnotí z na napasuje na x. x ani z nemusí být final. Pro nefinální y vyjde false, neb vzniknou 3 objekty. Z#563 Lze překrýt vnitřní třídu ? Jak ano anebo proč ne ? Ne: "překrývaná" i "překrývající" jsou v jiných třídách a tedy jsou v jiných jmenných prostorech. Z#571 Jak zjistíte zda Object o referuje matici primitivního typu ? String s=o.getClass().getName(); a výrazu s.startsWith("[[") && !s.startsWith("[[[") && !s.startsWith("[[L") Z#572 Jakých typů může být proměnná z , aby nastal tisk: System.out.print(x == y == z); //? Proměnná z musí být boolean či Boolean kvůli asociativitě zleva. Z#573 Co udělá výraz new int[j] je-li j typu char ? Není-li hodnota j definována: chybu kompilace, jinak vytvoří pole typu int[] o délce dle hodnoty j (tj. 0 až 65535) vyplněné nulami. Z#579 Co je třeba předznamenat, aby to vyšlo double y = exp(sin(PI/4)); //? import static java.lang.Math.*; Z#580 Co je vararg, kde a jak se definuje a k čemu se používá ? Komfortní definice zápisu a volání posledního formálního parametru, který je vyjádřen polem. Např.: void m( char c, Object ... o ) { /* code */ } se volá např.: m( 'A', 1, "dva", 3 ); Pak pole o má tři prvky. Z#582 Co vypíše System.out.print("abc" == new String("abc")); ? false, porovnává se objekt v string poolu s objektem vytvořeným v runtime. Z#584 Spustí se aplikace metodou public static void main(String ... x){} // proč ano/ne ? Ano, je to ekvivalentní String[] přičemž na jménu parametru nezáleží. Z#592 Kde lze užít klíčová slova this a super ? Jen v nestatickém kontextu tj. v konstruktorech, metodách, inicializátorech a inicializacich instančních atributů. Z#593 Co je blank final proměnná ? Neinicializovaná [ne]statická proměnná, která je inicializovaná právě jednou v jednom [ne]statickém inicializátoru anebo při každé možné konstrukci objektu při průchodu konstruktory třídy. Z#600 Co způsobí static { System.exit( Integer.MIN_VALUE ); } // ? Když JVM inicializuje všechny statické atributy, provede předchozí statické inicializátory. V tomto však JVM spáchá sebevraždu. V posledním tažení vykřikne do proudu System.err: Java Result: -2147483648 Z#601 Co se stane: String q=null; System.out.println( q == true+q+false ); //? Hodnota řetězu q bude truenullfalse a ta se vytiskne. Z#602 Jaká je hodnota proměnné boolean b = ~ true; // ? Kde ~ je vlnovka tzv. tilda Žádná, je to chyba. Tilda mění hodnoty bitů jen integrálních hodnot (tedy i char). Z#604 Jak překrýt finální metodu metodou nefinální ? To přece nejde. Z#605 Jak překrýt konstruktor ? To vůbec nejde, ježto se nedědí, takže není co překrývat. Z#606 Kolik může mít abstraktní třída privátních konstruktorů ? Libovolný počet. Z#607 Kolik může mít interface třída privátních konstruktorů ? Žádný privátní, ostatně ani jakýkoli jiný. Z#608 Co se stane: // ? # String z; # switch (z="ABC") { default: throw new AssertionError(z); } Vyhodí se java.lang.AssertionError: ABC Z#609 Co vytiskne: System.out.println( " He said " hi! ". ") ; // ? Chyba. Správně: ( " He said \" hi! \". ") ; anebo trochu jinak: ( " He said ' hi! '. ") ; Z#610 Co se stane public static void main(String...args){ main(); } // ? Exception in thread "main" java.lang.StackOverflowError ********************************************************************************** ******** * 1 2 3 4 5 6 7 8 * *12345678901234567890123456789012345678901234567890123456789012345678901234567890 123456789 * Připomínky, doplňky, návrhy, náměty apod. posílejte na [email protected] ********************************************************************************** ******** u#616 Co je PropertyBundle a co umožnuje ? p#651 ********************************** Pro budoucí rozšíření ******************************* **** DALŠÍ NÁMĚTY: * IO Concurr GUI factory RMI Locale lokalita, NIO ? * Type params * String s="abcd"; char[] x=s.toCharArray(); x[2]='*';
Podobné dokumenty
JavaHelp
Součástí distribuce je pomocný program hsviewer (jar archiv uložený v adresáři demos/bin),
kterým si lze vytvářenou nápovědu prohlížet – tj. při vytváření obsahu nápovědy není potřeba
mít k dispozi...
Hlavní dokument - Technologie společnosti Microsoft pro vývoj
Často nejsou vidět, ale přesto o nich všichni vývojáři vědí a jsou rádi, že je mají. Jsou zcela nezbytné
pro stavbu rozsáhlých informačních systémů, pro tvorbu graficky bohatých a uživatelsky přívě...
taháci - Vrstevnice
- obsahuje nestatické = instanční atributy primitivních nebo referenčních typů
- vytváří se konstruktorem a event. nestatickými inicializátory
- každý objekt je jedinečnou referencí popisující jeho...
Open9X Manual CZ
Obsah
Obsah..............................................................................................................................................2
Výstraha....................................
F***************** JAQ Java Asked Questions v. 2.3 ***** pro Java 7
F***************** JAQ Java Asked Questions v. 2.3 ***** pro Java 7 SE