S-38.116 Teletietotekniikka

Java

Markku Merikoski

40381 H

Markku.Merikoski@iki.fi

Sisällysluettelo

1. Lyhenne- ja termiluettelo
2. Johdanto
3. Mikä on Java ?
3.1 Olio-ohjelmointi
3.2 Kielioppi
3.3 Java vs. C++
3.4 Javan ikkunat ja nappulat
3.5 AWT - Abstract Window Toolkit
3.6 Java lähdekoodi toimivaksi ohjelmaksi
3.7 Javan rakenne
3.8 Hyödyt
3.9 Haitat
4. Java ja WWW
4.1 Javan kaupallinen käyttö
4.2 Javan tämän hetkinen asema Internetissä
4.3 Kilpailijoita
5. Yhteenveto
6. Kirjallisuusviitteet
7. Liitteet
7.1 Liite 1 Javan paketit, luokat ja rajapinnat

1. Lyhenne-ja termiluettelo

Seuraavassa on lueteltu esitelmässä käytetyt lyhenteet

Internet Verkkojen verkko, maailmanlaajuinen tietoliikenneverkkko, joka yhdistää usean mantereen tietokoneet toisiinsa.
WWW World Wide Web, Internetin käytössä oleva palvelu, jonka avulla voidaan jakaa tietoa, tekstiä ja kuvia miljoonien ihmisten kesken.
HTML Hyper Text Markup Language, kieli WWW-sivujen rakentamiseen.
HTTP Hyper Text Transfer Protocol, protokolla WWW-sivujen siirtämiseen Internetissä.
Applet Ohjelmanen, pieni ohjelman pala, jonka suorittamiseen tarvitaan Java-ominaisuuksien avulla varustettu WWW-selailuohjelma.
Hotjava WWW-selailuohjelma, joka tukee Java-kieltä.
Java Olio-ohjelmointikieli.
CGI Common Gateway Interface.


2. Johdanto

Vuonna 1990 CERN:issä kehitettiin HTML-kieli, WWW-client ja WWW-server, joiden avulla tutkijat pystyvät jakamaan tietoa hyvin nopeasti koko maailmaan. Aluksi WWW oli akateemisen mielenkiinnon kohteena, mutta viime vuosina WWW on levinnyt kaupalliselle sektorille. Tällä hetkellä lähes kaikki suuret yritykset ovat mukana WWW:ssä jossain määrin. Suurten yritysten mielenkiintoa herättää lähinnä Internet verkon mahdollisuus saavuttaa kymmeniä miljoonia ihmisiä suhteellisen alhaisilla peruskustannuksilla. WWW-serverin pystyttämiseen riittää PC-mikro, sopiva käyttöjärjestelmä ja ohjelmisto, sekä kiinteä verkkoyhteys.

Samalla aikajänteella on kehitetty C ohjelmointikielen korvaajaksi C++ kieltä. C++ kielen heikkous tosin on, että se antaa ohjelmoijalle hyvin suuren ilmaisuvoiman, mikä puolestaan johtaa helposti virheelliseen koodiin ja monimutkaisiin ohjelmiin.

Java on objektiorientoitunut ohjelmointikieli, jonka juuret syntaksin ja perusideologian puolesta ovat hyvin lähellä C++ kieltä. Alunperin Java-kieli oli tarkoitus kehittää sulautettuihin systeemeihin, esimerkiksi pesukoneisiin ja taskumuistioihin. Näissä systeemeissä on tärkeää, että ohjelma on toimiva, virheetön, laiteriippumaton ja selviytyy mahdollisista virhetilanteista luotettavasti. Samanlaisia vaatimuksia ohjelman toimivuuden suhteen on havaittavissa myös WWW:ssä, jossa ohjelman halutaan toimivan useissa laiteympäristöissä ja luotettavasti. Aikaisemmin HTML-kieli on mahdollistanut vain tekstin ja lomakkeiden siirron eri tietokoneiden välillä. Jotain toiminnallisuutta on saatu aikaan kirjoittamalla, joko shell-skriptejä tai cgi-bin ohjelmia. Näiden heikkoutena tosin on ollut, että niissä on ollut monia turvallisuusaukkoja, joita erilaiset kriminaalit ovat voineet hyödyntää. Javan on tarkoitus olla ensimmäinen toimiva ratkaisu luotettavien ja turvallisten ohjelmien luomiseen WWW:hen. Javan kehitystyötä on johtanut James Gosling Sun-yhtiössä. Java julkistettiin toukokuussa 1995.


3. Mikä on Java ?

