Thursday, 18 August 2011

Packages - Defining


Package = directory. Multiple classes of larger programs are usually grouped together into a package. Packages correspond to directories in the file system, and may be nested just as directories are nested.

Reasons to use packages

  • Grouping related classes.

  • In large programs prevents name conflicts.

  • Allows effective use of default "package" visibility.

  • Creates a unique class name for distribution, Preferences, ...

Grouping related classes. If you are writing a normal one-programmer application, it will typically be in one package. The purpose of a package is to group all related classes together. If you are working on a program that is divided into separate sections that are worked on by others, each section might be in its own package. This prevents class name conflicts and reduces coupling by allowing package scope to be used effectively.
Library in package. If you're writing a library to use in various programming projects or by others, put it in its own package. Programs that use this library will be developed in their own packages. With its thousands of library classes, Java has grouped related library classes into packages, but usually you won't define more than one package.

Summary of how many packages you usually define

  • Normal programs = one package.

  • Library = one package.

  • Program + library = two packages.

Reasons for using packages

  • Limit the scope of class names.

  • To make package access more usable.

Package declarations

Each file may have a package declaration which precedes all non-comment code. The package name must be the same as the enclosing directory.
Default package. If a package declaration is omitted, all classes in that directory are said to belong to the "default" package.
Here are two files in the packagetest directory.
package packagetest;



class ClassA {

public static void main(String[] args) {

ClassB.greet();

}

}
and
package packagetest;  // Same as in previous file.



class ClassB {

static void greet() {

System.out.println("Hi");

}

}
Note that these source files must be named ClassA.java and ClassB.java (case matters) and they must be in a directory named packagetest.

Compiling and running packages from a command line

To compile the above example, you must be outside the packagetest directory. To compile the classes:
javac packagetest/ClassB.java

javac packagetest/ClassA.java
To run the main program in ClassA.
java packagetest.ClassA
or
java packagetest/ClassA
In windows the "/" can be replaced by the "\" in the javac command, but not in the java command. Generally use a forward slash ("/") because it is used more commonly than the backslash in other places as well.
<!-- If you've been developing small programs, you didn't have to worry about grouping all your files. A "package" corresponds to a directory, and they are sometimes nested for a large number of files, like the Java library. If you look at the Java library source code, you'll find a directory called "java". In that directory, you'll find a "util" directory (the java.util package) which contains all the classes in this package (Scanner, ArrayList, etc), an "awt" directory (java.awt package), etc. The other reason to define packages is to make your fully qualified class names completely unique. Java recommends using a reversed domain name. I own the domain name fredswartz.com, so I often use the package name com.fredswartz, at least for any programs that I'm moderately serious about. Sun recommends strongly that you use packages for your programs -- I believe this is because it's difficult to do some things if they aren't in a package, or at least it's more convenient (eg, Preferences). Nothing you'd use for a small program, but it becomes important for larger programs. -->

No comments:

Post a Comment