Java Packages: Organization and Access in CMSC 131 Fall 2007 - Prof. Bonnie J. Dorr, Study notes of Computer Science

This document from the cmsc 131 fall 2007 course covers java packages, their purpose, and how to define and access them. It includes examples of package hierarchies and class access within and across packages. The document also discusses package visibility and the use of .jar files and classpaths.

Typology: Study notes

Pre 2010

Uploaded on 07/29/2009

koofers-user-i0r
koofers-user-i0r 🇺🇸

5

(1)

10 documents

1 / 8

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
1
CMSC 131 Fall 2007
Jan Plane (adapted from Bonnie Dorr)
Lecture Set # 17:
Packages
1.
Packages
CMSC 131 Fall 2007
Jan Plane (adapted by Bonnie Dorr)
1
Java Program Organization
Program Organization:
Java program: is composed of 1 or more Java source files.
Source file: can have 1 or more class and/or interface
declarations. (In our projects we have implemented one
class/interface per file.)
Public Class/Interface: If a class/interface is declared public
the source file must use the same name.
Only one public class/interface is allowed per source file.
(Can you have non-public classes? We will discuss this later.)
Packages: When a program is very large, its classes can be
further organized hierarchically into packages.
pf3
pf4
pf5
pf8

Partial preview of the text

Download Java Packages: Organization and Access in CMSC 131 Fall 2007 - Prof. Bonnie J. Dorr and more Study notes Computer Science in PDF only on Docsity!

CMSC 131 Fall 2007 Jan Plane (adapted from Bonnie Dorr)

Lecture Set # 17:

Packages

1. Packages

CMSC 131 Fall 2007 Jan Plane (adapted by Bonnie Dorr)

1

Java Program Organization

 Program Organization:

 Java program: is composed of 1 or more Java source files.

 Source file: can have 1 or more class and/or interface

declarations. (In our projects we have implemented one

class/interface per file.)

 Public Class/Interface: If a class/interface is declared public

the source file must use the same name.

 Only one public class/interface is allowed per source file.

(Can you have non-public classes? We will discuss this later.)

 Packages: When a program is very large, its classes can be

further organized hierarchically into packages.

CMSC 131 Fall 2007 Jan Plane (adapted by Bonnie Dorr)

2

Packages

 Package: a collection of related classes and/or interfaces.

 Examples: The Java API

javax.swing: classes dealing with the development of GUIs.

java.lang: essential classes required by the Java language.

java.text: facilities for formatting text output.

java.util: classes for storing/accessing collections of objects.

java.net: for network communication.

 Hierarchical: Packages can be divided into subpackages.

java.awt: classes for basic GUI elements and graphics.

java.awt.font: classes and interface relating to fonts. java.awt.geom: classes for defining 2-dimensional objects.

There is no limit to the nesting depth.

CMSC 131 Fall 2007 Jan Plane (adapted by Bonnie Dorr)

3

Access to Package Members

 Review of Package Basics:

Accessing Package Members: Fully qualified name: E.g., javax.swing.JOptionPane Importing a single class: import javax.swing.JOptionPane; … JOptionPane.showMessageDialog( … ); Importing all the classes: import javax.swing.*; … JOptionPane.showMessageDialog( … ); Import semantics: import does not “insert” the Java files (as C/C++ do with “include” files). Instead, it tells the compiler where to look to find classes that the program refers to. Multiple import statements: You can have as many as you like. They go at the top of your .java file (before any classes or interfaces). java.lang: is automatically imported into every program.

CMSC 131 Fall 2007 Jan Plane (adapted by Bonnie Dorr)

6

Class Access and Packages

 Class access within a package:

 Classes within a package can refer to each other without full qualification.  If a class is not given an access specifier (public or private), it is assumed to have package access and it can only be accessed by other classes within the package.

 Class access across packages:

 A public class can be accessed from other packages.  When this is done, either its name is fully qualified or is imported.  We can view public classes of a package as the “interface” of the package with the outside world. (This is analogous to public methods of a class forming its interface.)

 Subpackages are not automatically imported:

 When you import a package (e.g. import java.awt.* ) it does not import the subpackages (e.g. java.awt.font must be explicitly imported).

CMSC 131 Fall 2007 Jan Plane (adapted by Bonnie Dorr)

7

Package Visibility

 Package visibility is half-way between public and private.

 Package Visibility of classes:

 If a class is not declared public or private, it can be