Java on olioperusteinen ohjelmointikieli. Seuraavassa on lyhyt esimerkki Java-koodista.

Java appletin esimerkkikoodia

import java.applet.Applet;
import java.awt.Graphics;
public class HelloWorld extends Applet {
  public void paint(Graphics g) {
    g.drawString("Hei julma maailma",10,10);
  }
}

Javassa on siis luokkia (kts. kohta public class.) sekä metodeja (kts. kohta public void paint(Graphics)), joiden avulla ohjelmaan saadaan haluttu toiminnallisuus.

3.1 Olio-ohjelmointi

Olio-ohjelmointikielellä tarkoitetaan kieltä, jossa on luokkia, joilla määritellään funktioiden ominaisuuksia sekä olioita, toiminnallisia osia, jotka muodostetaan luokkien pohjilta toteuttamaan jokin tietty ominaisuus. Olio-ohjelmoinnin hyviä puolia on sen luoma modulaarinen malli, ns. Black Box-malli, jossa kunkin luokan sisäisiä ominaisuuksia voidaan muuttaa ilman, että koko kokonaisuutta täytyy huomioida. Eri luokat kommunikoivat toistensa kanssa hyvin määriteltyjen rajapintojen avulla. Tyypillisessä luokkakuvauksessa on kulloisenkin luokan instanssimuuttujat, luokkamuuttujat ja luokkaan kuuluvat metodit.

Luokka ja siitä periytettyjä olioita.

3.2 Kielioppi

Javan kielioppi pohjautuu paljolti C:hen ja C++:aan, joten syntaksi on samanlaista. Joitakin C:n ominaisuuksia on poistettu ja joitakin lisäominaisuuksia lisätty. Näin on pyritty saamaan virhevapaampi ohjelmointikieli. Javassa on mukana kirjastoja, joihin on toteutettu luokkia ja metodeja, lähinnä erilaisten applet:ien, nappuloiden ja ikkunoiden luomiseen. Javan paketit, luokat ja rajapinnat on tarkemmin lueteltu liitteessä 1.

3.3 Java vs. C++

Javassa ei ole seuraavia C++:n ominaisuuksia.

Moniperiytyvyyteen Java tosin tarjoaa rajapinnat (interfaces), joiden avulla saadaan luokkia jaettua eri luokkien kesken. Lisäksi Javassa on automaattinen roskienkäsittely (carbage collection). Javassa ohjelmoijan ei sallita käsitellä muistiavaruutta suoraan.

3.4 Javan ikkunat ja nappulat

Javan perusluokat tarjoavat luokkia, erilaisten applettien, ikkunoiden, grafiikan, tekstin ja syöttöfunktioiden tekoon. Näin ollen Javaa käytetään paljon erilaisten käyttöliittymien luomiseen sekä kommunikointiin käyttäjän kanssa.

3.5 AWT - Abstract Window Toolkit

AWT on luokka, jonka avulla luodaan erilaisia säiliöitä (ikkunoita), jotka puolestaan sisältävät aliluokkia erilaisten nappuloiden, scrollbarien sekä muiden ikkunan osasten tekoon.

Alla on kuvattu AWT:n luokkahierarkia.

3.6 Java lähdekoodi toimivaksi ohjelmaksi

Javaohjelmia voidaan kääntää itsenäisiksi ohjelmiksi, joita voidaan ajaa Java tulkin avulla. Toinen vaihtoehto on tehdä Java-ohjelmista appletteja, pieniä ohjelmapalasia. Mielenkiintoisia ovat appletit, jotka toimivat useissa laiteympäristöissä. Appletteja voidaan myös siirtää hyvin helposti WWW:ssä, koska ne ovat pieniä ohjelmia. Lisäksi useisiin WWW-lukuohjelmiin, kuten Netscape ja Microsoft Explorer, on rakennettu Java tuki, joten ne pystyvät käyttämään Javaa suoraan ilman erillistä Java-tulkkia.

3.7 Javan rakenne

Javan hierarkia, jossa alimmaisena osana on tietokone, sitten konekohtainen Javatulkki, tavukoodi ja Java-lähdekoodi.

Java ohjelman tuottamisessa ensiksi Java-lähdekoodi käännetään ns. tavukoodiksi, jota voidaan ajaa useissa eri laiteympäristöissä Java-tulkin avulla. Lähdekoodin päätteenä käytetään .java-merkintää. Vastaavasti tavukoodin pääte on .class. Tavukoodi ei toimi suoraan missään prosessorissa, vaan sen suorittamiseen tarvitaan aina konekohtainen tulkki.

