Na dysku C tworzymy katalog grupa_x gdzie x jest nr grupy stude
Transkrypt
Na dysku C tworzymy katalog grupa_x gdzie x jest nr grupy stude
Metodyka i Technika Programowania Laboratorium 3 Pakiety Pakiety pozwalają na dzielenie obszaru nazw klas i zapobiegają konfliktom między nazwami klas zdefiniowanymi w bibliotekach a innymi nazwami używanymi w programie, sa również ważne przy definiowaniu bibliotek. Pakiety można używać w postaci zhierarchizowanej. W tym celu należy je oddzielić za pomocą kropki. Hierarchia pakietów musi być zgodna z hierarchią katalogów na dysku. Nazwa pakietu musi być taka ja nazwa katalogu. Zmienna środowiskowa odpowiedzialna za przechowywanie listy ścieżek to CLASSPATH. CLASSPATH=C:\j2sdk1.4.2_04\lib;.;C:\Program Files\Java\jre1.5.0\lib\ext\QTJava.zip;C:\Program Files\Java\jre1.6.0_02\lib;.; Plik program.java powninien być zapisany w katalogu konto. Kompilacja programu może odbywać się w katalogu konto. Uruchomienie programu z poziomu katalogu nadrzędnego dla katalogu konto odbywa się poleceniem java konto.program. W przypadku kiedy ścieżka CLASSPATH obejmuje również katalog konto to uruchomienie odbywa się z poziomu katalogu bieżącego. Przykład package konto; class dane{ String nazwa; double wartosc; dane(String a,double b){nazwa=a;wartosc=b;} void pokaz(){System.out.println(nazwa+":"+wartosc+"PLN");} } class program { public static void main(String args[]) { dane bank[]=new dane[3]; bank[0]=new dane("Kowalski Jan",234.56); bank[1]=new dane("Nowak Jan",24.61); bank[2]=new dane("Rambo Ferdynand",34.61); for(int i=0;i<3;i++){bank[i].pokaz();} } } Importowanie pakietów odbywa się za pomoca słowa kluczowego import. import import import import import import import java.applet.*; java.awt.*; java.awt.image.*; java.io.*; java.lang.*; java.util.*; java.net.*; //zestaw //zestaw //zestaw //zestaw //zestaw //zestaw //zestaw klas klas klas klas klas klas klas przydatnych przy tworzeniu apletów operacji we/wy windows do tworzenia obrazów do operacji we/wy tekstu i plików podstawowych elementów języka pomocniczych przy tworzeniu np. wektorów czy stosów do korzystania z sieci Interfejsy Interfejs służy do określenia zadań klasy bez określenia sposobu ich wykonywania. Aby zaimplementować interfejs należy zdefiniować w podklasie pełny zestaw zadeklarowanych w nim metod. Implementacja interfejsu odbywa się z użyciem słowa implements oraz nazwy interfejsu. Dodawanie klasy interfejsu w środowisku Netbeans Przykład interface dane{ int nastepny_element(); void init(int i); } class ciag_kwadratowy implements dane{ int wartosc; public int nastepny_element(){return wartosc=wartosc*wartosc;} public void init(int i){wartosc=i;} } class program { public static void main(String args[]) { ciag_kwadratowy ciag=new ciag_kwadratowy(); ciag.init(2); for(int i=0;i<3;i++){System.out.println(ciag.nastepny_element());} } } Przykład wielu realizacji stosu z jednym interfejsem. Stos o stałej ilości elementów. Przykład interface stos{ void dodaj(int i); void usun(); } class statyczny implements stos{ private int s[]; private int index; statyczny(int rozmiar){ s= new int[rozmiar]; index=-1;} public void dodaj (int i) { s[++index]=i;} public void usun() {System.out.println(s[index--]);} } class program { public static void main(String args[]) { statyczny st1=new statyczny(100); st1.dodaj(1); st1.usun(); st1.dodaj(2); st1.dodaj(3); st1.dodaj(4); } } Stos o zmiennej ilości elementów, jeżeli stos się zapełni to jego wielkość jest podwajana Przykład interface stos{ void dodaj(int i); void usun(); } class dynamiczny implements stos{ private int s[]; private int index; dynamiczny(int rozmiar){ s= new int[rozmiar]; index=-1;} public void dodaj (int i) { if (index==s.length-1) {int temp[]=new int[s.length*2]; System.out.println("Podwajanie wielkości stosu"); for(int j=0 ;j<s.length;j++) temp[j]=s[j]; s=temp; s[++index]=i;} else s[++index]=i; } public void usun() {System.out.println(s[index--]);} } class program { public static void main(String args[]) { dynamiczny st1=new dynamiczny(1); st1.dodaj(1); st1.dodaj(2); st1.dodaj(3); st1.usun(); st1.usun(); st1.usun(); st1.dodaj(4); } } Przykład korzystania z obu implementacji interfejsu Przykład interface stos{ void dodaj(int i); void usun(); } class statyczny implements stos{ private int s[]; private int index; statyczny(int rozmiar){ s= new int[rozmiar]; index=-1;} public void dodaj (int i) { s[++index]=i;} public void usun() {System.out.println(s[index--]);} } class dynamiczny implements stos{ private int s[]; private int index; dynamiczny(int rozmiar){ s= new int[rozmiar]; index=-1;} public void dodaj (int i) { if (index==s.length-1) {int temp[]=new int[s.length*2]; System.out.println("Podwajanie wielkości stosu"); for(int j=0 ;j<s.length;j++) temp[j]=s[j]; s=temp; s[++index]=i;} else s[++index]=i; } public void usun() {System.out.println(s[index--]);} } class program { public static void main(String args[]) { stos o_stos; // zmienna odwołaniowa do interfejsu statyczny ss=new statyczny(10); dynamiczny ds=new dynamiczny(1); o_stos=ss; o_stos.dodaj(1); o_stos.dodaj(2); o_stos.dodaj(3); o_stos.dodaj(4); o_stos.usun(); o_stos.usun(); o_stos.usun(); o_stos=ds; o_stos.dodaj(1); o_stos.dodaj(2); o_stos.dodaj(3); o_stos.dodaj(4); o_stos.usun(); o_stos.usun(); o_stos.usun(); } } Generowanie sytuacji wyjątkowych Mechanizm obsługi wyjątków w Javie umożliwia zaprogramowanie wyjścia z sytuacji krytycznych, dzięki czemu program nie zawiesi się po wystąpieniu błędu wykonując ciąg operacji obsługujących wyjątek. Przykład class dane { int a=10; int dziel(float i) throws Exception { if (i/2!=0) throw new Exception("Liczba nieparzysta!"); if (i==0) throw new Exception("Dzielenie przez zero!"); return (int)(a/i); } } class program { public static void main(String args[]) throws Exception{ dane liczba = new dane(); liczba.dziel(0); //wystąpienie wyjątku } } Obsługa sytuacji wyjątkowych Do obsługi sytuacji wyjątkowych przeznaczony jest blok try, natomiast blok catch jest fragmentem programu wykonywanym w przypadku wystąpienia wyjątku w bloku try. Blok catch musi znajdować się zaraz za blokiem try lub następnym blokiem catch. Użycie wielu bloków catch pozwala obsłużyć wystąpienie wyjątków różnych typów. Przykład public class program { public static void main(String[] args) throws Exception{ try { int a=5/0; } catch (Exception e) { System.out.println("wyjątek dzielenia"); } finally{ System.out.println("Koniec dzielenia"); } } } Przykład class program { public static void main(String args[]) throws Exception{ try { int a=5/0; //dzielenie przez zero try { int tab[]=new int[2]; tab[6]=5; // bład przekroczenia tablicy } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Obsługa wyjątku przekroczenia zakresu tablicy"); e.printStackTrace(); } finally { System.out.println("Koniec operacji tablicowych"); } } catch (Exception e) { System.out.println("Obsługa wyjątku dzielenia przez zero"); e.printStackTrace(); } finally { System.out.println("Koniec dzielenia"); } } } Operacje wejścia Wczytywanie kodu znaku Przykład class program { public static void main(String args[]) throws Exception{ try { System.out.println("Wprowadz znak:"); char c=(char)System.in.read(); System.out.println("Wprowadzony znak to:"+c); } catch (Exception e) { System.out.println("Obsługa wyjątku "); e.printStackTrace(); } } } Wczytywanie ciągu tekstowego Przykład import java.io.*; class program { public static void main(String args[]) throws Exception{ InputStreamReader str= new InputStreamReader(System.in); BufferedReader buff= new BufferedReader(str); try } { System.out.print("Wprowadz ciąg:"); String linia= buff.readLine(); System.out.println("Wprowadzony ciag to:"+linia); } catch (IOException e) { System.out.println("Obsługa wyjątku "); e.printStackTrace(); } } Wczytanie liczby typu int oraz typu double Przykład import java.io.*; public class program { public static void main(String[] args) throws Exception { InputStreamReader str= new InputStreamReader(System.in); BufferedReader buff= new BufferedReader(str); try { System.out.println("podaj liczbe int"); String linia=buff.readLine(); int i=Integer.parseInt(linia); System.out.println("Wprowadzona liczba to "+i); } catch(IOException e) { System.out.println("Obsluga wyjatku "); e.printStackTrace(); } } } Przykład import java.io.*; public class Main { public static void main(String[] args) throws Exception { InputStreamReader str= new InputStreamReader(System.in); BufferedReader buff= new BufferedReader(str); try { System.out.println("podaj liczbe double"); String linia=buff.readLine(); double i=Double.parseDouble(linia); System.out.println("Wprowadzona liczba to "+i); } catch(Exception e){ System.out.println("Obsluga wyjatku "); e.printStackTrace(); } } } Przykład import java.io.*; import java.util.*; public class wewy { static InputStreamReader wejscie = new InputStreamReader( System.in ); static BufferedReader bufor = new BufferedReader( wejscie ); StringTokenizer bon; boolean weBoolean() { try { bon = new StringTokenizer(bufor.readLine()); return new Boolean(bon.nextToken()).booleanValue(); } catch (IOException e) { System.err.println("Blad IO Boolean "+e); return false; } } char weChar() { try { String s = bufor.readLine(); return s.charAt(0); } catch (IOException e) { System.err.println("Blad IO char "+e); return 0; } } String weString() { try { return bufor.readLine(); } catch (IOException e) { System.err.println("Blad IO String"); return ""; } } byte weByte() { try { bon = new StringTokenizer(bufor.readLine()); return Byte.parseByte(bon.nextToken()); } catch (IOException e) { System.err.println("Blad IO byte "+e); return 0; } catch (NumberFormatException e) { System.err.println( "Blad formatu byte "+e); return 0; } } short weShort() { try { bon = new StringTokenizer(bufor.readLine()); return Short.parseShort(bon.nextToken()); } catch (IOException e) { System.err.println("Blad IO short: "+e); return 0; } catch (NumberFormatException e) { System.err.println( "Blad formatu short "+e); return 0; } } int weInt() { try { bon = new StringTokenizer(bufor.readLine()); return Integer.parseInt(bon.nextToken()); } catch (IOException e) { System.err.println("Blad IO int "+e); return 0; } catch (NumberFormatException e) { System.err.println( "Blad formatu int "+e); return 0; } } long weLong() { try { bon = new StringTokenizer(bufor.readLine()); return Long.parseLong(bon.nextToken()); } catch (IOException e) { System.err.println("Blad IO "+e); return 0L; } catch (NumberFormatException e) { System.err.println( "Blad formatu long "+e); return 0L; } } float weFloat() { try { bon = new StringTokenizer(bufor.readLine()); return new Float(bon.nextToken()).floatValue(); } catch (IOException e) { System.err.println("Blad IO float "+e); return 0.0F; } catch (NumberFormatException e) { System.err.println( "Blad formatu float "+e); return 0.0F; } } double weDouble() { try { bon = new StringTokenizer(bufor.readLine()); return new Double(bon.nextToken()).doubleValue(); } catch (IOException e) { System.err.println("Blad IO double "+e); return 0.0; } catch (NumberFormatException e) { System.err.println( "Blad formatu double "+e); return 0; }}} public class program { public static void main(String[] args) throws Exception { wewy we = new wewy(); System.out.print("Podaj char: "); System.out.println(we.weChar()); System.out.print("Podaj String: "); System.out.println(we.weString()); System.out.print("Podaj boolean: "); System.out.println(we.weBoolean()); System.out.print("Podaj byte: "); System.out.println(we.weByte()); System.out.print("Podaj short: "); System.out.println(we.weShort()); System.out.print("Podaj int: "); System.out.println(we.weInt()); System.out.print("Podaj long: "); System.out.println(we.weLong()); System.out.print("Podaj float: "); System.out.println(we.weFloat()); System.out.print("Podaj double: "); System.out.println(we.weDouble()); }}