Przy przechwytywaniu wielu wyjątków w jednym bloku należy pamiętać o ich hierarchii. Ogólna zasada mówi, że nie ma znaczenia kolejność, o ile wszystkie wyjątki są na jednym poziomie hierarchii, jeśli jednak przechwytywane są wyjątki z różnych poziomów hierarchii, najpierw muszą to być wyjątki bardziej szczegółowe, czyli stojące niżej w hierarchii, a dopiero po nich wyjątki bardziej ogólne, czyli stojące wyżej w hierarchii. Przykład: public static void main (String args[])
try{
int liczba *10/0;
catch(ArithmeticException e){
System.out.println(e);
catch(RuntimeException e){
System.out.println(e);
catch(Exception e){
System.out.println(e);
Bloki try.. .catch można zagnieżdżać. W jednym bloku przechwytującym wyjątek X może istnieć drugi blok, który będzie przechwytywał wyjątek Y. Schematycznie taka konstrukcja wygląda następująco:
try{
//instrukcje mogące spowodować wyjątek 1 try{
//instrukcje mogące spowodować wyjątek 2 }
catch (TypWyjątku2 identyfi katorWyjątku2){
//obsługa wyjątku 2
catch (TypWyjątkul identyfi katorWyjątkul){
//obsługa wyjątku 1
Przykład:
public static void main (String args[])
Punkt punkt = nuli; int liczba; try{ tryl
liczba -10/0;
catch(ArithmeticException e){
System.out.println("Nieprawidłowa operacja arytmetyczna");
System.out.println("Przypisuję zmiennejliczba wartość 10"); liczba « 10;
punkt.x ■ liczba;
catch(Exception e){
System.out.println(“Błąd ogólny"); System.out.println(e);
Zgłoszenie własnego wyjątku polega na utworzeniu nowego obiektu jednej z klas wyjątków. Za pomocą instrukcji new należy utworzyć nowy obiekt klasy, która dziedziczy (pośrednio lub bezpośrednio) z klasy Throwabl e. W najbardziej ogólnym przypadku będzie to klasa Excepti on. Tak utworzony obiekt musi stać się parametrem instrukcji throw: throw new Exception();
W specyfikacji metody, w której powyższa instrukcja wystąpi, niezbędne jest zaznaczenie, że będzie w niej zgłaszany taki wyjątek. Wymaga to zastosowania instrukcji throws, w ogólnej postaci: specyfikatordostepu [static] [finał] typ_zwracany nazwa_metody(argumenty) throws KlasaWyjątkul, KlasaWyjątku2,
..., KlasaWyjatkun
//treść metody
Przykład:
public static void main (String args[]) throws Exception {
throw new Exception();
Jeżeli zgłaszany wyjątek ma otrzymać własny komunikat, należy przekazać go jako parametr konstruktora klasy Except i on: throw new Exception("komuniat"); lub
Exception exception ■ new Exception("komuniat"); ^
throw exception;
Raz przechwycony wyjątek można zgłosić ponownie (pot. wyrzucić), wykorzystując instrukcję throw. tryl
//instrukcje mogące spowodować wyjątek
catch(typTyjątku identyfikatorWyjątku)| //instrukcje obsługujące sytuację wyjątkową
throw indetyfikatorWyjątku
Przykład:
public static void main (String args[])
try{
int liczba *10/0;
catch(ArithmeticException e){
System.out.println("Tu wyjątek został przechwycony");
//ponowne zgłoszenie wyjątku throw e;
W Jawie można tworzyć własne klasy wyjątków. Należy napisać klasę pochodną, dziedziczącą pośrednio lub bezpośrednio z klasy
Throwabl e. W praktyce wyjątki najczęściej są wyprowadzane z klasy Exception i klas od niej pochodnych:
public
class nazwa_klasy extends Exception
//treść klasy
Przykład (nowy wyjątek General Except i on): public
class GeneralException extends Exception
Zgłoszenie wyjątku General Except i on: public static void main (String args[]) throws GeneralExcepti on
throw new GeneralException();
Do bloku try możemy dołączyć sekcję f i nal 1 y, która będzie wykonana zawsze, niezależnie od tego, co będzie działo się w bloku try. Schematycznie:
tryl
//instrukcje mogące spowodować wyjątek
>
catch()|
//instrukcje sekcji catch
)
finallyl
//instrukcje sekcji finally
Sekcję finał ly można zastosować również w przypadku instrukcji, które nie powodują wygenerowania wyjątku. Stosowana jest wtedy konstrukcja try... f i nal 1 y w postaci:
tryl
//instrukcje
finallyl
//instrukcje
Kod z bloku finally zostanie wykonany zawsze, niezależnie od tego, jakie instrukcje znajdą się w bloku try.
Umieszczenie apletu w kodzie HTHL wymaga użycia znacznika <APLET> w postaci:
<APPLET
CODĘ = "nazwaKlasy.class"
CODEBASE * "URL"
WIDTH * "szerokość"
HEIGHT - "wysokość"
NAME - "nazwa apletu"
ALIGN = "położenie"
VSPACE ■ "odstęp w pionie"
HSPACE " odstęp w pionie "
>
<PARAM NAME = "nazwał" VALUE = "wartośćl">
<PARAM NAME * "nazwan" VALUE = "war-tośćn">
</APPLET>
Istnieje możliwość pominięcia znaczników PARAM i umieszczenia parametrów bezpośrednio w znaczniku <APPLET>:
<APPLET
CODĘ * "nazwaKlasy.class"
<!-- Pozostałe parametry znacznika--> nazwał * wartośćl <!— ... —> nazwan ■ wartoscn
Utworzenie apletu wymaga użycia klasy Appl et. Szkielet apletu wygląda następująco:
import java.applet.*;
public
class PierwszyAplet extends Applet
public PierwszyAplet()
//Konstruktor apletu
public void i ni t()
//Inicjałizajca apletu...
public void start()
//Uruchomienie apletu...
public void stop()
//Zatrzymanie apletu...
Aplet wyświetlający na ekranie napis we współrzędnych x = 100, y = 100:
import java.applet.*; import java.awt.*;
public
class PAplet extends Applet
public void paint (Graphics gDC)
gDC.drawString ("Przykładowy tekst",
100, 100);
Do odczytu wartości parametru wykorzystywana jest metoda getParameter, której jako argument należy przekazać nazwę parametru. Metoda ta zwraca wartość wskazanego argumentu lub wartość nuli, jeżeli parametr nie został uwzględniony w kodzie HTML
Przykład:
<HTML>
<HEAD></HEAD>
<B0DY>
<APPLET
CODĘ * "Aplet"
WIDTH - "300"
HEIGHT * "100"
>
<PARAM NAME="parametrl"
VALUE*"wartość1">
<PARAM NAME="parametr2"
VALUE*"wartość2">
</APPLET>
</B0DY>
</HTML>
import java.applet.*; public
class Aplet extends Applet
public void i ni t()
String tekstl * getParameter("para metrl");
String tekst2 = getParameter("para-metr2“);
//wartości parametrów zostaną wyświetlone na //konsoli systemowej System.out.println(tekstl);
System.out.println(tekst2);
Czcionki w Javie dzielą się na dwa rodzaje:
• czcionki logiczne.
• czcionki fizyczne.
W uproszczeniu możemy powiedzieć, że czcionki fizyczne to czcionki zależne od systemu, na którym działa maszyna wirtualna, natomiast czcionki logiczne to rodziny czcionek, które muszą być obsługiwane przez każde środowisko uruchomieniowe Javy (JRE).
W środowisku Java I (JDK l.l.X) dostępnych jest sześć czcionek:
• Courier,
• Dialog,
• Dialoglnput,
• Helretica,
• TimesRoman,
• ZapfDingBats.
W nowocześniejszym środowisku Jara 2 (JDK 1.2.X i wyższe) dostępnych jest pięć czcionek:
• Serif,
• SansSerif,
• Monospaced,
• Dialog.
• Dialoglnput.
Klasa Font
Do obsługi czcionek służy klasa Font, znajdująca się w pakiecie java.awt. Deklaracja konstruktora klasy Font: Font(String name, int style, int size) Konstruktor przyjmuje trzy argumenty:
• name — nazwa czcionki,
• style — krój czcionki,
• size — wielkość czcionki.
Styl czcionki ustalany jest za pomocą stałych (zmienne finalne) zawartych w klasie Font:
• Font. BOLD — czcionka pogrubiona,
• Font.ITALIC — czcionka pochylona,
• Font.PLAIN — czcionka zwyczajna.
Przykład wyświetlenia napisu na powierzchni apletu:
import java.applet.*; import java.awt.*;
public
class Aplet extends Applet
Font sansSerif; public void i ni t()
sansSerif ■ new Font("SansSerif", Font.BOLD, 36);
public void paint (Graphics gDC)
gDC.setFont(sansSerif); gDC.drawString ("Czcionka SansSerif", 60, 80);
Zmiany koloru, którym domyślnie rysowane są obiekty na powierzchni apletu (domyślnie jest to kolor czarny), można dokonać, wywołując metodę setColor klasy Graphics. Metoda ta jako argument przyjmuje obiekt klasy Col or, określający kolor, który będzie używany w dalszych operacjach.
W klasie tej zostały zdefiniowane 24 statyczne i finalne pola, określające łącznie 12 różnych kolorów:
Nazwa stałej |
Reprezentowany kolor |
Color.black |
czarny |
Color.BLACK |
czarny |
Color.blue |
niebieski |
Color.BLUE |
niebieski |
Color.darkGray |
ciemnoszary |
Color.DARK GRAY |
ciemnoszary |
Color.gray |
szary |
Color.GRAY |
szary |
Color.green |
zielony |
Color.GREEN |
zielony |
Color.lightGray |
jasnoszary |
Color.LIGHT GRAY |
jasnoszary |
Color.magenta |
karmazynowy |
Color.MAGENTA |
karmazynowy |
Color.orange |
pomarańczowy |
Color.ORANGE |
pomarańczowy |
5