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());
}}