Windows ympäristössä on olemassa seuraavat Java työkaluohjelmat Java-ohjelmien kehittämiseen.

appletviewer Applettien kehitystyökalu, suorittaa applet Java-koodin.
java Java tulkki, suorittaa käännetyn tavukoodin.
javac Java kääntäjä, kääntää Java-lähdekoodin tavukoodiksi.
javadocMahdollistaa automaattisen dokumentaation luonnin lähdekoodista.
javah Mahdollistaa Java-ohjelmien liittämisen C-ohjelmiin.
javap Javan disassembler.
jdb Javan debuggeri.

3.8 Hyödyt

Karsimalla C++:n ominaisuuksia Javassa on pyritty rajoittamaan ohjelmoijan ilmaisuvoimaa verrattuna C++:aan. Näin on pyritty saamaan kielestä hieman virhevapaampi ja helpommin ohjelmoitava.

Ohjelmointikielenä Java on suhteellisen pieni. Itse Java tulkin koko on muutamia satoja kilotavuja. Näin ollen Java- ohjelmia voidaan suorittaa pienissäkin tietokoneissa ja järjestelmissä. Itse Java-tulkki vaatii noin 4 Mb muistia tietokoneelta, jotta se voisi kääntää Java-ohjelmia tavukoodiksi.

3.9 Haitat

Olio-ohjelmointi tuo mukanaan muutamia ei-toivottuja piirteitä. Ohjelmien koot kasvavat helposti suuriksi. Lisäksi ohjelmoijalla on vähemmän mahdollisuuksia optimoida koodia. Ohjelmia ei voi enää suunnitella funktionaaliselta pohjalta, vaan ohjelmien rakenteen täytyy noudattaa luokka-oliomallia.

Java kieleen on upotettu muutamia ominaisuuksia, jotka mahdollistavat tiedonkeruun WWW:tä selaavilta käyttäjiltä. Näin ollen WWW-lukuohjelmiin tulisi sisällyttää optio, jolla tiedonkeruuta voitaisiin säädellä. Käyttäjien tiedostot ovat turvassa, sillä Java kielessä ei ole ominaisuuksia, joilla voisi suoraan lukea tai kirjoittaa käyttäjän tiedostoja.

4. Java ja WWW

Java-appletin siirto Internetin läpi. Tietokoneesta A siirretään toiseen tietokoneeseen B Java-applet-ohjelma.

Tavallisen Java-ohjelman käyttäjän kannalta mukavimman käyttöliittymän tarjoavat erilaiset WWW-lukuohjelmat. Näissä ohjelmissa on upotettu Java-tuki, joka huolehtii automaattisesti, Java ohjelman hakemisen WWW-serveristä ja sen käynnistämisestä käyttäjän tietokoneessa. Ennen koodin suorittamista Java-tulkki verifioi koodin ja tarkistaa, että koodi ei tee mitään luvatonta. Jos koodissa on virhe, niin siitä tulee keskeytys (exception), joka käsitellään erillisessä virheenkäsittelijässä.

4.1 Javan kaupallinen käyttö

Java tarjoaa mahdollisuuden kehittää WWW:hen toimivia ja turvallisia ohjelmia, joiden avulla WWW:n käyttäjät voivat katsella erilaisia graafeja, esimerkiksi pörssikursseja kuin myös muita tietokantahakuja. Java mahdollistaa myös informaation keruun WWW:n käyttäjältä.

4.2 Javan tämän hetkinen asema Internetissä

Runsaan parin vuoden aikana Java on saavuttanut Internetissä varsin merkittävän aseman. Java on noteerattu myös useissa aikakausilehdissä, mm. Time Magazinessa, Internetin ohjelmointikielenä.

4.3 Kilpailijoita

Tällä hetkellä Javalle ei ole olemassa juurikaan kilpailijoita. Alun perin WWW:hen kehitettiin CGI (Common Gateway Interface), jonka avulla voitaisiin tarjota rajapinta ohjelmille, jotka toisivat verkkoon funktionaalisuutta. CGI-bin ohjelmissa on tällä hetkellä pahoja tietoturvaongelmia, mikä laskee CGI-bin ohjelmien suosiota ohjelmissa. Myös Javassa on tietoturvaongelmia, joista useimmat on jo korjattu.


5. Yhteenveto

Artikkelissa Java, The illusion pyritään tuomaan esille se, että Internetin ohjelmointikielen pitäisi olla mahdollisimman vapaavalintainen. Kirjoittaja esittää näkemyksen, että Internettiin tulisi voida kirjoittaa ohjelmia myös Pascalilla, Eiffelillä, Schemellä, ja muilla ohjelmointikielillä. Hän ei myöskään pidä siitä, että Javan syntaksi ja ohjelmointi on hyvin monimutkaista.

