# Java: Packages - Defining

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 for using packages

- To allow classes to be combined in a single ".jar" file.
- To control the namespace.
- To limit the scope of names.

## Package declarations

Each file must have a `package` declaration which precedes all non-comment code. The package name must be the same as the enclosing directory. For example, here are two files in the `packagetest` directory.

    package packagetest;
    class ClassA {
        public static void main(String[] args) {
            ClassB.greet();
        }
    }

and

    package packagetest;
    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.