accessed by all and only the classes within the package.

 Package visibility of class members:

 If instance variables or instance methods are not declared

public or private, they can be accessed by all and only

the classes within the package.

 Package visibility is used in industry:

 A team working on a certain part of a project is likely to

have its own package within which elements are “shared”

among classes within the package.

 Used for cases where “shared” elements are not intended

to be publicly visible (e.g., to other teams).

CMSC 131 Fall 2007 Jan Plane (adapted by Bonnie Dorr)

8

Example

 To illustrate these points, let’s consider an example of a simple hierarchical package, which we will create.

Files: Driver.java (^) Driver

Files: Circle.java Rectangle.java OtherShape.java

Files: PublicClass1.java PublicClass2.java

Circle

Rectangle

OtherShape

PublicClass NonPublicClass

PublicClass

graphics

graphics.shapes

graphics.otherstuff

Packages: Files: Classes:

CMSC 131 Fall 2007 Jan Plane (adapted by Bonnie Dorr)

9

Example: graphics.shapes

package

package graphics.shapes; public class Circle { private double radius; public String toString( ) { return "I'm a circle"; } }

package graphics.shapes; public class Rectangle { private double height, width; public String toString( ) { return "I'm a rectangle"; } }

package graphics.shapes; public class OtherShape { private Circle c; private Rectangle r; }

File: Circle.java

File: Rectangle.java

File: OtherShape.java

Note: Classes of this package can be accessed without the need for import or using graphics.shapes.Circle

CMSC 131 Fall 2007 Jan Plane (adapted by Bonnie Dorr)

12

File Structure

 Java organizes the package files using your system’s directory structure.

graphics: Driver.class Driver.java otherstuff/ shapes/

graphics/otherstuff: NonPublicClass1.class PublicClass1.java PublicClass2.java PublicClass1.class PublicClass2.class

graphics/shapes: Circle.class OtherShape.class Rectangle.class Circle.java OtherShape.java Rectangle.java

When you create new packages in Eclipse, this is done automatically.

Note that nonpublic classes generate their own .class file, even though there is no .java file.

CMSC 131 Fall 2007 Jan Plane (adapted by Bonnie Dorr)

13

Packages and .jar Files

 Packages are convenient, but large directories are not.

 Jar File: Java allows you to bundle up an entire directory of files

into a single file, called a jar file.

 Creating a jar file:

 In Eclipse: In the Package Explorer window, right click on the project and select “Export →→→→ JAR file”.  On Unix: jar –cvf myJarFile.jar … (list the file names and/or directories) (c = create; t = list names; x = extract; v = verbose; f = jar file)

 Examples:

cmsc131PictureLib.jar: A jar file we created for the picture library. cmsc131PuzzleLib.jar: A jar file we created for HW#5. C:...\Java\j2re1.4.2_05\lib\rt.jar: This is a large (20+Mbyte) file with all the class files from the Java runtime library.

CMSC 131 Fall 2007 Jan Plane (adapted by Bonnie Dorr)

14

Packages and Classpath

 You may have many different packages on your system (e.g. the

Java runtime library, cmsc131PictureLib, cmsc131PuzzleLib) in

many different locations. How does Java know where to look for

them?

 ClassPath: is a system environment variable that gives a list of

directories and jar files where Java should look up its classes.

 Windows Example: Suppose we want to use

 graphics package: stored in directory C:\MyJavaPackages\graphics.  cmsc131PictureLib.jar: stored in C:\MyJars\cmsc131PictureLib.jar  classes compiled in the current working directory: The current directory is denoted by “.” (period) on most systems.

 C:>set CLASSPATH=.;C:\MyJavaPackages;C:\MyJars\cmsc131PictureLib.jar

Always include “.” The list is separated by semicolons “;”

jar files must be listed explicitly

CMSC 131 Fall 2007 Jan Plane (adapted by Bonnie Dorr)

15

Packages and Classpath

 In Eclipse: The ClassPath is already set with important

default directories (e.g. the Java runtime library). To modify the ClassPath:

 In the Package Explorer, right click on the project name

 Select “Properties →→→→ Java Build Path →→→→ Libraries”

 To add Jars: Select: “Add External JARs…” and browse for the

file name.

 To add a directory to the ClassPath: Select:

Add Variable… →→→→ Configure Variables →→→→ New

and add the name of the new directory.