Artikkeli Java One year out kertoo joitakin lukuja, jotka kuvastavat Javan kasvua Internetissä. Gamelan palvelimessa julkaistujen Java applet-ohjelmien määrä oli 1.2.96 1081 kappaletta. 15.7.96 vastaava luku oli 3676 kappaletta. Myös Javan news-ryhmissä on ollut vilkasta keskustelua Javasta. Keskimäärin comp.lang.java newsryhmässä on ollut viikoittain 2000 viestiä Javasta.

Tällä hetkellä Javaa vielä kehitetään eteenpäin, jotta se voisi toimia tulevaisuuden verkkotietokoneissa. Muutenkin näyttäisi siltä, että tietokoneala on siirtymässä henkilökohtaisesta tietojenkäsittelystä verkkotietokoneisiin. Verkkotietokoneiden edullisuus ja ohjelmistojen helppo ylläpito luovat kustannustehokkuutta moniin suuriin yrityksiin, joissa tällä hetkellä on paljon ylläpitohenkilökuntaa vain hoitamassa mikrojen ohjelmistojen päivityksiä.

Java on tehokas, turvallinen ja laiteriippumaton olio-ohjelmointikieli, jolla on jännittävä tulevaisuus edessään yhä laajentuvassa Internetissä.

6. Kirjallisuusviitteet

  1. Jesper Ek, Java ohjelmointi tutuksi, Pagina, Vantaa 1996.
  2. http://java.sun.com - Javan virallinen www-sivu
  3. http://www.gamelan.com - Virallinen lista Javasta, Java-applet ohjelmia.
  4. http://www.javaworld.com - IDG:n lehti Java yhteisölle, ohjelmointivinkkejä.
  5. news://comp.lang.java - Javan uutisryhmä
  6. http://www-elec.enst.fr/java/DigitalEspresso/jnIndex.html - Digital Espresso, uutislehti, joka kertoo Java maailman viimeisimmät uutiset
  7. http://www.javasoft.com:80/products/JDK/faq.html - Javan useimmiten kysyttyjen kysymysten lista.
  8. http://www.javasoft.com:80/products/apiOverview.html - Tietoa Javan API rajapinnasta.
  9. http://www.javasoft.com:80/security/index.html - Katsaus Javan turvallisuuteen
  10. http://www.javasoft.com/nav/download/index.html - Javan kehityspaketti JDK sekä muita tiedostoja.
  11. http://keskus.hut.fi/opetus/s38116/1996/esitelmat/40339c/ - Hannu Arvelon Java-seminaariesitelmä
  12. http://www.nombas.com/otherdoc/javamagk.htm - Java, The Illusion
  13. http://webreference.com/content/java/ - Java, One Year Out
  14. http://www.thinkage.on.ca/~mlvanbie/cgibin/onepage.cgi/cgisec/cgisecdef?html - CGI-bin security tutorial

Liitteet

  1. Liite 1 Javan paketit, luokat ja rajapinnat

JDK 1.1 Beta Class List

The following is a list of all public class in the java.* packages in JDK 1.1beta3. This list is gathered from the javadoc-generated HTML documents. The count is:
JDK 1.0.2 JDK 1.1beta3
Public java.* packages 8 23
Public java.* classes and interfaces 211 503

(Program used to generate list: /bin/diffclassnames.sh)

+ Plus sign means the package, class or interface is new for JDK 1.1

Note: Classes without plus signs may have methods added to them for 1.1.

Packages

java.applet
+ java.awt.datatransfer
+ java.awt.event
java.awt
java.awt.image
java.awt.peer
+ java.beans
java.io
java.lang
+ java.lang.reflect
+ java.math
java.net
+ java.rmi.dgc
+ java.rmi
+ java.rmi.registry
+ java.rmi.server
+ java.security.acl
+ java.security
+ java.security.interfaces
+ java.sql
+ java.text
java.util
+ java.util.zip

The following packages are are included in the API reference documentation, but are not included in the above summary package count, since they are outside of java.*:

sun.tools.debug
+ sunw.io
+ sunw.util
Classes and Interfaces
java.applet.Applet
java.applet.AppletContext
java.applet.AppletStub
java.applet.AudioClip
java.awt.AWTError
+ java.awt.AWTEvent
+ java.awt.AWTEventMulticaster
java.awt.AWTException
+ java.awt.Adjustable
java.awt.BorderLayout
java.awt.Button
java.awt.Canvas
java.awt.CardLayout
java.awt.Checkbox
java.awt.CheckboxGroup
java.awt.CheckboxMenuItem
java.awt.Choice
java.awt.Color
java.awt.Component
java.awt.Container
+ java.awt.Cursor
java.awt.Dialog
java.awt.Dimension
java.awt.Event
+ java.awt.EventQueue
+ java.awt.EventSource
java.awt.FileDialog
java.awt.FlowLayout
java.awt.Font
java.awt.FontMetrics
java.awt.Frame
java.awt.Graphics
java.awt.GridBagConstraints
java.awt.GridBagLayout
java.awt.GridLayout
+ java.awt.IllegalComponentStateException
java.awt.Image
java.awt.Insets
+ java.awt.ItemSelectable
java.awt.Label
java.awt.LayoutManager
+ java.awt.LayoutManager2
java.awt.List
java.awt.MediaTracker
java.awt.Menu
java.awt.MenuBar
java.awt.MenuComponent
java.awt.MenuContainer
java.awt.MenuItem
+ java.awt.MenuShortcut
java.awt.Panel
java.awt.Point
java.awt.Polygon
+ java.awt.PopupMenu
+ java.awt.PrintGraphics
+ java.awt.PrintJob
java.awt.Rectangle
+ java.awt.ScrollPane
java.awt.Scrollbar
+ java.awt.Shape
+ java.awt.SystemColor
java.awt.TextArea
java.awt.TextComponent
java.awt.TextField
java.awt.Toolkit
java.awt.Window
+ java.awt.datatransfer.Clipboard
+ java.awt.datatransfer.ClipboardOwner
+ java.awt.datatransfer.DataFlavor
+ java.awt.datatransfer.StringSelection
+ java.awt.datatransfer.Transferable
+ java.awt.datatransfer.UnsupportedFlavorException
+ java.awt.event.ActionEvent
+ java.awt.event.ActionListener
+ java.awt.event.AdjustmentEvent
+ java.awt.event.AdjustmentListener
+ java.awt.event.ComponentAdapter
+ java.awt.event.ComponentEvent
+ java.awt.event.ComponentListener
+ java.awt.event.ContainerAdapter
+ java.awt.event.ContainerEvent
+ java.awt.event.ContainerListener
+ java.awt.event.FocusAdapter
+ java.awt.event.FocusEvent
+ java.awt.event.FocusListener
+ java.awt.event.InputEvent
+ java.awt.event.ItemEvent
+ java.awt.event.ItemListener
+ java.awt.event.KeyAdapter
+ java.awt.event.KeyEvent
+ java.awt.event.KeyListener
+ java.awt.event.MouseAdapter
+ java.awt.event.MouseEvent
+ java.awt.event.MouseListener
+ java.awt.event.MouseMotionAdapter
+ java.awt.event.MouseMotionListener
+ java.awt.event.PaintEvent
+ java.awt.event.TextEvent
+ java.awt.event.TextListener
+ java.awt.event.WindowAdapter
+ java.awt.event.WindowEvent
+ java.awt.event.WindowListener
+ java.awt.image.AverageScaleFilter
java.awt.image.ColorModel
java.awt.image.CropImageFilter
java.awt.image.DirectColorModel
java.awt.image.FilteredImageSource
java.awt.image.ImageConsumer
java.awt.image.ImageFilter
java.awt.image.ImageObserver
java.awt.image.ImageProducer
java.awt.image.IndexColorModel
java.awt.image.MemoryImageSource
java.awt.image.PixelGrabber
java.awt.image.RGBImageFilter
+ java.awt.image.ReplicateScaleFilter
java.awt.peer.ButtonPeer
java.awt.peer.CanvasPeer
java.awt.peer.CheckboxMenuItemPeer
java.awt.peer.CheckboxPeer
java.awt.peer.ChoicePeer
java.awt.peer.ComponentPeer
java.awt.peer.ContainerPeer
java.awt.peer.DialogPeer
java.awt.peer.FileDialogPeer
+ java.awt.peer.FontPeer
java.awt.peer.FramePeer
java.awt.peer.LabelPeer
+ java.awt.peer.LightweightPeer
java.awt.peer.ListPeer
java.awt.peer.MenuBarPeer
java.awt.peer.MenuComponentPeer
java.awt.peer.MenuItemPeer
java.awt.peer.MenuPeer
java.awt.peer.PanelPeer
+ java.awt.peer.PopupMenuPeer
+ java.awt.peer.ScrollPanePeer
java.awt.peer.ScrollbarPeer
java.awt.peer.TextAreaPeer
java.awt.peer.TextComponentPeer
java.awt.peer.TextFieldPeer
java.awt.peer.WindowPeer
+ java.beans.BeanDescriptor
+ java.beans.BeanInfo
+ java.beans.Beans
+ java.beans.Customizer
+ java.beans.EventSetDescriptor
+ java.beans.FeatureDescriptor
+ java.beans.IndexedPropertyDescriptor
+ java.beans.IntrospectionException
+ java.beans.Introspector
+ java.beans.MethodDescriptor
+ java.beans.ParameterDescriptor
+ java.beans.PropertyChangeEvent
+ java.beans.PropertyChangeListener
+ java.beans.PropertyChangeSupport
+ java.beans.PropertyDescriptor
+ java.beans.PropertyEditor
+ java.beans.PropertyEditorManager
+ java.beans.PropertyEditorSupport
+ java.beans.PropertyVetoException
+ java.beans.SimpleBeanInfo
+ java.beans.VetoableChangeListener
+ java.beans.VetoableChangeSupport
+ java.beans.Visibility
java.io.BufferedInputStream
java.io.BufferedOutputStream
+ java.io.BufferedReader
+ java.io.BufferedWriter
java.io.ByteArrayInputStream
java.io.ByteArrayOutputStream
+ java.io.CharArrayReader
+ java.io.CharArrayWriter
+ java.io.CharConversionException
java.io.DataInput
java.io.DataInputStream
java.io.DataOutput
java.io.DataOutputStream
java.io.EOFException
+ java.io.Externalizable
java.io.File
java.io.FileDescriptor
java.io.FileInputStream
java.io.FileNotFoundException
java.io.FileOutputStream
+ java.io.FileReader
+ java.io.FileWriter
java.io.FilenameFilter
java.io.FilterInputStream
java.io.FilterOutputStream
+ java.io.FilterReader
+ java.io.FilterWriter
java.io.IOException
java.io.InputStream
+ java.io.InputStreamReader
java.io.InterruptedIOException
+ java.io.InvalidClassException
+ java.io.InvalidObjectException
java.io.LineNumberInputStream
+ java.io.LineNumberReader
+ java.io.NotActiveException
+ java.io.NotSerializableException
+ java.io.ObjectInput
+ java.io.ObjectInputStream
+ java.io.ObjectInputValidation
+ java.io.ObjectOutput
+ java.io.ObjectOutputStream
+ java.io.ObjectStreamClass
+ java.io.ObjectStreamException
+ java.io.OptionalDataException
java.io.OutputStream
+ java.io.OutputStreamWriter
java.io.PipedInputStream
java.io.PipedOutputStream
+ java.io.PipedReader
+ java.io.PipedWriter
java.io.PrintStream
+ java.io.PrintWriter
java.io.PushbackInputStream
+ java.io.PushbackReader
java.io.RandomAccessFile
+ java.io.Reader
java.io.SequenceInputStream
+ java.io.Serializable
+ java.io.StreamCorruptedException
java.io.StreamTokenizer
java.io.StringBufferInputStream
+ java.io.StringReader
+ java.io.StringWriter
+ java.io.SyncFailedException
java.io.UTFDataFormatException
+ java.io.UnsupportedEncodingException
+ java.io.WriteAbortedException
+ java.io.Writer
java.lang.AbstractMethodError
java.lang.ArithmeticException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayStoreException
java.lang.Boolean
+ java.lang.Byte
java.lang.Character
java.lang.Class
java.lang.ClassCastException
java.lang.ClassCircularityError
java.lang.ClassFormatError
java.lang.ClassLoader
java.lang.ClassNotFoundException
java.lang.CloneNotSupportedException
java.lang.Cloneable
java.lang.Compiler
java.lang.Double
java.lang.Error
java.lang.Exception
+ java.lang.ExceptionInInitializerError
java.lang.Float
java.lang.IllegalAccessError
java.lang.IllegalAccessException
java.lang.IllegalArgumentException
java.lang.IllegalMonitorStateException
+ java.lang.IllegalStateException
java.lang.IllegalThreadStateException
java.lang.IncompatibleClassChangeError
java.lang.IndexOutOfBoundsException
java.lang.InstantiationError
java.lang.InstantiationException
java.lang.Integer
java.lang.InternalError
java.lang.InterruptedException
java.lang.LinkageError
java.lang.Long
java.lang.Math
java.lang.NegativeArraySizeException
java.lang.NoClassDefFoundError
java.lang.NoSuchFieldError
+ java.lang.NoSuchFieldException
java.lang.NoSuchMethodError
java.lang.NoSuchMethodException
java.lang.NullPointerException
java.lang.Number
java.lang.NumberFormatException
java.lang.Object
java.lang.OutOfMemoryError
java.lang.Process
java.lang.Runnable
java.lang.Runtime
java.lang.RuntimeException
java.lang.SecurityException
java.lang.SecurityManager
+ java.lang.Short
java.lang.StackOverflowError
java.lang.String
java.lang.StringBuffer
java.lang.StringIndexOutOfBoundsException
java.lang.System
java.lang.Thread
java.lang.ThreadDeath
java.lang.ThreadGroup
java.lang.Throwable
java.lang.UnknownError
java.lang.UnsatisfiedLinkError
java.lang.VerifyError
java.lang.VirtualMachineError
+ java.lang.Void
+ java.lang.reflect.Array
+ java.lang.reflect.Constructor
+ java.lang.reflect.Field
+ java.lang.reflect.InvocationTargetException
+ java.lang.reflect.Member
+ java.lang.reflect.Method
+ java.lang.reflect.Modifier
+ java.math.BigDecimal
+ java.math.BigInteger
+ java.net.BindException
+ java.net.ConnectException
java.net.ContentHandler
java.net.ContentHandlerFactory
java.net.DatagramPacket
java.net.DatagramSocket
+ java.net.DatagramSocketImpl
+ java.net.FileNameMap
+ java.net.HttpURLConnection
java.net.InetAddress
java.net.MalformedURLException
+ java.net.MulticastSocket
+ java.net.NoRouteToHostException
java.net.ProtocolException
java.net.ServerSocket
java.net.Socket
java.net.SocketException
java.net.SocketImpl
java.net.SocketImplFactory
java.net.URL
java.net.URLConnection
java.net.URLEncoder
java.net.URLStreamHandler
java.net.URLStreamHandlerFactory
java.net.UnknownHostException
java.net.UnknownServiceException
+ java.rmi.AccessException
+ java.rmi.AlreadyBoundException
+ java.rmi.ConnectException
+ java.rmi.ConnectIOException
+ java.rmi.MarshalException
+ java.rmi.Naming
+ java.rmi.NoSuchObjectException
+ java.rmi.NotBoundException
+ java.rmi.RMISecurityException
+ java.rmi.RMISecurityManager
+ java.rmi.Remote
+ java.rmi.RemoteException
+ java.rmi.ServerError
+ java.rmi.ServerException
+ java.rmi.ServerRuntimeException
+ java.rmi.StubNotFoundException
+ java.rmi.UnexpectedException
+ java.rmi.UnknownHostException
+ java.rmi.UnmarshalException
+ java.rmi.dgc.DGC
+ java.rmi.dgc.Lease
+ java.rmi.dgc.VMID
+ java.rmi.registry.LocateRegistry
+ java.rmi.registry.Registry
+ java.rmi.registry.RegistryHandler
+ java.rmi.server.ExportException
+ java.rmi.server.LoaderHandler
+ java.rmi.server.LogStream
+ java.rmi.server.ObjID
+ java.rmi.server.Operation
+ java.rmi.server.RMIClassLoader
+ java.rmi.server.RMIFailureHandler
+ java.rmi.server.RMISocketFactory
+ java.rmi.server.RemoteCall
+ java.rmi.server.RemoteObject
+ java.rmi.server.RemoteRef
+ java.rmi.server.RemoteServer
+ java.rmi.server.RemoteStub
+ java.rmi.server.ServerCloneException
+ java.rmi.server.ServerNotActiveException
+ java.rmi.server.ServerRef
+ java.rmi.server.Skeleton
+ java.rmi.server.SkeletonMismatchException
+ java.rmi.server.SkeletonNotFoundException
+ java.rmi.server.SocketSecurityException
+ java.rmi.server.UID
+ java.rmi.server.UnicastRemoteObject
+ java.rmi.server.Unreferenced
+ java.security.Certificate
+ java.security.DigestException
+ java.security.DigestInputStream
+ java.security.DigestOutputStream
+ java.security.Identity
+ java.security.IdentityScope
+ java.security.InvalidKeyException
+ java.security.InvalidParameterException
+ java.security.Key
+ java.security.KeyException
+ java.security.KeyManagementException
+ java.security.KeyPair
+ java.security.KeyParams
+ java.security.MessageDigest
+ java.security.NoSuchAlgorithmException
+ java.security.NoSuchProviderException
+ java.security.Principal
+ java.security.PrivateKey
+ java.security.Provider
+ java.security.ProviderException
+ java.security.PublicKey
+ java.security.SecureRandom
+ java.security.Security
+ java.security.Signature
+ java.security.SignatureException
+ java.security.Signer
+ java.security.acl.Acl
+ java.security.acl.AclEntry
+ java.security.acl.AclNotFoundException
+ java.security.acl.Group
+ java.security.acl.LastOwnerException
+ java.security.acl.NotOwnerException
+ java.security.acl.Owner
+ java.security.acl.Permission
+ java.security.interfaces.DSAKey
+ java.security.interfaces.DSAParams
+ java.security.interfaces.DSAPublicKey
+ java.sql.CallableStatement
+ java.sql.Connection
+ java.sql.DataTruncation
+ java.sql.DatabaseMetaData
+ java.sql.Date
+ java.sql.Driver
+ java.sql.DriverManager
+ java.sql.DriverPropertyInfo
+ java.sql.PreparedStatement
+ java.sql.ResultSet
+ java.sql.ResultSetMetaData
+ java.sql.SQLException
+ java.sql.SQLWarning
+ java.sql.Statement
+ java.sql.Time
+ java.sql.Timestamp
+ java.sql.Types
+ java.text.CharacterIterator
+ java.text.ChoiceFormat
+ java.text.CollatedString
+ java.text.Collation
+ java.text.CollationElementIterator
+ java.text.DateFormat
+ java.text.DateFormatData
+ java.text.DecimalFormat
+ java.text.Format
+ java.text.FormatException
+ java.text.FormatStatus
+ java.text.MessageFormat
+ java.text.NumberFormat
+ java.text.NumberFormatData
+ java.text.ParseStatus
+ java.text.SimpleDateFormat
+ java.text.SortKey
+ java.text.StringCharacterIterator
+ java.text.TableCollation
+ java.text.TextBoundary
java.util.BitSet
+ java.util.Calendar
java.util.Date
java.util.Dictionary
java.util.EmptyStackException
java.util.Enumeration
+ java.util.EventListener
+ java.util.EventObject
+ java.util.GregorianCalendar
java.util.Hashtable
+ java.util.ListResourceBundle
+ java.util.Locale
+ java.util.MissingResourceException
java.util.NoSuchElementException
java.util.Observable
java.util.Observer
java.util.Properties
+ java.util.PropertyResourceBundle
java.util.Random
+ java.util.ResourceBundle
+ java.util.SimpleTimeZone
java.util.Stack
java.util.StringTokenizer
+ java.util.TimeZone
+ java.util.TooManyListenersException
java.util.Vector
+ java.util.zip.Adler32
+ java.util.zip.CRC32
+ java.util.zip.CheckedInputStream
+ java.util.zip.CheckedOutputStream
+ java.util.zip.Checksum
+ java.util.zip.DataFormatException
+ java.util.zip.Deflater
+ java.util.zip.DeflaterOutputStream
+ java.util.zip.GZIPInputStream
+ java.util.zip.GZIPOutputStream
+ java.util.zip.Inflater
+ java.util.zip.InflaterInputStream
+ java.util.zip.ZipEntry
+ java.util.zip.ZipException
+ java.util.zip.ZipFile
+ java.util.zip.ZipInputStream
+ java.util.zip.ZipOutputStream
sun.* and sunw.*
The following classes are not counted in the above summary class count:
sun.tools.debug.DebuggerCallback
+ sun.tools.debug.NoSessionException
+ sun.tools.debug.NoSuchLineNumberException
sun.tools.debug.RemoteArray
sun.tools.debug.RemoteBoolean
sun.tools.debug.RemoteByte
sun.tools.debug.RemoteChar
sun.tools.debug.RemoteClass
sun.tools.debug.RemoteDebugger
sun.tools.debug.RemoteDouble
sun.tools.debug.RemoteField
sun.tools.debug.RemoteFloat
sun.tools.debug.RemoteInt
sun.tools.debug.RemoteLong
sun.tools.debug.RemoteObject
sun.tools.debug.RemoteShort
sun.tools.debug.RemoteStackFrame
sun.tools.debug.RemoteStackVariable
sun.tools.debug.RemoteString
sun.tools.debug.RemoteThread
sun.tools.debug.RemoteThreadGroup
sun.tools.debug.RemoteValue
sun.tools.debug.StackFrame
+ sunw.io.Serializable
+ sunw.util.EventListener
+ sunw.util.EventObject