Java is used to create a wide range of applications, including games, desktop applications, online applications, and mobile apps.
Packages Are Used For
- Preventing naming conflicts. For example there can be two classes with name Employee in two packages, college.staff.cse.Employee and college.staff.ee.Employee
- Making searching/locating and usage of classes, interfaces, enumerations and annotations easier
- Providing controlled access: protected and default have package level access control. A protected member is accessible by classes in the same package and its subclasses. A default member (without any access specifier) is accessible by classes in the same package only.
- Packages can be considered as data encapsulation (or data-hiding).
How Packages work?
- Package naming conventions : Packages are named in reverse order of domain names, i.e., org.javaprogramer.practice. For example, in a college, the recommended convention is college.tech.cse, college.tech.ee, college.art.history, etc.
- Adding a class to a Package : We can add more classes to a created package by using package name at the top of the program and saving it in the package directory. We need a new java file to define a public class, otherwise we can add the new class to an existing .java file and recompile it.
- Subpackages: Packages that are inside another package are the subpackages. These are not imported by default, they have to imported explicitly. Also, members of a subpackage have no access privileges, i.e., they are considered as different package for protected and default access specifiers.
Example
import java.util.*;
util is a subpackage created inside java package.
Accessing Classes Inside Package
Consider following two statements :
// import the Vector class from util package.
import java.util.vector;
// import all the classes from util package
import java.util.*;
// All the classes and interfaces of this package
// will be accessible but not subpackages.
import package.*;
// Only mentioned class of this package
will be accessible.
import package.classname;
// Class name is generally used when two
packages have the same
// class name. For example in below code both
packages have
// date class so using a fully qualified name
to avoid conflict
import java.util.Date;
import my.package.Date;
// Java program to demonstrate accessing of
members when
// corresponding classes are imported
and not imported.
import java.util.Vector;
public class ImportDemo
{
public ImportDemo()
{
// java.util.Vector is imported, hence we are
// able to access directly in our code.
Vector newVector = new Vector();
// java.util.ArrayList is not imported, hence
// we were referring to it using the complete
// package.
java.util.ArrayList newList
= new java.util.ArrayList();
}
public static void main(String arg[])
{
new ImportDemo();
}
}
Types Of Packages
Types Of packages
- java.lang: Contains language support classes(e.g classed which defines primitive data types, math operations). This package is automatically imported.
- java.io:Contains classed for supporting input / output operations.
- java.util:Contains utility classes which implement data structures like Linked List, Dictionary and support ; for Date / Time operations.
- java.applet:Contains classes for creating Applets.
- java.awt: Contain classes for implementing the components for graphical user interfaces (like button , ;menus etc).
- java.net: Contain classes for supporting networking operations.
User-defined packages
// Name of the package must be
same as the directory
// under which this file is saved
package myPackage;
public class MyClass
{
public void getNames(String s)
{
System.out.println(s);
}
}
/* import 'MyClass' class from 'names'
myPackage */
import myPackage.MyClass;
public class PrintName
{
public static void main(String args[])
{
// Initializing the String variable
// with a value
String name = "JAVA PROGRAMMER";
// Creating an instance of class
MyClass in
// the package.
MyClass obj = new MyClass();
obj.getNames(name);
}
}
Note : MyClass.java must be saved inside the myPackage directory since it is a part of the package.
Using Static Import
Following program demonstrates static import :
// Note static keyword after import.
import static java.lang.System.*;
class StaticImportDemo
{
public static void main(String args[])
{
// We don't need to use 'System.out'
// as imported using static.
out.println("JAVA PROGRAMMER");
}
}
Output:JAVA PROGRAMMER
Handling Name Conflicts
import java.util.*;
import java.sql.*;
//And then use Date class, then we will
//get a compile-time error :
Date today ;
//ERROR-- java.util.Date or java.sql.Date?
import java.util.Date;
import java.sql.*;
java.util.Date deadLine = new java.util.
Date();
java.sql.Date today = new java.sql.Date();
Handling Name Conflicts
“$BASE_DIR\com\zzz\project1\subproject2\Circle.class”, where $BASE_DIR denotes the base directory of the package. Clearly, the “dot” in the package name corresponds to a sub-directory of the file system.
The base directory ($BASE_DIR) could be located anywhere in the file system. Hence, the Java compiler and runtime must be informed about the location of the $BASE_DIR so as to locate the classes. This is accomplished by an environment variable called CLASSPATH. CLASSPATH is similar to another environment variable PATH, which is used by the command shell to search for the executable programs.
Setting CLASSPATH
CLASSPATH can be set by any of the following ways:
CLASSPATH can be set permanently in the environment: In Windows, choose control panel ? System ? Advanced ? Environment Variables ? choose “System Variables” (for all the users) or “User Variables” (only the currently login user) ? choose “Edit” (if CLASSPATH already exists) or “New” ? Enter “CLASSPATH” as the variable name ? Enter the required directories and JAR files (separated by semicolons) as the value (e.g., “.;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar”). Take note that you need to include the current working directory (denoted by ‘.’) in the CLASSPATH.
To check the current setting of the CLASSPATH, issue the following command:
> SET CLASSPATH
> SET CLASSPATH=.;c
:\javaproject\classes;d
:\tomcat\lib\servlet-api.jar
- Instead of using the CLASSPATH environment variable, you can also use the command-line option -classpath or -cp of the javac and java commands, for example,
> java –classpath c
:\javaproject\classes com
.abc.project1.subproject2.MyClass3
Illustration Of User-defined Packages
File name – ClassOne.java
package package_name;
public class ClassOne {
public void methodClassOne()
{
System.out.println("Hello there its ClassOne");
}
}
File name – ClassTwo.java
package package_one;
public class ClassTwo {
public void methodClassTwo()
{
System.out.println("Hello there i am ClassTwo");
}
}
File name – Testing.java
import package_one.ClassTwo;
import package_name.ClassOne;
public class Testing
{
public static void main(String[] args)
{
ClassTwo a = new ClassTwo();
ClassOne b = new ClassOne();
a.methodClassTwo();
b.methodClassOne();
}
}
Output:
Hello there i am ClassTwo
Hello there its ClassOne
Important points:
- Every class is part of some package.
- If no package is specified, the classes in the file goes into a special unnamed package (the same unnamed package for all files).
- All classes/interfaces in a file are part of the same package. Multiple files can specify the same package name.
- If package name is specified, the file must be in a subdirectory called name (i.e., the directory name must match the package name).
- We can access public classes in another (named) package using: package-name.class-name