Föreläsning 10 Paket Synlighet Arkiv
Paket I java placeras klasser i paket. Klasser som hör ihop placeras i samma paket. Vill man använda en klass i ett program måste paketet importeras (om inte program och klass är i samma paket). Ett exempel är då du vill använda metoder i klassen JOptionPane: import javax.swing.*; eller import javax.swing.joptionpane; Från Sun levereras ett stort antal standardklasser. Dessa är grupperade i paket. På kursen använder vi klasser från bl.a. nedanstående paket: java.lang Grundläggande klasser som importeras automatiskt. java.util Diverse klasser, speciellt Collection-klasser (F19) java.awt Grafiska klasser, speciellt awt-komponenter java.awt.event Lyssnarklasser vid grafiska program java.io Klasser för att utbyta data, t.ex lagra på hårddisken java.net Klasser för kommunikation över internet javax.swing Grafiska klasser, speciellt swing-komponenter
Paket En klass, t.ex. EnKlass, placeras i ett paket med ett package-kommando. Klassen placeras i paketet laboration1. Detta innebär att den kompilerade filen (.class-filen) ska lagras i en katalog (mapp) med namnet laboration1. Det går bra att skapa paket inuti paket, s.k. subpaket. Om vi vill att varje laboration på en kurs ska vara ett underpaket till paketet laborationer så ska klassen EnKlass börja med package laborationer.laboration1; Nu ska.class-filen lagras i katalogen laboration1 vilken i sin tur ska vara i katalogen laborationer.
Synlighet paket-synlighet Hittills på kursen har vi gett klasser synligheten public metoder/instansvariabler synligheten public eller private Det finns ytterligare alternativ, nämligen ingen alls och protected. Anger man ingen synlighet för en klass: class EnKlass { så kan andra klasser i samma paket (laboration1) använda klassen. Men klasser i andra paket kan inte använda klassen. Anger man ingen synlighet för en metod/instansvariabel: public class AnnanKlass { int antal; int getantal() { } så är dessa användbara via referenser i klasser i samma paket, dvs i paketet laboration1. Anger man inte någon synlighet kallas därför detta för paket-synlighet. Vi återkommer till protected senare på kursen.
Synlighet flera klasser i samma fil Det är tillåtet att deklarera flera klasser i samma fil. Endast en klass får vara public och denna klass bestämmer filens namn. Övriga klasser i filen ska ges paket-synlighet. // EnKlass.java public class EnKlass { : } class AnnanKlass { : } class TredjeKlass { : } Klassen EnKlass kommer vara synlig från andra paket (via import) medan AnnanKlass och TredjeKlass kommer att ha paket-synlighet.
Jar-fil, Java Archive File I en jar-fil (Java Archive File) kan man packa ner alla typer av filer (jämför med zip-filer). När man är färdig med klasserna i ett eller flera paket (som är relaterade till varandra) är det praktisk att placera class-filerna i en arkiv-fil, en jarfil. Det blir därmed enkelt att flytta dem från en dator till en annan. Filen kan användas på den nya datorn genom att Miljövariabeln CLASSPATH ges sökvägen till jar-filen (se Skansholm s 93-94 / JSE.pdf på kurssidan - Kursmaterial) I NetBeans/Eclipse gör du vissa inställningar se Laboration 10. Utgör filerna dessutom ett program så kan man ange den klass i vilken exekveringen ska starta. Och jar-filen kan innehålla alla de resurser som används i programmet, t.ex. bild-filer. (se http://www.cs.chalmers.se/~skanshol/java_dir/fixajar.pdf / JSE.pdf på kurssidan) Det är med hjälp av programmet jar.exe som du skapar jar-filer. Och med jar.exe kan du också packa upp innehållet i en jar-fil (se JSE.pdf på kurssidan). Eftersom en jar-fil till formatet är samma som en zip-fil så finns det alternativa sätt att arbeta med jar-filer.