Svar till Tentamen i Webbprogrammering med Java

17 december 1998


  1. Tillgänglighet, beroende på modifierare, av metoder och datafält refererade från kod i klasser. Klasserna har olika relationer till klassen där metoden eller datafältet finns.

    Relation

    Samma klass

    Underklass i samma paket

    Icke underklass i samma paket

    Underklass i annat paket

    Icke underklass i annat paket

    Modifierare

    private

    Ja

    Nej

    Nej

    Nej

    Nej

    "default"

    Ja

    Ja

    Ja

    Nej

    Nej

    protected

    Ja

    Ja

    Ja

    Ja

    Nej

    public

    Ja

    Ja

    Ja

    Ja

    Ja

  2. Naturligtvis är ordningen inom varje nivå irrelevant.
    • Object
      • Component
        • Button
        • Canvas
        • Checkbox
        • Choice
        • Container
          • Panel
            • Applet
          • ScrollPane
          • Window
            • Dialog
              • FileDialog
            • Frame
        • Label
        • List
        • Scrollbar
        • TextComponent
          • TextArea
          • TextField
  3.  
    • Object
      • Number
        • Integer
        • Byte
        • Short
        • Long
        • Float
        • Double

    Klasserna BigInteger och BigDecimal i paketet java.math är också underklasser till Number.

  4.  
    • Object
      • Dictionary
        • Hashtable
          • Properties
  5. Component, Number och Dictionary är abstrakta. Man kan inte skapa objekt av dessa klasser, men däremot kan man ha referenser av dessa klasser till objekt av de konkreta underklasserna.
  6. Bägge är högerskiftoperatorer. >> kopierar teckenbiten medans >>> alltid skiftar in nollor till vänster. Resultatet av >> är att dividera med 2 för varje högerskift (även för negativa tal). >>> används mest i datakommunikations- och grafiksammanhang.
  7. Före: i == 3 och j == 4. i+++j beräknas som (i++)+j, vilket blir 7. Efter: i == 4 och j == 4. Prova gärna med JavaScript-koden: i = 3; j = 4; alert("i+++j==" + (i+++j) + ", i==" + i + ", j==" + j); JavaScript fungerar som Java (och C/C++) i detta avseende. 
  8. Remote Method Invocation 
  9. Man kan skriva appletter som använder RMI för att kommunicera med en Java-applikation på en webbserver. Java-applikationen kommunicerar i sin tur med en databasserver med hjälp av JDBC (Java DataBase Connectivity). Detta gör det möjligt att använda databaser via interaktiva Java-appletter på Internet. Det enda som krävs hos användaren är en vanlig webbläsare.
    [Client: Applet från WWW-server] <-RMI-> [Server: Applikation <-JDBC-> Databasserver]
  10. start rmiregistry
  11. Sockets använder TCP (Transfer Control Protocol) vilket garanterar att informationen kommer fram. Paketen sänds om tills de kommer fram. Datagram använder UDP (User Datagram Package). Paketen bara skickas iväg mot sin destinationsaddress utan garanti för att denna finns eller att paketen kommer fram. Sockets håller en förbindelse uppkopplad vilket kräver mer resurser.
  12. Exempel:
    String howSick(double temperature)
    {
       String howsick;
       if(temperature < 34)
          howsick = "farligt låg";
       else if(temperature > 42)
          howsick = "farligt hög";
       else if(temperature < 36)
          howsick = "låg";
       else if(temperature > 38)
          howsick = "hög";
       else // if(36 <= temperature && temperature <= 38)
          howsick = "frisk";
       return howsick;
    }
  13. Som det är nu kommer den första catchen att fånga alla undantag och de senare kommer aldrig att kunna användas. Man skall ha det mest specialiserade (ärvda) undantaget först och det mest allmänna sist, så här:
    try {
       ...
    } catch(FileNotFoundException e) {
       ...
    } catch(IOException e) {
       ...
    } catch(Exception e) {
       ...
    }
  14.  
    public void paint(Graphics g) {
       Graphics screengc;
       screengc = g;
       // Medlemsvariabel: Image buffer = null;
       // I init():
       // Dimension d = this.getSize();
       // buffer = this.createImage(d.width, d.height);
       g = buffer.getGraphics();
       g.setColor(Color.pink);
       .
       .
       g.fillOval(0, 0, x2, y2);
       g.setColor(Color.black);
       g.drawOval(0, 0, x2, y2);
       .
       .
       screengc.drawImage(buffer, 0, 0, null);
    }
       
    public void update(Graphics g)
    {
       this.paint(g);
    }
  15. Exempel, i en fil kallad ImageSound.java:
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
       
    public class ImageSound extends Applet implements ActionListener
    {
       Image image;
       AudioClip sound;
       Button btnPlay = new Button();
       
       public void init()
       {
          image = getImage(getDocumentBase(), getParameter("image"));
          sound = getAudioClip(getDocumentBase(), getParameter("sound"));
          btnPlay.setLabel("Spela");
          btnPlay.addActionListener(this);
          add(btnPlay);
       }
       
       public void paint(Graphics g)
       {
          g.drawImage(image, 0, 0, this);
       }
       
       public void actionPerformed(ActionEvent ae)
       {
          try
          {
             sound.play();
          }
          catch(Exception e)
          {
          }
      }
    }

    Applet-taggen:

    <APPLET CODE="ImageSound.class" WIDTH="400" HEIGHT="300">
    <PARAM NAME="image" VALUE="tomte.jpg">
    <PARAM NAME="sound" VALUE="godjul.au">
    </APPLET>
       


Copyright © 1998 by Mikael Bonnier, Lund, Sweden